哈夫曼树
是一颗二叉树,又称为最优二叉树。它的叶子节点到根节点的带权路径和最小
在这里,带权路径=一个节点的权值*该节点到另一个节点的边的数量
构建哈夫曼树
给定\(n\)个权值为\(w\)的节点
我们在其中选出权值最小的两个点取出,假设为\(w_i,w_j\),然后再新建一个权值为\(w_i+w_j\)的节点重新放入
反复直到剩下一个节点,一棵树就好了
显然,大的节点在上面,小的节点在下面,正确性不难证明
哈夫曼编码
假设我们有一个字符串IAKIOI
这个字符串的总bit数为48,我们能不能把它压缩一下呢?
哈夫曼编码就是一种无损压缩方法,它的思想是:出现频率越少的字符编码越短,频率越高字符编码越长
实现
我们结合上面的哈夫曼树,将每种字符出现的次数当做该字符的权值,构建一颗哈夫曼树
然后对于每一棵子树,左边为0, 右边为1,叶子节点到根的路径就是它的哈夫曼编码
标签:字符,哈夫曼,编码,二叉树,权值,节点 来源: https://www.cnblogs.com/zhangwenxuan/p/15112611.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。