【发布时间】:2012-01-17 01:19:37
【问题描述】:
我正在编写一个 Huffman 字符串压缩器,我想确认我正在对我的树进行最佳压缩。
我正在使用这种树:
而不是这种树:
我认为超过 10 个单个字符,不可能压缩到 8 位..
第一张图片真的是最优的吗?
【问题讨论】:
我正在编写一个 Huffman 字符串压缩器,我想确认我正在对我的树进行最佳压缩。
我正在使用这种树:
而不是这种树:
我认为超过 10 个单个字符,不可能压缩到 8 位..
第一张图片真的是最优的吗?
【问题讨论】:
最基本的想法是添加两个最小的节点,创建一个新节点,其值为它的 2 个子节点的总和。
将此规则一直遵守到树的根部,保证生成的树将是最佳。
因此,您无法控制树的形状:这完全取决于字符的概率分布。如果概率分布看起来像斐波那契数列,那么它最终可能会变成一棵退化树(每层一个分支)。
因此,创建具有预设最大深度的 Huffman 树更加复杂,并且需要打破总是添加 2 个最小节点的通常规则。结果树显然不是最优的。
【讨论】: