【SSLGZ 1409】(树)哈夫曼树(三)
来源:互联网 发布:移动端域名怎么解决 编辑:程序博客网 时间:2024/06/05 18:03
问题描述
根据传送的一串字符出现的频率,设置其相应的哈夫曼编码。
样例输入
XINNNMM
样例输出
N:0
M:10
X:110
I:111
算法讨论
统计字符串每个字母的频率,构建哈弗曼树,注意当两权值相同时不按字典序排序,按在字符串中出现的顺序排序,最好将对应字母存储起来,不然输出很麻烦,还有可能会错。
const maxn=200;var a:array[0..maxn,1..2] of longint; f:array[0..maxn,1..3] of longint; v:array[0..maxn] of longint; d,d1:array[0..maxn] of char; c:array['A'..'Z'] of longint; f1:array['A'..'Z'] of boolean; i,j,n,t:longint; flag:boolean; st:string; o:char;procedure sort(k:longint);var i,j,t:longint; x:char;begin for i:=1 to k-1 do for j:=i+1 to k do if (a[i,1]>a[j,1]) or ((a[i,1]=a[j,1]) and (a[i,2]>a[j,2])) then begin t:=a[i,1]; a[i,1]:=a[j,1]; a[j,1]:=t; t:=a[i,2]; a[i,2]:=a[j,2]; a[j,2]:=t; x:=d[i]; d[i]:=d[j]; d[j]:=x end;end;procedure vist(t:longint);var j:longint;begin if f[t,1]=0 then begin flag:=true; exit end; v[i]:=0; inc(i); vist(f[t,2]); dec(i); v[i]:=1; inc(i); vist(f[t,3]); dec(i); v[i]:=-1; if flag then begin write(d1[t],':'); for j:=1 to i-1 do write(v[j]); writeln; flag:=false end;end;begin readln(st); n:=length(st); for i:=1 to n do inc(c[st[i]]); j:=0; for i:=1 to n do if f1[st[i]]=false then begin inc(j); a[j,1]:=c[st[i]]; a[j,2]:=j; f[j,1]:=a[j,1]; d[j]:=st[i]; d1[j]:=st[i]; f1[st[i]]:=true end; fillchar(f1,sizeof(f1),false); t:=n+1; i:=j; while i>1 do begin sort(i); f[t,1]:=a[1,1]+a[2,1]; f[t,2]:=a[1,2]; f[t,3]:=a[2,2]; a[1,1]:=f[t,1]; a[1,2]:=t; a[2,1]:=a[i,1]; a[2,2]:=a[i,2]; d[1]:=chr(110+t); d[2]:=d[i]; inc(t); dec(i) end; fillchar(v,sizeof(v),255); i:=1; vist(t-1)end.
Pixiv ID:60472266
0 0
- 【SSLGZ 1409】(树)哈夫曼树(三)
- 【SSLGZ 1407】(树)哈夫曼树(一)
- 【SSLGZ 1408】(树)哈夫曼树(二)
- 【SSLGZ 2646】线段树练习三
- 【SSLGZ 2759】挖矿(dp)
- 【SSLGZ 2644】线段树练习题一
- 【SSLGZ 2645】线段树练习题二
- 【SSLGZ 2647】线段树练习四
- 【SSLGZ 2648】线段树练习五
- 【SSLGZ 1760】商店选址问题(Dijkstra)
- 【SSLGZ 1614】医院设置(Dijkstra)
- 【SSLGZ 1613】最短路径问题(Floyd)
- 【SSLGZ 1021】2002年分区联赛普级组之三 产生数
- 【SSLGZ 2776】2017年10月19日提高组 整除(number)(容斥原理)
- 【SSLGZ 2780】2017年10月20日提高T2 收银员(01背包)
- 【SSLGZ 2793】2017年10月26日提高组T2 Deep(博弈)
- 【SSLGZ 2794】2017年10月26日提高组T2 Dark(dp)
- 【SSLGZ 1618】剑鱼行动
- PostgreSQL学习篇9.10 枚举类型
- Java对象的序列化与反序列化
- 网络传输协议概念和HTTP协议
- 脚手架搭建流程小结
- CXF客户端调用N种方式
- 【SSLGZ 1409】(树)哈夫曼树(三)
- android中如何为设置了背景图的按钮自定义动画
- OpenGL学习02_函数语法与命名规范
- Spring session
- HTML学习笔记:HTML开发常见问题
- 如何在ecshop后台左侧菜单中增加新菜单项
- AndroidStudio插件开发(Hello World篇)
- GNSS定位协议
- 知识点五:JQuery-遍历==>后代Children(),find()