Huffman tree(赫夫曼树、霍夫曼树、哈夫曼树、最优二叉树)

flyfish 2015-8-1

Huffman tree因为翻译不同所以有其他的名字 赫夫曼树、霍夫曼树、哈夫曼树

定义引用自严蔚敏《数据结构》

路径

从树中一个结点到另一个结点之间的分支构成两个结点之间的路径.

路径长度

路径上的分支数目称作路径长度。

树的路径长度

树的路径长度就是从根节点到每一结点的路径长度之和。

结点的带权路径长度

结点的带权路径长度就是从该结点到根节点之间的路径长度与结点上权的乘积。

树的带权路径长度

树的带权路径长度就是树中所有叶子结点的带权路径长度之和,通常记做WPL。

Huffman tree

假设有n个权值{w1,w2,…wn},构造一棵有n个叶子结点的二叉树,每个叶子结点带权wi,则其中带权路径长度WPL最小的二叉树称作Huffman tree 。

假设有一个字符串每个字符出现的次数如下

A:5

B:15

C:40

D:30

E:10

将字符按照出现次数从小到大排序形成一个有序序列

自底向上建树过程

第一步

第二步

第三步

第四步

构造完成

概念补充

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 03:27:40

Huffman tree(赫夫曼树、霍夫曼树、哈夫曼树、最优二叉树)的相关文章

树-哈夫曼树(Huffman Tree)

概述 哈夫曼树:树的带权路径长度达到最小. 构造规则 1. 将w1.w2.-,wn看成是有n 棵树的森林(每棵树仅有一个结点): 2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左.右子树,且新树的根结点权值为其左.右子树根结点权值之和: 3. 从森林中删除选取的两棵树,并将新树加入森林: 4. 重复(02).(03)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树. 基本操作 定义 1 权值 2 左孩子 3 右孩子 4 父节点 构造哈夫曼树(使用最小堆) 1 构造最小堆

温故而知新, 哈夫曼树(Huffman tree)

哈夫曼树定义:在一棵二叉树中,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称哈夫曼树. 如何构建哈夫曼树: 一般可以按如下步骤构建: 假设有n个权值W1,W2,...,Wn,将这些权值看成是有n棵树的森林(每棵树仅有一个节点), 则哈夫曼树的构造规则为: 1,在森林中选出2个根节点的权值最小的树合并为一棵新树,作为左右子树,且新树的根节点权值为其左右子树根节点权值之和. 2,从森林中删除这两棵树,同时把新树加入到森林中. 3,重复1,2步骤,直到森林中只有一棵树为止,此树就是哈夫曼树.

最优二叉树(霍夫曼树)分析

 1.树的路径长度     树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 2.树的带权路径长度(Weighted Path Length of Tree,简记为WPL) 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数. 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积. 树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和,通常记为: 其中: n

构造最优二叉树-赫夫曼(Huffman)树算法

一.基本概念 1.赫夫曼(Huffman)树又称最优二叉树或最优搜索树,是一种带权路径长度最短的二叉树.在许多应用中,常常赋给树中结点一个有某种意义的实数,称此实数为该结点的权.从树根结点到该结点之间的路径长度与该结点上权的乘积称为结点的带权路径长度(WPL),树中所有叶子结点的带权路径长度之和称为该树的带权路径长度,通常记为: 2.两结点间的路径:从一结点到另一结点所经过的结点序列;路径长度:从根结点到相应结点路径上的分支数目;树的路径长度:从根到每一结点的路径长度之和. 3.深度为k,结点数

javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径. ② 路径长度:结点路径上的分支数目称为路径长度. ③ 树的路径长度:从树根到每一个结点的路径长度之和. 以下图为例: A到F :结点路径 AEF : 路径长度(即边的数目) 2 : 树的路径长度:3*1+5*2+2*3=19: ④ 结点的带权路径长度:从该结点的到树的根结

哈夫曼树(最优二叉树)及哈夫曼算法

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

[数据结构] AVL树和AVL旋转、哈夫曼树和哈夫曼编码

1. AVL树 AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增加和删除可能需要通过一次或多次树旋转来重新平衡这个树. 节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反).带有平衡因子1.0或 -1的节点被认为是平衡的.带有平衡因子 -2或2的节点被认为是不平衡的,并需要重新平衡这个树.平衡因子可以直接存储在每个节点中,或从可能存储在节点中的子树高度计算出来. 1.2AVL旋转 AVL树的基本操作一

哈夫曼树(最优二叉树)的创建

哈夫曼树是带权路径最小的一种特殊二叉树,所以也称最优二叉树. 在这里不讨论基本概念如怎样计算路径等,而仅仅着重于树的创建,详细过程让我们举例而言. 其主要的原理为:将全部节点一開始都视为森林.每次从森林中选取两个根节点权值最小的树合并为一棵新树,新树的根节点大小为两个子节点大小的和,并将这棵新树又一次增加到森林中. 如此一来每一轮操作都能够简化为两个基本操作:合并两棵树.插入新树,直到森林中仅仅剩下一棵树,即是哈夫曼树. 以7个节点的权值分别为 1 3 7 9 12 18 25而言 创建的第一步

哈夫曼树(最优二叉树)及其Java实现

一.定义 一些定义: 节点之间的路径长度:在树中从一个结点到另一个结点所经历的分支,构成了这两个结点间的路径上的经过的分支数称为它的路径长度 树的路径长度:从树的根节点到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长度最短. 结点的权:在一些应用中,赋予树中结点的一个有某种意义的实数. 结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积. 树的带权路径长度(Weighted Path Length of Tree:WPL):定义为树中所有叶子结点的带权路径长