我试图通过 Huffman 算法手动解决两种不同的压缩场景,在每一个场景中,我们从一个包含元组(symbol, frequency)
作为其项目的有序队列开始,我们将尝试形成一个字典:
step 0:
[c:3] [b:4] [a:5]
step 1:
[a:5] [7]
[c:3] [b:4]
step 2:
[12]
[a:5] [7]
[c:3] [b:4]
如果我们认为左边是 0,右边是 1,那么我们有一个字典:
a -> 0
b -> 11
c -> 10
直到现在,一切看起来都是正确的。但是让我们假设我们的初始队列如下所示:
step 0:
[c:1] [b:2] [a:4]
step 1:
[3] [a:4]
[c:1] [b:2]
step 2:
[7]
[3] [a:4]
[c:1] [b:2]
产生以下字典:
a -> 1
b -> 01
c -> 00
这似乎不对(两者a
都b
相等)。
我究竟做错了什么?我可以if
在树的根部查看其中一个分支实际上是叶子,选择该方向作为 1 的方向,但这对我来说似乎并不干净。我想我一定是错过了什么?