哈夫曼编码
来源:互联网 发布:最新中英文翻译软件 编辑:程序博客网 时间:2024/06/05 06:50
数据结构实验之二叉树六:哈夫曼编码
Time Limit: 1000MS Memory limit: 65536K
题目描述
字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码。哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%~90%之间。你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼编码长度的比值。
输入
输入数据有多组,每组数据一行,表示要编码的字符串。
输出
对应字符的ASCII编码长度la,huffman编码长度lh和la/lh的值(保留一位小数),数据之间以空格间隔。
示例输入
AAAAABCDTHE_CAT_IN_THE_HAT
示例输出
64 13 4.9144 51 2.8
#include<bits/stdc++.h>using namespace std;typedef struct node{ int data; int parent,lchild,rchild;} HTree;HTree t[10010];void chazhao(HTree t[],int k,int *s1,int *s2){ int i; for(i=1; i<k&&t[i].parent!=0; i++) { } *s1=i; for(i=1; i<k; i++) { if(t[i].data<t[*s1].data&&!t[i].parent) *s1=i; } for(i=1; i<k; i++) { if(!t[i].parent&&i!=*s1) break; } *s2=i; for(i=1; i<k; i++) { if(t[i].data<t[*s2].data&&!t[i].parent&&i!=*s1) *s2=i; }}void build(int n){ int m; m=2*n-1; for(int i=1; i<=m; i++) { t[i].parent=t[i].lchild=t[i].rchild=0; } int s1,s2; for(int i=n+1; i<=m; i++) { chazhao(t,i,&s1,&s2); t[s1].parent=t[s2].parent=i; t[i].lchild=s1; t[i].rchild=s2; t[i].data=t[s1].data+t[s2].data; //printf("%d %d %d\n",t[i].data,t[t[i].lchild].data,t[t[i].rchild].data); }}int main(){ int n,l,num[300]; char a[10010]; while(~scanf("%s",a)) { memset(t,0,sizeof(0)); memset(num,0,sizeof(num)); l=strlen(a); for(int i=0; i<l; i++) num[(int)a[i]]++; int k=1; for(int i=0; i<300; i++) if(num[i]) t[k++].data=num[i]; n=k-1; build(n); int s=0; for(int i=1; i<=2*n-1; i++) { if(i>=n+1) s+=t[i].data; else if(!t[i].parent) s+=t[i].data; } printf("%d %d %.1lf\n",8*l,s,8.0*l/s); } return 0;}
0 0
- 信源编码---哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 哈夫曼编码
- 【杭电3466】贪心+背包
- Codeforces Beta Round #17D. Notepad
- 傀儡进程原理及调试
- 268. Missing Number
- Python Flask 初探
- 哈夫曼编码
- 题目一:n个人叫m次.第m个人淘汰,重新开始,一直到最后一个人的问题(java)
- JZOJ 4679 种树【NOIP2016提高A组8.11】
- idea 加载不到 artifact
- Selenium浏览器之间转换
- jQuery-为动态添加的元素绑定事件
- 生成验证码
- 数据结构实验之查找三:树的种类统计
- PHP5中魔术方法