据构造讲义[第6章树-赫夫曼树及其应用].pptVIP

  • 1
  • 0
  • 约3.38千字
  • 约 21页
  • 2019-01-12 发布于江苏
  • 举报

据构造讲义[第6章树-赫夫曼树及其应用].ppt

据构造讲义[第6章树-赫夫曼树及其应用]

6.1、哈夫曼树 6.1.1.带权二叉树 6.1.2.给定确定权值的带权二叉树 6.1.3.哈夫曼树的建立 6.1.4.哈夫曼树构造算法分析 6.1.5.哈夫曼树构造算法描述 6.1.1、带权二叉树 二叉树的带权路径长度 二叉树的带权路径长度示例 6.1.2.给定确定权值的带权二叉树 在给定一组具有确定权值的叶结点,可以构造出不同的带权二叉树。例如,给出4个叶结点,设其权值分别为1,3,5,7,我们可以构造出形状不同的多个二叉树。这些形状不同的二叉树的带权路径长度将各不相同。 图给出了其中5个不同形状的二叉树。 给定确定权值的带权二叉树示例 这五棵树的带权路径长度分别为: (a)WPL=1×2+3×2+5×2+7×2=32 (b)WPL=1×3+3×3+5×2+7×1=29 (c)WPL=1×2+3×3+5×3+7×1=33 (d)WPL=7×3+5×3+3×2+1×1=43 (e)WPL=7×1+5×2+3×3+1×3=29 6.1.3.哈夫曼树的建立 哈夫曼(Haffman)算法: 哈夫曼算法示例 6.1.4.哈夫曼树构造算法分析 6.1.4.哈夫曼树构造算法分析 6.1.5.哈夫曼树构造算法描述 6.2、哈夫曼编码 6.2.1.哈夫曼编码 6.2.2.哈夫曼编码算法 6.2.3.哈夫曼编码算法描述   编码方案 6.2.1.哈夫曼编码 6.2.1.哈夫曼编码 6.2.1.哈夫曼编码 6.2.1.哈夫曼编码 6.2.2.哈夫曼编码算法 实现哈夫曼编码的算法可分为两大部分: (1)构造哈夫曼树; (2)在哈夫曼树上求叶结点的编码。 求哈夫曼编码,实质上就是在已建立的哈夫曼树中,从叶结点开始,沿结点的双亲链域回退到根结点,每回退一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼码值,由于一个字符的哈夫曼编码是从根结点到相应叶结点所经过的路径上各分支所组成的0,1序列,因此先得到的分支代码为所求编码的低位码,后得到的分支代码为所求编码的高位码。 6.2.3.哈夫曼编码算法描述 /*定义哈夫曼编码的最大长度*/ #define MAXBIT 10 typedef struct { int bit[MAXBIT]; int start; } HCodeType;   * 第七章 图 7.0 前言 7.1 图的定义和术语 7.2 图的存储表示 7.3 图的遍历 7.4 图的连通性 7.5 有向无环图及其应用 7.6 最短路径 最优二叉树,也称哈夫曼(Haffman)树,是指对于一组带有确定权值的叶结点,构造的具有最小带权路径长度的二叉树。 在前面我们介绍过路径和结点的路径长度的概念,而二叉树的路径长度则是指由根结点到所有叶结点的路径长度之和。 如果二叉树中的叶结点都具有一定的权值,则可将这一概念加以推广。设二叉树具有n个带权值的叶结点,那么从根结点到各个叶结点的路径长度与相应结点权值的乘积之和叫做二叉树的带权路径长度,记为: 其中Wk为第k个叶结点的权值,Lk 为第k个叶结点的路径长度。 如右图所示的二叉树,它的带权路径长度值:WPL=2×2+4×2+5×2+3×2=28。 由此可见,由相同权值的一组叶子结点所构成的二叉树有不同的形态和不同的带权路径长度,那么如何找到带权路径长度最小的二叉树(即哈夫曼树)呢? 根据哈夫曼树的定义,一棵二叉树要使其WPL值最小,必须使权值越大的叶结点越靠近根结点,而权值越小的叶结点越远离根结点。 (1)由给定的n个权值{W1,W2,…,Wn}构造n棵只有一个叶结点的二叉树,从而得到一个二叉树的集合F={T1,T2,…,Tn}; (2)在F中选取根结点的权值最小和次小的两棵二叉树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和; (3)在集合F中删除作为左、右子树的两棵二叉树,并将新建立的二叉树加入到集合F中; (4)重复(2)(3)两步,当F中只剩下一棵二叉树时,这棵二叉树便是所要建立的哈夫曼树。 在构造哈夫曼树时,可以设置一个结构数组HuffNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,数组元素的结构形式如下: weight域保存结点的权值,lchild和rchild域分别保存该结点的左、右孩子结点在数组HuffNode中的序号,从而建立起结点之间的关系。 为了判定一个结点是否已加入到要建立的哈夫曼树中,可通过parent域的值来确定。初始时parent的值为-1,当结点加入到树中时,该结点parent的值为其双亲结

文档评论(0)

1亿VIP精品文档

相关文档