文件压缩(Huaffman树的概念及其实现)
什么是压缩 想办法让源文件变得更小并能还原。 为什么要进行文件压缩 文件太大,节省空间 提高数据再网络上传输的效率 对数据有保护作用—加密 文件压缩的分类 无损压缩 源文件被压缩后,通过解压缩能够还原成和源文件完全相同的格式 有损压缩 解压缩之后不能将其还原成与源文件完全相同的格式–解压缩之后的文件再识别其内容时基本没有影响 GZIP压缩 LZ77变形: 原理将重复出现得语句用尽可能短得标记来替换 字符串的压缩 LZ77可以消除文件中重复出现的语句,但还存在字节方面的重复 基于Huffman编码得压缩 基于字节的压缩 1个字节—>8个bit位,如果对于每个字节如果能够找到一个更短的编码,来重新改写原3数据,可以起到压缩的目的 Huffman树的概念 从二叉树的根结点到二叉树中所有叶结点的路径长度与相应权值的乘积之和为该二叉树的带权路径长度WPL。 把带权路径最小的二叉树称为Huffman树 Huffman树的概念 用户提供一组权值信息 以每个权值为结点创建N棵二叉树的森林 如果二叉树森林中有超过两个树,进行以下操作 从二叉树森林中取出根结点权值最小的两棵二叉树 以该两棵二叉树作为某个结点的左右子树创建一颗新的二叉树,新二叉树中的权值为其左右子树权值之和 将新创建的二叉树插入到森林中 创建好之后的二叉树森林中的每棵树可以采用堆(priority_queue)保存