哈夫曼树
哈夫曼树是给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
例子:
1、将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
2、 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
3、从森林中删除选取的两棵树,并将新树加入森林;
4、重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
扩展资料:
按照哈夫曼编码构思程序流程:
1、切割的顺序是从上往下,直至数组中的元素全部出现在叶节点;
2、我们思路正好相反,从数组中找出最小的两个元素作为最下面的叶节点,在向备选数组中存入这两个叶节点的和(这个新的和加入累加运算,这个和也就是所求的最小值的一部分,原因如上图)。
3、以本题为例,备选数组中现有元素为{30,30},再次取出两个最小元素进行求和,得到新的元素,回归备选数组并记入累加。
4、上述2.3布重复执行直至备选数组中只有一个元素,此时累加结束,返回累加值即可
5、求数组中的最小值,可以用小根堆进行提取最为方便;此题用到了贪心的思路,即用相同的策略重复执行,直至我们得到所需的结果。
参考资料来源:百度百科——哈夫曼树
最短路径和最小生成树是不同的概念.
最短路径是对于一个图的两个结点而言的.在一个图中,结点A通过某些结点和边可以走到结点B,那这些结点和边就组成一条A到B的路径,A到B的最短路径就是A到B的所有路径中边权值总和最小的那一条(或多条).
最小生成树是对于一个图本身而言的.对于一个有n个结点的无向连通图(边没有方向,任意两点之间都存在路径可以到达),必然可以去掉某些边,使得最终剩下n-1条边,并且n个结点仍然是连通的,这n个结点和n-1条边组成了原图的一个生成树,而最小生成树就是所有可能的生成树中n-1条边的权值总和最小的那一个(或多个).
最短路径常用算法有:floyd,dijkstra,SPFA,A*等
最小生成树常用算法有:prim,kruskal
仔细观察发现,A 字符出现的次数2远远小于D 10,我们试想,出现次数少的编码短一些,出现次数多的编码长一些,是不是总编码会少一些呢?看如下
20
/ \
10 D10
/ \
5 C5
/ \
A2 B3
编码的默认方式,左子树0 右子树为1,如D,是右子树, C 先左再右, A左左左 B左左右
编码为 A 000 B001 C01 D1
总编码长度是 A出现的次数*A的编码长度 + B出现的次数*B的编码长度 + C出现的次数*C的编码长度+ D出现的次数*D的编码长度 = 2*3 +3*3 + 5*2 + 10 *1 = 35
编码长度短一些,这样就起到了压缩的目的。
什么叫哈夫曼树?
因为哈夫曼树的定义是构造一棵最短的带权路径树,所以这种树为最优二叉树。最优二叉树的度只有0或者2。给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点...
哈夫曼树的定义是什么?
哈夫曼树是给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。例子:1、将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);2、...
什么是哈夫曼树?
哈夫曼树的定义是构造一棵最短的带权路径树,所以这种树为最优二叉树。最优二叉树的度只有0或者2。给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
数据结构——哈夫曼树(Huffman Tree)
构造哈夫曼树的步骤是:首先将每个权值看作单独的树,然后不断选择权值最小的两棵树进行合并,直到只剩下一棵树,即为哈夫曼树。例如,对于权值2、3、4、6,通过迭代合并生成最终的哈夫曼树。哈夫曼树的应用主要体现在哈夫曼编码中,这是一种压缩编码方式,根据字符出现的频率赋予不同的编码长度,从...
什么是哈夫曼树?
由五个带权值为9,2,3,5,14的叶子结点构成哈夫曼树,带权路径长度为67。给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
最简哈夫曼树简介
哈夫曼树,是由德国数学家冯·哈夫曼在其研究中提出的一种重要树形结构,也被称为最简哈夫曼树。它的独特之处在于,它的构建方式使得从树根到每个叶子节点的路径长度之和达到最小,这是通过精心设计每个节点的权值和路径长度来实现的。在编程中,哈夫曼树的应用尤为显著,特别是在需要高效编码和数据压缩...
什么是哈夫曼树,它有哪些特点?
哈夫曼树是一种非常有用的数据结构,它在编码理论和数据压缩领域有着广泛的应用。哈夫曼树的特点在于它能够以非常高效的方式编码数据,特别是对于那些权重较大的数据。首先,哈夫曼树是一种二叉树,这意味着每个节点最多只有两个子节点。这种结构使得它在计算机科学中非常实用,因为计算机可以方便地存储和...
哈夫曼树(Huffman Tree)的基本概念介绍
哈夫曼树(Huffman Tree)作为数据结构的精华,广泛应用于通信、压缩算法和信息存储。由David A. Huffman于1952年提出,它旨在通过构建最优的前缀编码,实现数据压缩与编码,有效减少所需比特数。哈夫曼树的核心特性包括最优性与前缀编码。最优性意味着树的带权路径长度最小,带权路径长度是每个叶子节点的...
哈夫曼树是什么意思?
哈夫曼树(Huffman Tree)是一种用于数据压缩的最优二叉树。它被称为最优二叉树是因为它可以实现最优的数据压缩效果。在数据压缩中,我们希望使用尽可能少的比特数来表示数据,以减少存储空间或传输带宽的使用。哈夫曼树通过将出现频率较高的字符或符号分配较短的编码,而将出现频率较低的字符或符号分配...
什么是哈夫曼树?
哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*...
勤纯便通: 夫曼树是带权路径长度最小的二叉树,用途是平均查找信息的代价最小. 普通二叉树的用途也普通,比较通用,就是信息存储和查找. 普通二叉树可能有的只有一个子节点,而哈夫曼树一定有两个.
香河县18092014836: 到底什么是哈夫曼树啊,求例子 - ?
勤纯便通: 哈夫曼树是给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近. 例子: 1、将w...
香河县18092014836: 哈夫曼树是什么?求解 - ?
勤纯便通: 哈夫曼编码是哈夫曼树的一个应用.哈夫曼编码应用广泛,如JPEG中就应用了哈夫曼编码.首先介绍什么是哈夫曼树.哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树.所谓树的带权路径长度,就是树中所有的叶结点的权值乘上...
香河县18092014836: 用简单的语言概括什么是哈夫曼树哈夫曼树 - ?
勤纯便通:[答案] 哈夫曼树也称最优二叉树.哈夫曼树是完全二叉树,只有度为0和度为2的结点.给定n个值,可以构造出多棵具有n个叶节点且权值分别为这n个给定值的二叉树,其中加权通路长最小的那棵就是哈夫曼树.也就是说权值大的更靠近根节点.
香河县18092014836: 哈夫曼树的定义是:带权路径长度最小的二叉树.我先请问:为何它是带全路径长度最小的二叉树?最小是哈夫曼树的定义是:带权路径长度最小的二叉树.我... - ?
勤纯便通:[答案] 只有带权路径长度最小的二叉树,才是哈夫曼树.当然是可以证明带权路径长度最小
香河县18092014836: 哈夫曼树有什么作用 - ?
勤纯便通:[答案] 简单说为了进行哈夫曼编码,这样就可以起到压缩作用.详细说:(百度百科:哈夫曼树)看了一下里面的应用,讲的很好,直接拷贝了,如果有很么不满意的可以继续问,能答就答,不能的话再问问其他人.在数据通信中,需要将传送...
香河县18092014836: 哈夫曼树一定是完全二叉树么 - ?
勤纯便通:[答案] 可以不是的.哈夫曼树只是按照最优编码后生成的.而完全二叉树则要求有右子树时必有左子树.你可以去查阅相关书籍的.
香河县18092014836: 哈夫曼树的带权路径长度是什么? - ?
勤纯便通:[答案] 1.树的路径长度树的路径长度是从树根到树中每一结点的路径长度之和.在结点数目相同的二叉树中,完全二叉树的路径长... wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长度. 树的带权路径长度亦称为树的代价. 3.最优二叉树或哈夫曼树在...
香河县18092014836: 哈夫曼树问题 - ?
勤纯便通:[答案] 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree).