Huffman树
2014-10-29 15:41:16 10 举报
哈夫曼树(Huffman Tree)是一种用于数据压缩编码的最优二叉树,由David A. Huffman于1952年提出。它是一种带权路径长度最短的二叉树,即树中任一叶子节点到根节点的路径长度与该叶子节点权值的乘积之和最小。哈夫曼树的构建过程通常采用贪心算法,首先将每个字符的频率作为权值,然后每次选择两个权值最小的节点合并为一个新的节点,直到所有字符合并为一个节点。哈夫曼树广泛应用于数据压缩、通信编码等领域。
作者其他创作
大纲/内容
是否从1到2*sampleNo-1遍历完全
是
否
f是否已经指向根部
HUFFMAN树的构建及对字符的编码
从1到sampleNo个结点是否遍历完全
c指向f所指结点f指向f的parent结点
根据输入的样本数将sampleNo个结点根据输入数据赋初值
huffman编码倒序加上0
对其后sampleNo-1个二叉结点赋初值
将这两棵最小的根结点合并为一棵树
eString是否遍历完全
c指向huffman树根部
根据输入的字符或编码输出相对应的编码或字符
当前结点字符是否等于当前eString字符
c指向当前树结点的左子叶
从HT[1]到HT[i]找出最小的赋值给a从HT[1]到HT[i]找出次小的赋值给b
开始
输出当前结点的huffman编码
输入sampleNo输入待编码字符c[]输入对应权值weight[]
输出当前指向叶子的字符
输入huffman编码dString
输出每个字符对应的huffman码输入待编码字符串eString
当前结点的lchild和rchild都不存在
dString遍历完全
huffman编码倒序加上1
当前huffman码是否为0
c是否是f的lchild
c指向当前结点f指向当前结点的parent结点
正常结束
错误结束
c指向当前树结点的右子叶
0 条评论
下一页