HDU1053 - Entropy (哈夫曼树)
2015-09-07 21:55
344 查看
题目链接
思路
代码
思路
代码
思路
纯数据结构。代码
#include <iostream> #include <cstdio> #include <map> #include <queue> #include <cstring> using namespace std; struct node { char ch; int num; int ls, rs; } tree[100]; struct cmp { bool operator()(int &a, int &b) { return tree[a].num>tree[b].num; } }; char text[1000]; void traversal(int root, int count, map<char, int> & table) { if(!tree[root].ls&&!tree[root].rs) { table[tree[root].ch] = count; } else { if(tree[root].ls) traversal(tree[root].ls, count+1, table); if(tree[root].rs) traversal(tree[root].rs, count+1, table); } } void slove() { map<char ,int> count; int nCount = 0; int len = strlen(text); for(int i=0; i<len; i++) count[text[i]]++; priority_queue<int, vector<int>, cmp> qu; for(map<char, int>::iterator it=count.begin(); it!=count.end(); it++) { tree[++nCount].ch = (*it).first; tree[nCount].num = (*it).second; tree[nCount].ls = tree[nCount].rs = 0; qu.push(nCount); } if(qu.size()==1) { printf("%d %d %.1f\n", len*8, len, 8.0); } else { int a, b; while(!qu.empty()) { a = qu.top(); qu.pop(); if(qu.empty()) break; b = qu.top(); qu.pop(); tree[++nCount].num = tree[a].num + tree[b].num; tree[nCount].ls = a; tree[nCount].rs = b; qu.push(nCount); } map<char, int> table; traversal(nCount, 0, table); int sum = 0; for(map<char, int>::iterator it=count.begin(); it!=count.end(); it++) { sum += (table[(*it).first]*((*it).second)); } printf("%d %d %.1f\n", len*8, sum, (double)len*8/sum); } } int main() { while(gets(text)) { if(strcmp(text, "END")==0) break; else { slove(); } } return 0; }
相关文章推荐
- CentOS安装VMware Tools
- Linux下配置用msmtp和mutt发邮件
- linux或mac系统下的端口转发
- shell syntax error near unexpected token
- 阿里云盾网站安全防御(WAF)的使用方法(图文)
- centos下安装mysql
- Linux-----Ubuntu搭建FTP服务器
- XAMPP Apache服务器解析php页面汉字乱码的解决
- CentOS 加载/挂载光驱
- Apache 伪静态设置
- 7.【SELinux学习笔记】约束
- Apache开启不了------The requested operation has failed!
- hadoop中HBase、Flume、Hive、Zookeeper简要概述
- 30号练习
- Linux2.6.32移植到MINI2440(4)移植+分析DM9000网卡驱动
- 【CROATIAN OPEN COMPETITION IN INFORMATICS 3rd round, November 29th, 2014】HONI
- bash下的环境变量
- nginx集群的配置
- Linux系统分区
- Linux系统检查查看桌面环境