哈夫曼树总结:
在C++中我们已经学过了树,这里我们简单的回顾一下树
1.树的几个属性
树的深度:树的根节点到每个叶子节点路径数最多的那一条分支的路径数
树的高度:树的深度加1.
叶子节点:没有子节点的节点
2.树的遍历方法:
先序遍历:先中,再左,后右。
中序遍历:先左,再中,后右。
后序遍历:先左,再右,后中。
层次遍历:从根节点开始,从上至下,从左至右,一次遍历树。
3.最优二叉树(哈夫曼树):
权值路径最小的二叉树叫最优二叉树。可以用于huffman压缩。
4.huffman压缩的原理:
在生活中,我们使用的文字是可以反复使用的,并且在一篇文章中,可能一个字符出现多次,所以我们可以利用这一
原理将字符用01串代替,当要使用时我们在将其还原,这样,我们就可以把文件压缩。
5.huffman压缩的步骤:
a 读出文件,将要压缩的文件一个一个字节的读取出来,并且统计每个字节的权值即每个字节出现的次数,然后根据所 得到的次数进行排序:
(我们可以建一个数组,当出现的字符的ASIC值等于数组下标时,该数组里面的值加一。这里排序可以用优先队列)
b 根据优先队列所排序的到的次数构建哈夫曼树。(优先队列中存储的是一个节点,包括它的ASIC码值和出现的次数)
c 获取每个字符的哈夫曼编码,得到码表。
d 写文件:
(1)写入信息头:
写入码表:写入时每次写入八位,如果字符的码值不足八位,则将其补足八位(字符,码值,补0)
并且所有的码表值之和也要是8的整数倍,如果不是,则补足为8的整数倍
写入文件信息:将问价内容根据码表转换为01窜,写入文件,这样就实现了文件的压缩。
在C++中我们已经学过了树,这里我们简单的回顾一下树
1.树的几个属性
树的深度:树的根节点到每个叶子节点路径数最多的那一条分支的路径数
树的高度:树的深度加1.
叶子节点:没有子节点的节点
2.树的遍历方法:
先序遍历:先中,再左,后右。
中序遍历:先左,再中,后右。
后序遍历:先左,再右,后中。
层次遍历:从根节点开始,从上至下,从左至右,一次遍历树。
3.最优二叉树(哈夫曼树):
权值路径最小的二叉树叫最优二叉树。可以用于huffman压缩。
4.huffman压缩的原理:
在生活中,我们使用的文字是可以反复使用的,并且在一篇文章中,可能一个字符出现多次,所以我们可以利用这一
原理将字符用01串代替,当要使用时我们在将其还原,这样,我们就可以把文件压缩。
5.huffman压缩的步骤:
a 读出文件,将要压缩的文件一个一个字节的读取出来,并且统计每个字节的权值即每个字节出现的次数,然后根据所 得到的次数进行排序:
(我们可以建一个数组,当出现的字符的ASIC值等于数组下标时,该数组里面的值加一。这里排序可以用优先队列)
b 根据优先队列所排序的到的次数构建哈夫曼树。(优先队列中存储的是一个节点,包括它的ASIC码值和出现的次数)
c 获取每个字符的哈夫曼编码,得到码表。
d 写文件:
(1)写入信息头:
写入码表:写入时每次写入八位,如果字符的码值不足八位,则将其补足八位(字符,码值,补0)
并且所有的码表值之和也要是8的整数倍,如果不是,则补足为8的整数倍
写入文件信息:将问价内容根据码表转换为01窜,写入文件,这样就实现了文件的压缩。