如何区分最优前缀码和哈夫曼码?

问题描述 投票:0回答:1

问题 在学习编码理论时,我遇到了一组代码表,我需要确定它们是否属于以下类别之一:

  • A:前缀代码
  • B:霍夫曼编码
  • C:最优前缀码
  • D:以上都不是

我了解了前缀码和哈夫曼码的基本性质:

这是我面临的具体问题: 我有以下代码表(CODE4):

符号 频率 代码4
A 3 100
B 4 101
C 8 01
D 5 110
E 6 111
F 10 00

我的问题

为什么 CODE4 被归类为最佳前缀代码,但不是霍夫曼代码 代码

有没有一种系统的方法来判断一个代码是否是 最优前缀码但不是霍夫曼码?

encoding compression huffman-code number-theory
1个回答
0
投票

尝试在频率上运行霍夫曼算法 - 您会看到,这些代码无法由霍夫曼算法生成。霍夫曼总是合并频率最小的节点,但要获得这些精确的代码,您必须合并不是最小的节点。

要获取这些代码,必须执行以下步骤:

  1. A 与 B 合并(两者的前缀都是 10),总频率为 7
  2. D 与 E 合并(两者的前缀都是 11),总频率为 11
  3. AB 与 DE 合并(两者都有前缀 1)。 但这对于霍夫曼来说是不可能的,因为我们正在合并频率 7 和 11,而 C(频率 8 )仍然存在!

但请注意,该代码仍然为每个符号提供与霍夫曼相同的位数。因为我们知道哈夫曼总是最优的前缀码——这个码也是最优的。

© www.soinside.com 2019 - 2024. All rights reserved.