数据结构实验之二叉树六:哈夫曼编码
来源:互联网 发布:js如何设置div的高 编辑:程序博客网 时间:2024/06/05 23:41
数据结构实验之二叉树六:哈夫曼编码
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
提示
来源
xam
示例程序
这里的排序我用了快排 ,冒泡之类的我感觉会超时
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;void qsort(int a[],int low,int high){ if(low >= high) return ; int i = low,j = high,key = a[low]; while(i < j) { while(i < j && a[j] >= key) j--; a[i] = a[j]; while(i < j && a[i] <= key) i++; a[j] = a[i]; } a[i] = key; qsort(a,low,i-1); qsort(a,i+1,high);}int main(){ char str[1000]; int a[1000],b[1000],c[1000]; while(~scanf("%s",str)) { int k = 0,e,len,la,lh = 0; len = strlen(str); la = 8 * len; memset(a,0,sizeof(a)); for(int i = 0;i < len;i++) { e = str[i] - '0'; a[e]++; } for(int i = 0;i < 555;i++) { if(a[i] != 0) { b[k++] = a[i]; } } int j = 0; qsort(b,0,k-1); while(k > 1) { c[j] = b[0] + b[1]; b[1] = c[j]; j++; for(int i = 0;i < k;i++) { b[i] = b[i+1]; } k--; qsort(b,0,k-1); } for(int i = 0;i < j;i++) { lh += c[i]; } printf("%d %d %.1lf\n",la,lh,(1.0*la)/lh); } return 0;}
0 1
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- sdutoj 3345 数据结构实验之二叉树六:哈夫曼编码
- SDUT3345数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUT 3345 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- SDUTACM 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- 数据结构实验之二叉树六:哈夫曼编码
- Hash函数 纪中3094 数学
- android获得屏幕高度和宽度四种方法
- 优化3——数据库语句分析
- 【UVa】208 - Firetruck
- C与C++注释转换
- 数据结构实验之二叉树六:哈夫曼编码
- 2-10 霍纳法则(秦九韶算法)--求多项式
- G470 deepin wifi无法开启
- 111. Minimum Depth of Binary Tree
- linux中rm命令使用详解
- 【UVa】12325 - Zombie's Treasure Chest
- c# 数据统计(将Datagridview的列数据合计)
- 【UVa】524 - Prime Ring Problem
- 第一行代码,Activity部分