哈夫曼树的模板题
实质其实是贪心法
#include<bits/stdc++.h>
#include<queue>
using namespace std;
const int maxn = 1e4+10;
int main(){
int N;
float arr[maxn];
memset(arr,0,sizeof(arr));
priority_queue<int, vector<int>,greater<int> > q;
while(!q.empty()){
q.pop();
}
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%f",&arr[i]);
q.push(arr[i]);
}
while(q.size()>1){
int a= q.top();
q.pop();
int b= q.top();
q.pop();
q.push((a+b)/2);
}
printf("%d\n",int(q.top()));
return 0;
}

本文介绍了一个关于哈夫曼树的经典模板题,通过使用贪心算法解决。主要讲解了如何利用优先队列(堆)来实现哈夫曼树的构建过程,通过不断合并最小的两个节点直至只剩一个节点,从而达到最小化加权路径长度的目的。
&spm=1001.2101.3001.5002&articleId=86668040&d=1&t=3&u=40b468a4c1c44cbe8fedd352d10b3fd4)
850

被折叠的 条评论
为什么被折叠?



