ACM基础(四):树之Huffman Coding哈夫曼(霍夫曼)编码


一、原理

频率:

在这里插入图片描述

原理:

构造的方法就是将所有的指令按使用的频度(也就是程序中出现的概率)由小到大依次排列,每次将两个使用频度最小合并在一起,构成一个频度为两者之和的新结点,将其与余下的结点放在一起。接着再从这些结点中继续找两个使用频度最小合并在一起,构成一个频度为两者之和的新结点。重复上述过程,全部结点合并完成。

在这里插入图片描述

过程:

0.01和0.02是目前最小的,结合为0.03
0.03和0.03是目前最小的,结合为0.06
0.06和0.06是目前最小的,结合为0.12
0.07和0.07是目前最小的,结合为0.14

二、伪代码

HUFFMAN()
	// 共有n个数
	n ← |C|
	// 优先级队列(谁小谁在队首)
	Q ← C
	// n个数有n-1对
	for i ← 1 to n-1
			// 分配一个新的结点,联合两个最小结点
		do	allocate a new node z
			// 新结点的左孩子就是弹出的一个最小队首
			left-son[z] ← x ← EXTRACT-MIN(Q)
			// 新结点的右孩子就是弹出的一个最小队首
			right-son[z] ← y ← EXTRACT-MIN(Q)
			// 新结点的频率就是两子节点频率之和
			f[z] ← f[x] + f[y]
			// 将新结点插入到优先级队列中
			INSERT(Q, z)
	// 返回树根
	return EEXTRACT-MIN(Q)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值