SSL P1407【树】哈夫曼树(一)
来源:互联网 发布:freebsd python 编辑:程序博客网 时间:2024/06/05 21:03
Description
假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为7、19、2、6、32、3、21、10。试为这8个字母设计哈夫曼编码。如果用二进制数表示这8个字母的编码方案.(请按照左子树根节点的权小于等于右子树根节点的权的次序构造)
Input
第一行为字母的个数n;
第二行至第n+1行分别为各个字母在电文中出现的频率;
Output
按照中序遍历输出各个编码
Sample Input
8
7
19
2
6
32
3
21
10
Sample Output
19:00
21:01
2:10000
3:10001
6:1001
7:1010
10:1011
32:11
时间复杂度吗 O(n^2)
哈夫曼树:
1.选取其根结点的权值为最小的两棵二叉树,分别作为左、右子树构造一棵新的二叉树。
2.置这棵新的二叉树根结点的权值为其左、右子树根结点的权值之和。
3.去这两棵树,同时加入刚生成的新树。
4.重复以上步骤,直到只含一棵树为止。
type arr=record data:longint; l,r:longint; addr:longint; end;var f,a:array[0..201] of arr; i,j,t,n:longint;procedure mp(k:longint);var i,j:longint; t:arr;begin for i:=1 to k-1 do for j:=i+1 to k do if a[i].data>a[j].data then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end;end;procedure vist(ans:string;t:longint);begin if f[t].data=0 then exit; vist(ans+'0',f[t].l); vist(ans+'1',f[t].r); if f[t].l=0 then if f[t].r=0 then writeln(f[t].data,':',ans);end;begin readln(n); for i:=1 to n do begin readln(a[i].data); f[i].data:=a[i].data; a[i].addr:=i; end; t:=n+1; i:=n; while i>1 do begin mp(i); f[t].data:=a[1].data+a[2].data; f[t].l:=a[1].addr; f[t].r:=a[2].addr; a[1].data:=f[t].data; a[1].addr:=t; a[2].data:=a[i].data; a[2].addr:=a[i].addr; inc(t); dec(i); end; vist('',t-1);end.
1 0
- SSL P1407【树】哈夫曼树(一)
- SSL(一)
- 洛谷P1407 工资
- SSL P2644 线段树练习题一
- Vijos P1407 古韵之刺绣
- ssl 安装(一)
- HTTPS与SSL(一)
- HTTPS与SSL(一)
- HTTPS与SSL(一)
- HTTPS与SSL(一)
- HTTPS与SSL(一)
- HTTPS与SSL(一)
- HTTPS与SSL(一)
- HTTPS与SSL(一)
- SSL P1408【树】哈夫曼树(二)
- SSL P1409【树】哈夫曼树(三)
- 【9018p1407】拦截导弹(二分)
- 水——洛谷P1407 工资
- java爬虫
- 【51nod】1027 大数乘法
- 解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)
- ajax同步和异步问题
- 静态分析工具PMD使用说明
- SSL P1407【树】哈夫曼树(一)
- C语言程序风格
- MyBatis与MySQL交互
- ViewStub的那些事儿
- 架构设计:系统存储(9)——MySQL数据库性能优化(5)
- [poj1275] 出纳员的雇佣Cashier Employment
- 在python中使用xlwt操作excel
- myeclipse设置
- 一维高斯混合模型EM算法实现