一、哈夫曼树:实现文件压缩
1、涉及的问题:在现实生活中大量的数据是需要存储的,压缩后可以节省空间、节省带宽(在网上发送的照片,发送的并不是原图,先把问件进行压缩,接收方收到之后才进行展开)(缩略图就是压缩的结果)。
2、压缩:
(1)分类:
a、无损压缩:压缩后的文件,恢复后和原来一模一样。【对于重要资料的压缩】【原版】
b、有损压缩: 把一个文件压缩后,不能恢复源文件,也不需要恢复源文件。【图片(图片是由一个个色块组成的即像素点,一个像素点色彩越丰富,单位像素点的单位更大)、音频、视频】【连续压缩多个像素点可以省略其中的一些】【有损压缩可以机大限度的让数据变小,数据变得越小就越不清晰,音、视频等无损的会比有损的大很多,因为有损的会省略掉很多数据。数据的清晰度取决于原版】
此处实现的主要是无损压缩
3、哈夫曼树:最优二叉树,即加权路径长度最短二叉树,属于五大算法中的贪心算法。(小的在下面,路径长;大的在上面,路径短)
贪心算法:每次都是从整体的角度选择当前看到的最好的,是某种意义上的局部最优解。贪心算法不是对所有的问题都能得到整体最优解,使用贪心算法构建哈夫曼树。
动态规划:全局的算法。
4、文件压缩的思路:假设存在一个文件
二、压缩的好处:
(1)节省空间
(2)起保护作用
让权值大的靠近根节点可以使哈夫曼树的带权路径长度变小。
哈夫曼树的权值:每个字符出现的次数