软考常考题型之哈夫曼(Huffman)树问题

  以2021年11月的软考上午题为例,如下:

  已知一个文件中出现的各字符及其对应的频率如下表所示。采用Huffman编码,则该文件中字符a和c的码长分别为(1)。若采用Huffman编码,则字序列 “110001001101” 的编码应为(2)。

(1)A、1和3

B、1和4

C、3和3

D、3和4

(2)A、face

B、bace

C、acde

D、fade

解析:答案为(1)A(2)A,首先哈夫曼树的构建原则是使每个字符的二进制编码长度乘以它对应的频率累加求和后的数值最小.其次,哈夫曼树字符频率越小的越在下层,且左孩子小于右孩子,相加等于根.构造过程中,从最小的两个字符频率开始,求和获得两个孩子的根节点,继续比较,如果有两个数比这个根节点小,那就重新构造一个分支,否则,就在原分支继续构造即可,直到构造成一棵树.

 计算某个字符的二进制码长,例如f的编码为1100,由4位二进制编码构成,即f的二进制码长为4.其余的以此类推.

结果如下:

a:0

b:101

c:100

d:111

e:1101

f:1100

所以求得最短的二进制编码字符数为:

45*1+13*3+12*3+16*3+9*4+5*4 = 224

有的哈夫曼树可能不止一种,本题中树构造时也可以把12,13那个分支放到右面,虽然最后各个字符的编码不一样,但最后计算的最短二进制编码字符数是一样的,这种叫同权不同构.依据题意,最终答案为(1)A,(2)A.

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值