关于哈夫曼编码(玄关)

学术版

@[sunny_town](/user/1240580) [这个](https://blog.csdn.net/Xiaoyuan_he/article/details/137697762)
by dawoli @ 2024-09-20 21:21:06


@[dawoli](/user/1006094) 关注了
by sunny_town @ 2024-09-20 21:21:50


@[sunny_town](/user/1240580) 每次取俩最小合成一个节点
by ChenXiJie2013 @ 2024-09-20 21:21:53


就是贪心,然后每一次取两个最小的数据进行合并,合并完的两个数据变成新的数据,再重复进行操作。 其实就是合并石子的意思。
by cute_overmind @ 2024-09-20 21:26:20


1.就是先将频率从小到大排序,之后取前两个做为哈夫曼树的节点(小的节点前)。 2.之后算出两个节点和,把原来拿的两个频率替换成节点和 重复1.2.步骤,直至所以频率都在一个哈夫曼树 接下来左权统一为0右权统一为1(反过来也行)转折一次就给一个转折点下的权值。于是就编码好了
by wenxuliang @ 2024-09-20 21:26:37


**我是看[这个](https://www.bilibili.com/video/BV1wf421q7b8/?spm_id_from=333.337.search-card.all.click&vd_source=9850f33c640659957b17cf49cff1619f)学的**
by Zhy_haoyu @ 2024-09-20 21:31:54


@[Zhy_haoyu](/user/1059671) 我也是看这个,但我看不懂。。。
by sunny_town @ 2024-09-20 21:34:59


例如一个字符串abcabcaaabde,a~e分别出现5、3、2、1、1次,将每个字母对应一串二进制数字来进行编码,哈夫曼编码可以使这个编码的长度最小 对于其实现,我们使用哈夫曼树。首先将各个字母出现的顺序从小到大排序,即d1、e1、c2、b3、a5,然后取头两个最小的作为一个结点N的左右子结点(较小的为左子结点),并使N结点的权值等于其左右子结点的权值和,这里N的权值为1+1=2 然后把N插入到原来的序列中,并删掉d、e,原序列变成N2、c2、b3、a5(注意还是要求从小到大排序),然后重复上面的操作 最后得到一个这样的树: ![](https://img.picui.cn/free/2024/09/17/66e975f25f048.png) 我们令左边为0,右边为1,也就是: ![](https://img.picui.cn/free/2024/09/17/66e97653d7cd0.png) 得到各个字母对应的编码:a0,b10,c111,d1100,e1101 原字符串的哈夫曼编码就是0101110101110001011001101,约定规则后可无歧义解码 (错漏之处还请指出)
by Gun_Der @ 2024-09-20 21:44:06


@[Gun_Der](/user/173711) 话说为啥好多人在问哈夫曼树的问题,今年会考吗(?
by Gun_Der @ 2024-09-20 21:44:43


|