目录一、赫夫曼树 1.1基本介绍1.2赫夫曼树创建步骤图解 1.3 代码实现二、赫夫曼编码2.1基本介绍2.1.1 通讯领域-定长编码-举例说明2.1.2 通讯领域-变长编码-举例说明2.2 通讯领域-赫夫曼编码-原理图示2.3赫夫曼编码-压缩 2.3.1 创建赫夫曼树实现思路 2.3.2 创建赫夫曼树2.3.3生成赫夫曼编码表2.3.4 赫夫曼编码字节数组2.4赫夫曼编码-数据解压2.4.1字节转二进制字符串2.4.2赫夫曼解码一、赫夫曼树 1.1基本介绍 最优二叉树:也称哈夫曼树或者霍夫曼树、赫夫曼树,给定n个权值作为n个叶子结点(每个叶子结点会有权值),构造一颗二叉树,若该树的带权
目录一、哈夫曼树定义与原理二、构建哈夫曼树三、哈夫曼编码完整代码:前言:章末含c语言实现完整代码一、哈夫曼树定义与原理 哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。 树的路径长度是从树根到每一结点的路径长度之和,记为:WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln) N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以证明
哈夫曼树的定义当用n个结点(都做叶子结点且都有各自的权值)试图构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优树”,有时也叫“赫夫曼树”或者“哈夫曼树”。结点的权(权重):给每一个结点赋予一个数值,被称为这个结点的权(权重)。结点的路径长度:从根节点到该节点路径上的连接数。树的路径长度:树中每个叶子节点的路径长度之和。结点带权路径长度:结点的路径长度与结点的权值的乘积。树的带权路径长度(WPL):所有叶子节点带权路径长度之和。如上图:a结点的权重是7;b结点的路径长度是2;c结点的带权路径长度是3*2=6;树的路径长度是6;树的带权路径长度是1*7+2*5+3*2+3*4=3
哈夫曼编码【问题描述】假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10.试为这8个字母设计赫夫曼编码.(要求构造的赫夫曼树中除叶子节点之外的所有节点的左孩子的节点值小于右孩子的节点值)【输入形式】输入n=8,输入8个字母;输入按序8个字母出现的频率【输出形式】输出编码后的哈夫曼树(先序或者完全二叉树序)【样例输入】8abcdefgh0.070.190.020.060.320.030.210.10【样例输出】Thea'sHuffmancodeis:1010Theb'sHuffmancodeis:00Th