SDUT-数据结构实验之二叉树六:哈夫曼编码
来源:互联网 发布:淘宝假货退款不退货 编辑:程序博客网 时间:2024/06/01 10:26
数据结构实验之二叉树六:哈夫曼编码
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码。哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%~90%之间。你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼编码长度的比值。
Input
输入数据有多组,每组数据一行,表示要编码的字符串。
Output
对应字符的ASCII编码长度la,huffman编码长度lh和la/lh的值(保留一位小数),数据之间以空格间隔。
Example Input
AAAAABCDTHE_CAT_IN_THE_HAT
Example Output
64 13 4.9144 51 2.8
Hint
Author
xam
#include <bits/stdc++.h>using namespace std;int main(){ char s[10000]; while(scanf("%s",s)!=EOF) { priority_queue<int,vector<int>,greater<int> >q; int len,i,m,x,y; m=0; int a[1000]={0}; len=strlen(s); for(i=0; i<len; i++) { a[s[i]]++; if(s[i]>m) { m=s[i]; } } for(i=0; i<=m; i++) { if(a[i]!=0) q.push(a[i]); } int sum=0; while(!q.empty()) { x=q.top(); q.pop(); if(!q.empty()) { y=q.top(); q.pop(); sum+=(x+y); q.push(x+y); } } cout<<len*8<<' '<<sum<<' '<<setprecision(2)<<len*8.0/sum<<endl; } return 0;}
//有大神知道为什么下面的过不了望指点#include <bits/stdc++.h>using namespace std;int main(){ string s; while(getline(cin,s)) { priority_queue<int,vector<int>,greater<int> >q; int len,i,m,x,y; m=0; int a[256]={0}; len=s.length(); for(i=0; i<len; i++) { a[s[i]]++; if(s[i]>m) { m=s[i]; } } for(i=0; i<=m; i++) { if(a[i]!=0) q.push(a[i]); } int sum=0; while(!q.empty()) { x=q.top(); q.pop(); if(!q.empty()) { y=q.top(); q.pop(); sum+=(x+y); q.push(x+y); } } cout<<len*8<<' '<<sum<<' '<<setprecision(2)<<len*8.0/sum<<endl; } return 0;}#include <bits/stdc++.h>using namespace std;void qsort(int a[],int left,int right){ int x=a[left],i=left,j=right; if(i>=j) return; while(i<j) { while(i<j&&a[j]>=x)j--; a[i]=a[j]; while(i<j&&a[i]<=x)i++; a[j]=a[i]; } a[i]=x; qsort(a,left,i-1); qsort(a,i+1,right);}int main(){ char s[1001]; int t[500],q[500]; while(cin>>s) { memset(t,0,sizeof(t)); int top=0; int rear=0; int len=strlen(s); int sum1=len*8,sum2=0; for(int i=0;i<len;i++) { t[s[i]]++; } for(int i=0;i<500;i++) { if(t[i]!=0) q[top++]=t[i]; } qsort(q,0,top-1); while(rear!=top) { int x1=q[rear++]; if(rear!=top) { int x2=q[rear++]; sum2+=(x1+x2); q[top++]=x1+x2; qsort(q,rear,top-1); } } printf("%d %d %.1lf\n",sum1,sum2,1.0*sum1/sum2); } return 0;}
阅读全文
0 0
- SDUT 3345 数据结构实验之二叉树六:哈夫曼编码
- sdut oj3345 数据结构实验之二叉树六:哈夫曼编码
- sdut 数据结构实验之二叉树六:哈夫曼编码
- SDUT-3345 数据结构实验之二叉树六:哈夫曼编码
- SDUT-数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- sdutoj 3345 数据结构实验之二叉树六:哈夫曼编码
- SDUT3345数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUTACM 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- Android游戏开发之飞行射击类游戏原理
- 排序算法
- maven安装本地jar包到maven仓库中
- [UIImage imageWithContentsOfFile:]引发的图片显示异常问题(一半图片是黑的)
- zabbix 3.0.9邮件报警设置
- SDUT-数据结构实验之二叉树六:哈夫曼编码
- RDS for MySQL 通过分区归档历史数据
- PPT控件Spire.Presentation 教程:在幻灯片表格中为文本设置水平对齐
- Python的 私有 共有 命名
- redis主从、哨兵、集群
- 解决酷狗的kadb干扰adb连接设备的问题
- 数据库系统概念 读书笔记(六)
- 欢迎使用CSDN-markdown编辑器
- 关于so文件你需要知道的知识