哈夫曼树的证明

简述:在学习慕课《数据结构》时,关于哈夫曼树仅给出了算法描述,并没有给出哈夫曼树就是最优树的证明,查阅教材也没发现相关信息,通过上网浏览博客解决了该问题。

参考博客:1)https://blog.csdn.net/xiyanxiyan10/article/details/17580599

        2)https://blog.csdn.net/BigLeo/article/details/41243779

        3)http://blog.sina.com.cn/s/blog_cf5c8eae0102uz75.html

  

  首先需要明确代价函数,即cost function:cost of tree = Σ freq(i) * depth(i)。该式表明代价函数等于每一个叶节点的权重与该节点深度的乘积和。在 algorithm 中,作者给出了另一种描述:即除根节点外所有节点的权重之和。原文为:There is another way to write this cost function that is very helpful. Although we are only given frequencies for the leaves, we can define the frequency of any internal node to be the sum of the frequencies of its descendant leaves; this is, after all, the number of times the internal node is visited during encoding or decoding…

  不失一般性,设叶节点(V1,V2,V3...Vn)的权重分别为(W1,W2,W3...Wn),有(W1<W2<W3<...<Wn)。由哈夫曼树的构造易得V1和V2对应的结点是兄弟结点,且这两结点在二叉树中的深度不小于其它任何一个叶结点的深度(参见博客2))。

  数学归纳法证明见博客2):n = 2 时成立, 假设 n = k时成立{W1+W2,W3,...Wk+1}。n = k + 1时 cost(T) = cost(T‘) + W1+W2。最优成立。

  调整法见博客3),顺推理解哈夫曼树的构造过程:整体上最优必定把V1,V2放在二叉树的底部且为兄弟节点(有待商榷,具体讨论见博客1)),由cost(T) = cost(T‘) + W1+W2,整体最优的条件下,去掉权重最小的两个节点将其合并为一个节点的二叉树也要最小,即也需要满组最小的在整棵树的最底层。以此类推可理解哈夫曼树的构造过程。

  综上,关键在于对于cost(T) = cost(T‘) + W1+W2式子的理解与类推的思想。

  补充:1)哈夫曼树不唯一

     2)哈夫曼树是最优树之一不是全部

原文地址:https://www.cnblogs.com/jinjin-2018/p/8729423.html

时间: 2024-10-01 15:40:46

哈夫曼树的证明的相关文章

哈夫曼树与哈夫曼编码

哈夫曼树与哈夫曼编码 术语: i)路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径. 路径中分支的数目称为路径长度.若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1. ii)结点的权及带权路径长度 若对树中的每个结点赋给一个有着某种含义的数值,则这个数值称为该结点的权. 结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积. iii)树的带权路径长度 树的带权路径长度:所有叶子结点的带权路径长度之和,记为WPL. 先了解一下

poj 3253 哈夫曼树

背景 :开始自己想了一个贪心思路,结果是错的.其实这个题是哈夫曼树的思想,贪心只是哈夫曼树的证明和构造思想. 哈夫曼树:一种带权最短二叉树(也就是所有叶子节点的权重乘以深度的和最小),在实际中是用来做最高效信息编码的.信息的频率就是权重,一个频率很低的数,它的编码就应该长,树的深度就应该大.实际信息编码会根据信息字符的频率来构建一个哈夫曼树,已达到最高效. 本题和哈夫曼树是一个很好的契合,解决本题的贪心思想也是构建哈夫曼树的方法,以最小的两个元素为最后砍开的段,然后把这两个元素加起来,就可以构成

数据结构第三部分:树与树的表示、二叉树及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树、集合及其运算

参考:浙大数据结构(陈越.何钦铭)课件 1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R 中找出关键字与K 相同的记录).一个自然的问题就是,如何实现有效率的查找? 静态查找:集合中记录是固定的,没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除 静态查找——方法一:顺序查找(时间复杂度O(n)) int

赫夫曼树编码

在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN) 树和哈夫曼编码.哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如 JPEG中就应用了哈夫曼编码. 首先介绍什么是哈夫曼树.哈夫曼树又称最优二叉树, 是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点 的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度 为叶结点的层数).树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+...+Wn*Ln) ,

数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉搜索树.红黑树.线索二叉树,它们在解决实际问题中有着非常重要的应用.本文主要从概念和一些基本操作上进行分类和总结. 一.概念总揽 (1) 堆 堆(heap order)是一种特殊的表,如果将它看做是一颗完全二叉树的层次序列,那么它具有如下的性质:每个节点的值都不大于其孩子的值,或每个节点的值都不小于其孩子的值

哈夫曼树及编码

介绍哈夫曼编码之前先介绍一下哈弗曼树: 哈夫曼树:哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度 为叶结点的层数).树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+...+Wn*Ln) ,N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n).可以证明哈夫曼树的WPL是最小的. 哈夫曼树的构

哈夫曼树与编码译码实现

一.哈弗曼树的基本概念. 哈夫曼树,又称最优树,是一类带权路径长度最短的树.下面有几个概念: (1)路径. 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径. (2)路径长度. 路径上的分枝数目. (3)树的路径长度. 从树根到每一个结点的路径长度之和. (4)结点的带权路径长度. 从该结点到树根之间的路径长度与结点上权的乘积. (5)树的带权路径长度. 树中所有叶子节点的带权路径长度之和.通常记作: 带权路径长度WPL最小的二叉树叫做最优二叉树或哈夫曼树. 二.构造哈夫曼树. 采用哈

哈夫曼树和哈夫曼编码

在一般的数据结构的书中,树的那章后面,著者一般都会介绍一下哈夫曼(HUFFMAN)树和哈夫曼编码.哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码. 首先介绍什么是哈夫曼树. 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的 路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数).树的带权路径长度记为WPL= (W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值W

【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R 中找出关键字与K 相同的记录).一个自然的问题就是,如何实现有效率的查找? 静态查找:集合中记录是固定的,没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除 静态查找--方法一:顺序查找(时间复杂度O(n)) int SequentialSearch(St