以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.