HuffMan编码树最优性证明分析及贪心算法安全性证明思路分析
本文主要是对算法导论16.3节 赫尔夫曼编码相关证明的分析梳理;
另外,本文总结分析了贪心算法安全性证明的思路;
编写日期,2019/1/19,20日掌握算法导论day10
- 【证明之HuffMan算法构造的树是最优的证明】
- 遮住底部所有叶结点和内部结点,只剩下树X1(高度为1的两个根的儿子和根)。利用引理16.2证明X1是最优的,然后利用引理16.3将树X1的左二子展开得到树X2,可知树X2是最优的,继续展开树X1的右儿子。。然后继续展开。。一直展开下去。。最终证明HuffMan的树是最优的。
- [分析之HuffMan算法为什么是贪心选择】
- 我们可以从如下两个角度去证明他是贪心的
- 设定目标之求解最小内部联合频率的角度去做选择(提示习题16.3-4)
- 直接从16.4式角度出发,我们希望最小的值高度最小,因此贪心地将最小的值放在最底部,最大的值放在最高部。。
- 我们可以从如下两个角度去证明他是贪心的
- 【定理16.2~16.4之间的关系】
- 【引理16.2】证明贪心选择是安全的,而引理【16.3】证明了最优子结构从而使得我们贪心的选择可以将子问题缩小且子问题只有一个,并搭建尾递归算法。
- 【结构与性能关联分析】
- HuffMan编码的高效性决定于组成文件字符出现频率的方差,不精确的说,方差越大,构建的编码树越不均匀,HuffMan编码越高效。
-
【贪心选择安全性证明思路】(我可能会单独写一篇博文来讲解证明思路)
- 意淫出一个已经存在的最优解X
- 将最优解替换为另外一个解Y(根据问题的情景,X允许替换为Y),这个解符合贪心选择的要求。我们的核心目标是证明Y也具有最优性。
- 通过X的最优性质,然后利用一定的技巧,证明解Y也具有最优性,目的完成。
- 贪心选择安全性的证明是贪心算法问题最重要的问题
- 【待探究】最优子结构性质是否是贪心算法的必要条件?or充分条件? 为什么
下文是算法导论16.3节 相关证明的原文