霍夫曼编码基于贪婪方法或动态编程

时间:2013-05-12 19:08:47

标签: algorithm huffman-code

我们可以通过动态编程来解决霍夫曼编码问题,有没有算法

3 个答案:

答案 0 :(得分:3)

根据我对算法的了解,我相信霍夫曼编码是基于贪婪的方法。 正如我们在Activity选择问题中那样做。任务调度和背包问题是它的另一个例子。

答案 1 :(得分:3)

霍夫曼编码通过创建节点的二叉树来工作。这些可以存储在常规数组中,其大小取决于符号数n。可以使用O(n logn)方法在Greedy Algorithm时间内实施霍夫曼编码。霍夫曼编码不适用于动态编程解决方案,因为该问题不包含重叠的子问题。

答案 2 :(得分:1)

[更新]:我认为我在下面提到的解决方案会生成最佳前缀代码,但不一定与霍夫曼代码相同。根据定义,霍夫曼代码是通过贪婪的方法生成的。虽然它是最佳的,但它不是唯一的解决方案。 (例如,一旦生成了霍夫曼树,你就可以在同一级别交换叶子,为它们提供不同的代码,同时仍然是最佳的)

我认为这可以通过动态编程来解决,尽管它不会那么有效。这里的方法非常类似于找到最佳二进制搜索树,因为当你向下一级时,你又向叶子添加一个位。

enter image description here

Here是代码计算最小总位数的链接。当然这是指数级的,但如果你使用DP,它可以在O(n ^ 2)时间内解决。我还没有尝试过生成编码,但我相信应该是可能的。