杭电hdu 1053 Entropy题解
来源:互联网 发布:anyview java 编辑:程序博客网 时间:2024/05/17 20:29
http://acm.hdu.edu.cn/showproblem.php?pid=1053
这题就是运用哈夫曼的编码思想,然后统计用哈夫曼编码后的二进制长度,以及运用ascii编码长度的比较。我在这题上感觉统计无从下手,虽然知道哈夫曼的贪心实现,但真正的到运用的时候了,却一时想不起应该怎么用代码去实现,进过参考别人用优先队列写的代码,我也写出了我自己的代码。现记录在下面。做个在编程上的参考。
#include <string>#include <algorithm>using namespace std;int num[27];void init(){int i;for(i = 0; i < 27; i ++){num[i] = 0;}}int fun(){int n = 0,i,j,l;sort(num, num+27);int tmp[27],k = 0;for(i = 0; i < 27; i ++){if(num[i] != 0)break;}l = 27-i;if(l == 1)return num[26];for(i = 27-l; i < 27; i ++){tmp[k++] = num[i];//printf("tmp[%d] = %d\n", k-1, tmp[k-1]);}for(i = 0; i < l - 1; i ++){if(i%2==0){num[0] = tmp[0] + tmp[1];n+=num[0];for(j = 2; j < k; j ++){num[j-1] = tmp[j];}k--;sort(num, num+k);}else{tmp[0] = num[0]+num[1];n+=tmp[0];for(j = 2; j < k; j ++){tmp[j-1] = num[j];}k--;sort(tmp, tmp+k);}}return n;}char str[1001];int main(){int len,i;int original, now;while(scanf("%s", str)&&strcmp(str,"END")!=0){init();len = strlen(str);for(i = 0; i < len; i ++){if(str[i]-'A'<26){num[str[i]-'A'] ++;}else {num[26] ++;}}original = 8*len;now = fun();printf("%d %d %.1lf\n", original, now, 1.0*original/now);}return 0;}
- 杭电hdu 1053 Entropy题解
- 杭电1053 Entropy
- 杭电1053~~Entropy
- 杭电OJ 1053:Entropy
- Hdu 1053 Entropy
- HDU 1053 Entropy
- hdu 1053 Entropy
- hdu 1053 Entropy
- hdu Entropy 1053 哈夫曼树
- hdu 1053 Entropy
- hdu 1053 Entropy
- hdu/hdoj 1053 Entropy
- hdu 1053Entropy
- HDU - 1053 Entropy
- hdu 1053 Entropy(霍夫曼树)
- HDU 1053 Entropy
- HDU 1053 Entropy
- hdu 1053 Entropy
- 送给“苦逼”的IT人系列2:要事第一,关于人生计划以及时间管理
- 为什么镜像卷组中需要3块或是以上的物理卷
- 在线编辑器
- Linux系统目录结构
- EOJ【1006】Prime 和素数有关的水题
- 杭电hdu 1053 Entropy题解
- Android SDK更新以及ADT更新出现问题的解决办法
- C基础/指定长度的字符串排列问题
- win7下完全安装VC6.0,解决添加文件即出现位响应问题
- PHP 正则表达式语法(一)
- ios::nocreate和ios::noreplace
- awt
- 详解二叉查找树算法的实现
- do,post方法的区别