数据结构实验之二叉树六:哈夫曼编码
来源:互联网 发布:十年前的qq网络用语 编辑:程序博客网 时间:2024/05/23 12:35
这道题的主要思想是利用优先队列的自动排序来实现每次入队后队列的前两个均为整个队列最小的两个。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
int i,la,lh,v[1000];
string s;
while(cin>>s){
memset(v,0,sizeof(v));
la=8*s.size();//ASCII编码为定长编码,约定用一个ASCII码值占一个字节(8个二进制位);
priority_queue<int,vector<int>,greater<int> > q;/*优先队列,优先队列不是按照入队的顺序出队,而是按照队列中元素的优先权顺序
出队(默认为大者优先,也可以通过指定算子来指定自己的优先顺序)*/
for(i=0;i<s.length();i++)
v[s[i]]++;
for(i=0;i<200;i++)
if(v[i]!=0)
q.push(v[i]);
lh=0;//赫夫曼编码长度即为树的带权路径长度,搞清楚赫夫曼树、赫夫曼编码的解释
while(!q.empty()){
int n=q.top();
q.pop();
if(!q.empty()){
int m=q.top();
q.pop();
int p=m+n;
q.push(p);
lh=lh+p;
}
}
printf("%d %d %.1lf\n",la,lh,la*1.0/lh);
}
return 0;
}
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- sdutoj 3345 数据结构实验之二叉树六:哈夫曼编码
- SDUT3345数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUT 3345 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUTACM 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数字滑动
- Java同步
- C++ string 用法
- 数据结构实验之二叉树六:哈夫曼编码
- Session 'app': Error Launching activity
- 数据结构实验之二叉树六:哈夫曼编码
- 相遇何迟迟,思念隔云海
- Linux的sleep()和usleep()的使用和区别
- hdu 1850 Being a Good Boy in Spring Festival (Nim博弈求第一步走法数)
- 集成百度地图找不到so库
- openstack 工作流 workflows使用原理讲解
- pthread_cond_t 与 pthread_mutex_t(转载)
- Qualcomm android camera 架构简析及如何debug
- java Thread 线程的.Join()方法