思路
应用huffman是带权路径最小二叉树这个性质,完成的文件压缩。我们可以应用这个性质。让一个文件中,每个字符出现的次数作为权值。这样离根节点越近的节点,它的字符出现的次数就越多。然后根据这个节点在父节点左,有效编码为0,在右,有效编码为1,从跟遍历到该节点,得到相应的huffman编码,然后用huffman编码去替代该文件中该字符得而实现压缩。
其实上面说的是字符,我们不应该单单把它看成一个字符。而是应该把它当成在单个字节中的一个数字。我们实际不是统计每个字符出现的次数,而是统计的是在待压缩文件中,每个字节相应的数字在该文件中出现了多少次。一个字节,总共有256种数字。所以我们要统计一个文件中这256种数字到底出现了多少次,然后拿它们的次数去创建huffman树,得到编码后完成压缩。
我的文件夹压缩就是基于上面huffman压缩的实现原理。我压缩文件夹时候,先调用了opendir函数,然后再调用了readdir函数,根据深度优先遍历了该文件夹(目录)下的所有文件,然后把所有文件的路径保存到了一个vector中。最后一个一个压缩vector中的文件,从而实现的压缩文件夹。
遍历目录时思路图
压缩思路
通过对文件每一个字节进行次数统计,并建立huffman tree