Huffman编码

Posted 我是codel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Huffman编码相关的知识,希望对你有一定的参考价值。

Huffman编码用来解决最小二叉树问题...

用堆来维护,所用用优先队列(稍微修改一下放入方式)每次将两个权值最小的取出来,然后把他们的和再放进去,重复这个操作就可以解决了

 1 #include<iostream>
 2 #include<queue>
 3 using namespace std;
 4 typedef long long ll;
 5 
 6 int main(){
 7     priority_queue<int>que;
 8     int n, x;
 9     cin>>n;
10     for(int i=0; i<n; i++){
11         cin>>x;
12         que.push(-x);
13     }
14     ll ans=0;
15     while(que.size()>1){
16         int l1=-que.top();que.pop();
17         int l2=-que.top();que.pop();
18         ans+=(l1+l2);
19         que.push(-(l1+l2));
20     }
21     cout<<ans<<endl;
22 
23     return 0;
24 }

 

以上是关于Huffman编码的主要内容,如果未能解决你的问题,请参考以下文章

huffman编码代码

学习数据结构笔记(10) --- [赫夫曼树(Huffman Tree)与赫夫曼编码(Huffman coding)]

编码译码基于matlab GUI霍夫曼Huffman编码译码含Matlab源码 1976期

贪心算法-Huffman编码

HDU 1053 [Entropy] Huffman编码

基于二叉树和双向链表实现限制长度的最优Huffman编码