Huffman 编码

来源:百度知道 编辑:UC知道 时间:2024/05/16 07:50:26
C或C++的~
若待编码的字符集为C={c1,c2,c3,c4,c5},相应地在电文中出现的频率集W={5,7,10,2,4}。求各字符的Huffman 编码。
麻烦我要的是具体的程序不是算法~!

Huffman 编码

c1:01
c2:10
c3:11
c4:000
c5:001

HUFFMAN编码:
c1:11
c2:01
c3:00
c4:101
c5:100
算法过程如下:根据频率集从高到低列出各字符集,然后合并最低两字符的频率再次排列,反复循环直到剩下两字符(组)
c3 10 c3 10 c541 11 c32 17
c2 7 c2 7 c3 10 c541 11
c1 5 c54 6 c2 7
c5 4 c1 5
c4 2
接着根据上表构造Huffman二叉数:
TOTAL
0/ \1
c32 c541
0/ \1 0/ \1
c3 c2 c1 c54
0/ \1
c5 c4
从根节点到叶的路径权值就是Huffman编码了:
c1:=1+0=10 c2:=0+1=01 c3:=0+0=00 c4:=1+1+1=111 c5:=1+1+0=110
为什么与开头列出的答案不同?这是因为Huffman编码不唯一,只要符合其定义要求就可以了,上图树中0与1、节点、叶子位置的改变就会改变其Huffman编码

具体C/C++编程实现就不写了,又是一道作业题啊,把算法弄清楚就很好编的
PS:天啊,我排好版的,一提交,树就不成树了。。。