数据结构实验之二叉树六:哈夫曼编码
来源:互联网 发布:ai软件描边 编辑:程序博客网 时间:2024/06/05 15:41
数据结构实验之二叉树六:哈夫曼编码
Problem Description
字符的编码方式有多种,除了大家熟悉的ASCII编码,哈夫曼编码(Huffman Coding)也是一种编码方式,它是可变字长编码。该方法完全依据字符出现概率来构造出平均长度最短的编码,称之为最优编码。哈夫曼编码常被用于数据文件压缩中,其压缩率通常在20%~90%之间。你的任务是对从键盘输入的一个字符串求出它的ASCII编码长度和哈夫曼编码长度的比值。
Input
Output
Example Input
AAAAABCDTHE_CAT_IN_THE_HAT
Example Output
64 13 4.9144 51 2.8
#include <bits/stdc++.h>
using namespace std;
typedef struct Tree
{
char data;
Tree *left,*right;
}*P;
char ch[128];
int a[128],b[128];
int main()
{
while(cin>>ch)
{
int len=strlen(ch);
int i,j,t,num=0;
for(i=0;i<128;i++)
{
a[i]=0;
}
for(i=0;i<len;i++)
{
a[ch[i]]++;
}
for(i=0;i<128;i++)
{
if(a[i]!=0)
{
b[num++]=a[i];
}
}
int sum=0,k=0;
while(k<num-1)
{
/*for(i=k;i<num-1;i++)
{
for(j=k;j<num-i-1;j++)
{
if(b[j]>b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
}
for(i=k;i<num;i++)
{
cout<<b[i]<<" ";
}*/
sort(b+k,b+num);
int x1=b[k++];
int x2=b[k++];
b[num++]=x1+x2;
sum+=x1+x2;
}
float x=(float)(len+0.0)*8/(sum+0.0);//强制转换
printf("%d %d %.1f\n",len*8,sum,x);
}
return 0;
}
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- sdutoj 3345 数据结构实验之二叉树六:哈夫曼编码
- SDUT3345数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUT 3345 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUTACM 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- codeforces 651A python
- Android学习日记0_ 环境搭建、单元测试、注解
- LabelEncoder和OneHotEncoder 在特征工程中的应用
- Git版本管理--GitHub
- 1023. 组个最小数 (20)
- 数据结构实验之二叉树六:哈夫曼编码
- 音乐检索(听歌识曲)实现过程
- 数据分析
- SWPU CTF 2017 Web WriteUp
- ros机器人开发概述
- PAT (Basic Level) Practise (中文)1002
- 第十周——项目一(1)(2)
- 体系结构 通过python实现 哈夫曼编码 扩展编码 等长编码
- 计算机常用的存储单位