可压缩性示例

9

来自我的算法教材:

每年一次的县级赛马比赛将有三匹从未相互竞争的纯种马参加。你兴奋地研究了它们过去200场比赛,并将其总结为四个结果的概率分布:第一名(“第一名”),第二名,第三名和其他。

                       Outcome     Aurora   Whirlwind    Phantasm
                        first        0.15      0.30          0.20

                        second       0.10      0.05          0.30

                        third        0.70      0.25          0.30

                        other        0.05      0.40          0.20

哪匹马最可预测?一个量化的方法是看它们的可压缩性。将每匹马的历史记录写成一个由200个值(first, second, third, other)组成的字符串。然后可以使用赫夫曼算法计算编码这些记录字符串所需的总位数。结果为:Aurora需要290位,Whirlwind需要380位,Phantasm需要420位(请自行核实)。因为Aurora的编码最短,所以从某种意义上说它是最可预测的。
他们如何得出Phantasm需要420位?我一直得到400字节,如下:
合并first、other=0.4,合并second、third=0.6。每个位置最终需要2位来编码。
我是否误解了赫夫曼编码算法?
教材在此处可用:http://www.cs.berkeley.edu/~vazirani/algorithms.html(第156页)。

“哪匹马最可预测?” - 实际上这并没有回答这个问题,因为排名取决于比赛中的其他马匹。奥罗拉可能每次都以完全相同的时间跑完赛道 - 精确到毫秒!- 但由于比赛中的其他马匹,仍然会得到那里显示的结果。 - Nick Johnson
1个回答

5
我认为你是正确的:Phantasm的200个结果可以用400位(而不是字节)表示。Aurora的290和Whirlwind的380是正确的。
正确的哈夫曼编码生成如下:
1. 合并两个最不可能的结果:0.2和0.2。得到0.4。 2. 合并下两个最不可能的结果:0.3和0.3。得到0.6。 3. 合并0.4和0.6。得到1.0。
如果你这样做,会得到420位:
1. 合并两个最不可能的结果:0.2和0.2。得到0.4。 2. 合并0.4和0.3。(错误!)得到0.7。 3. 合并0.7和0.3。得到1.0。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接