哈夫曼树构造过程的证明

设我们已经构造出来了最优树Tn,他的叶子节点分别是w1w2...wn

假设Tn的最长的一条路的倒数第二个节点(即这条路叶子节点的父亲)x只有一个儿子,那么我们删掉这个节点x,让他的儿子代替他,答案会变得更优,矛盾,所以x一定有两个儿子。我们假设这两个儿子不全为w1w2,即有一个儿子wywyw2,那我们将wy与不在这里的w1w2交换,答案不会变得更差,即一定可以构造出来一个最优树Tn,使得x的两个儿子为w1w2

我们在考虑收缩与展开。

假设Tnw1w2合并成了一个节点(具体来说,令w1w2的父亲节点的权值为w1+w2,然后删掉w1w2),这颗新树为Tn1,那么V(Tn1)=V(Tn)w1w2

同时,考虑点集{w3,w4...wn,w1+w2}的最优树为Tn1,找到这个最优树权值为w1+w2的叶子节点,并将其展开(就是上面合并过程的逆过程),设得到的新树为Tn,则有V(Tn)=V(Tn1)+w1+w2

那么我们把得到的两个式子相加,有V(Tn1)V(Tn1)+V(Tn)V(Tn)=0,由于Tn1Tn都是最优的,那么必须有V(Tn1)=V(Tn1)V(Tn)=V(Tn),即合并和展开后仍然是最优树

接下来考虑求Tn,我们要求Tn,如果能够将最小权值的两个节点合并并求出Tn1,那么就可以知道Tn,然后一直递归下去,最后合并只剩一个节点即可

posted @   最爱丁珰  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示