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编码的主要内容,如果未能解决你的问题,请参考以下文章
学习数据结构笔记(10) --- [赫夫曼树(Huffman Tree)与赫夫曼编码(Huffman coding)]