[英]For Ternary Huffman problem, can we make a tree (or encoding scheme) for "4" characters?
对于三元霍夫曼问题,我们可以为“ 4 ”个字符制作一棵树(或编码方案)吗?假设我有 4 个字符具有这些频率: freq(a)=5 freq(b)=3 freq(c)=2 freq (d)=2
我将如何以 0,1,2 的形式对它们进行编码,以便没有码字是另一个码字的前缀?
生成最优三元霍夫曼码的标准算法(如 rici 所暗示的)首先包括确保有奇数个符号——如有必要,通过添加一个虚拟符号(频率为 0)。
在这种情况下,我们从偶数个符号开始,因此我们需要添加我称为 Z 的虚拟符号: freq(a)=5 freq(b)=3 freq(c)=2 freq(d)=2频率(Z)=0。
然后如 Photon 所述,我们反复将频率最低的 3 个节点组合成 1 个组合符号。 每次我们用 1 个节点替换 3 个节点时,我们将节点总数减少 2,因此每一步的节点总数保持奇数。 在最后一步(如果我们添加了正确数量的虚拟符号),我们将把 3 个最终节点组合成一个根节点。
abcdZ:12
/ | \
2/ 1| 0\
cdZ:4 b:3 a:5
/ | \
2/ 1| 0\
Z:0 d:2 c:2
因此,在这种情况下,一种最佳(霍夫曼)三元编码是:
a: 0
b: 1
c: 20
d: 21
Z: 22 (should never occur).
有关更多详细信息,请参阅https://en.wikipedia.org/wiki/Huffman_coding#n-ary_Huffman_coding 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.