数据结构实验之二叉树六:哈夫曼编码
来源:互联网 发布:怎样用js做用户名验证 编辑:程序博客网 时间:2024/06/03 22:55
题目描述
字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码。哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%~90%之间。你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼编码长度的比值。
输入
输出
示例输入
AAAAABCDTHE_CAT_IN_THE_HAT
示例输出
64 13 4.9144 51 2.8
#include <stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;char Tree[500];//字符串int num[500];//统计字符个数/*bool cmp(int x,int y)//将字符串个数s升序排序{ return x<y;}
*/int main(){ while(~scanf("%s",Tree)) { int l; l=strlen(Tree); int sum=0,sum1=0;//哈弗曼码数 //ASCLL编码数量 sum1=l*8; int queue[100];//用一个队列来保存数组中相加的数 int k=0,count=0; memset(num,0,sizeof(num));//将计数的数组初始化全部为0; for(int i=0;i<l;i++)//统计字符个数 num[Tree[i]]++; for(int i=0;i<500;i++)//将字符个数保存起来 if(num[i]!=0) queue[k++]=num[i]; while(k-count>=2) //注意边界循环条件最小生成树的条件; { sort(queue+count,queue+k);//排序的范围将字符个数升序排列; int a=queue[count]; count++; int b=queue[count]; count++; queue[k++]=a+b; sum+=a+b; } printf("%d %d %.1lf\n",sum1,sum,(sum1*1.0)/(sum*1.0));//输出时强制类型转换 } return 0;}
#include<iostream>#include<queue>#include<cstdio>#include<cstring>using namespace std;int main(){ int num[500]; char s1[500]; while(~scanf("%s",s1)) { priority_queue<int,vector<int>,greater<int> >q; int l=strlen(s1); int sum=0,sum1=l*8; memset(num,0,sizeof(num)); for(int i=0;i<l;i++) num[s1[i]]++; for(int i=0;i<500;i++) if(num[i]) q.push(num[i]); while(q.size()>=2) { int a=q.top(); q.pop(); int b=q.top(); q.pop(); q.push(a+b); sum+=a+b; } printf("%d %d %.1lf\n",sum1,sum,sum1*1.0/sum); }}
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- sdutoj 3345 数据结构实验之二叉树六:哈夫曼编码
- SDUT3345数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUT 3345 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUTACM 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- nyoj-1261-音痴又音痴的LT【思维】
- UVAlive 6623 Battle for Silver(暴力+思路)
- TCP-心跳
- Leetcode 385. Mini Parser
- QRCode生成二维码和解析二维码
- 数据结构实验之二叉树六:哈夫曼编码
- 使用wifi网卡笔记3---工具wpa_supplicant(STA模式)
- MAC OS 安装pip
- UI基础学习05
- 计算机网络-应用层
- spring ApplicationContext.xml几种加载方式
- objective-c中是如何实现线程同步的?
- 详解onSaveInstanceState 和 onRestroreInstanceState 何时调用
- Large sum--projecteuler