哈夫曼编码构建哈夫曼树
问题描述
现有一字符串"hello world",使用哈夫曼编码最少使用多少bit内存
统计字符出现的次数
h:1,e:1,l:3,o:2,w:1,r:1,d:1,空格:1
计算公式:叶子节点路径 * 权重 相加
构建树的要求
- 左节点的值小于等于右节点
- 节点一直寻找最接近自己节点值的节点
概念普及
以下概念来自chatGPT
哈夫曼编码(Huffman Coding)是一种可变长度编码的方法,通常用于数据压缩。它是由David A. Huffman在1952年发明的,并被广泛应用于数据压缩和通信领域。
哈夫曼编码通过将最频繁出现的字符用最短的二进制位编码,从而实现对文本数据的高效压缩。在哈夫曼编码中,出现频率较高的字符被赋予较短的编码,而出现频率较低的字符则被赋予较长的编码。这种编码方式可以有效地减少数据的存储空间。
哈夫曼编码的具体实现过程如下:
统计待处理数据中各字符出现的频率,将它们作为根节点创建出一棵哈夫曼树(最小堆)。树的叶子节点表示待编码字符及其出现的概率;
选择树的叶子节点中概率最小的两个节点,将它们作为左、右子节点创建出一棵新树,并将其根节点的权重设置为它们的概率之和;
重复执行第2步,直到只剩下一个节点为止。此时,哈夫曼树建立完成;
根据哈夫曼树,对待编码字符进行编码。在哈夫曼树中,从根节点开始,往左走的路径记0,往右走的路径记1,直到到达叶子节点为止,便得到了该字符的哈夫曼编码。
哈夫曼编码的编码长度取决于每个字符在文本中出现的频率,因此对于压缩频繁出现字符的文本,哈夫曼编码可以实现较高的压缩比。
本文作者:常威不打来福
本文链接:https://www.cnblogs.com/dylstudy/p/17381242.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步