某一电文有字符A,B,C,D,E,F;它们出现的频率分别为4,2,6,8,3,2,试为这6个字符设计等长编码,并求出传送电文的总长度。
时间: 2024-05-28 22:13:04 浏览: 111
为这6个字符设计等长编码,需要满足以下条件:
1. 编码之间不会出现歧义,即每个字符的编码都不是其他字符编码的前缀。
2. 编码的长度相同,尽可能短。
假设将这6个字符的编码都设置为3位二进制数,则可以得到以下编码:
A - 000
B - 001
C - 010
D - 011
E - 100
F - 101
可以验证,这些编码满足条件1和条件2。传送电文的总长度为:
4×3 + 2×3 + 6×3 + 8×3 + 3×3 + 2×3 = 72
因此,传送电文的总长度为72位。
相关问题
已知某通讯系统电文由{a,b,c,d,e,f,g}7个字符组成,各 电文中的出现频率分别为5,7,2,3,6,8,9。 (1)请根据各字符的出现频率构建哈夫曼树 (2)计算哈夫曼树的带权路径长度WPL (3)请为每个字符设计哈夫曼编码
(1)根据各字符的出现频率构建哈夫曼树:
首先,我们需要将这7个字符按照出现频率从小到大进行排序,得到:{2, 3, 5, 6, 7, 8, 9}。然后,从最小的两个字符开始,合并它们的频率,直到只剩下一个字符。具体过程如下:
- 合并2和3,得到新的频率为5,对应的字符为{c}。
- 合并5和6,得到新的频率为11,对应的字符为{f}。
- 合并5和7,得到新的频率为12,对应的字符为{g}。
- 合并6和7,得到新的频率为13,对应的字符为{e}。
- 合并7和8,得到新的频率为15,对应的字符为{b}。
- 合并7和9,得到新的频率为16,对应的字符为{a}。
所以,哈夫曼树的根节点为{f},左子树为{g},右子树为{e},左子树的左子树为{c},右子树的左子树为{b},右子树的右子树为{a}。
(2)计算哈夫曼树的带权路径长度WPL:
WPL = L(f) + L(g) + L(e) + L(c) + L(b) + L(a)
其中,L(x)表示以x为根节点的子树的带权路径长度。
L(f) = 2 * 11 + 2 * 13 = 50
L(g) = 2 * 15 = 30
L(e) = 2 * 16 = 32
L(c) = 2 * 5 = 10
L(b) = 2 * 7 = 14
L(a) = 2 * 9 = 18
所以,WPL = 50 + 30 + 32 + 10 + 14 + 18 = 164。
(3)为每个字符设计哈夫曼编码:
- a: 10
- b: 110
- c: 1110
- d: 11110
- e: 111110
- f: 111111
- g: 11111110
一份电文中有6种字符:A,B,C,D,E,F,它们的出现频率依次为16,5,9,3,30,1计算其带权路径长度WPL
根据哈夫曼树算法,将出现频率作为权值构造哈夫曼树,为了使WPL最小,将出现频率较少的字符放在较深的分支上,出现频率较多的字符放在较浅的分支上。于是按照以下步骤计算WPL:
1. 将字符权值从小到大排序:A(16),B(5),C(9),D(3),E(30),F(1);
2. 取出频率最小的两个节点(F和D),组成一颗新树,根节点权值为两节点权值之和(4);
3. 将新树插入原有节点中合适的位置,得到如下情况:
A(16) E(30) 新树(4) C(9)
\ / / / \
B(5) C(9) E(30) A(16) D(3) B(5) E(30)
/ \ / /
A(16) B(5) F(1) F(1)
4. 重复步骤2和3,直到哈夫曼树构造完成,最后得到如下的哈夫曼树:
75
/ \
35 E(30)
/ \
16 新树(19)
/ \
C(9) 新树(10)
/ \
A(16) B(5)
新树(19) D(3) F(1)
/ \
A(16) B(5)
5. 计算WPL,遍历哈夫曼树每个叶子节点,将其深度乘以其权值,累加到WPL中。如下:
WPL = A深度 x A权值 + B深度 x B权值 + C深度 x C权值 + D深度 x D权值 + E深度 x E权值 + F深度 x F权值
= 3 x 16 + 4 x 5 + 3 x 9 + 4 x 3 + 2 x 30 + 5 x 1
= 221
因此,这份电文的带权路径长度WPL为221。
阅读全文