数据压缩与加密技术解析
一、数据压缩
1.1 Huffman 编码与 LZ77 编码的压缩效果问题
1.1.1 Huffman 编码
Huffman 编码的有效压缩依赖于数据中符号出现频率的差异。当所有可能的符号出现频率几乎相同时,压缩效果会很差。此外,对少量数据进行压缩时,Huffman 编码的表现也不佳,因为头部的频率表所占用的空间会抵消数据压缩所节省的空间。不过,在大多数情况下,数据中的符号并非均匀分布,而且我们通常也不会对少量数据进行压缩,所以这些限制一般不会成为问题。
1.1.2 LZ77 编码
LZ77 编码的有效压缩依赖于使用短语标记来编码大量的符号序列。如果生成大量的符号标记,而只有少量代表短短语的短语标记,那么压缩效果就会很差。过多的符号标记甚至可能导致压缩后的数据比原始数据更大,这种情况通常发生在滑动窗口设置得太小,无法有效利用重复短语的时候。
1.2 识别压缩数据结尾的方法
在 Huffman 编码和 LZ77 编码的实现中,通常通过计数符号来识别压缩数据的结尾,这意味着必须将符号计数与压缩数据一起存储。另一种方法是编码一个特殊的结束符号。
- Huffman 编码 :只需将 HuffNode 结构中的符号成员改为短整型,而不是无符号字符,压缩数据的大小受影响很小。
- LZ77 编码 :在不改变标记解释方式的情况下,每个标记需要额外存储一位来表示 257 种可能的符号,这会增加压缩数据的大小,使得这种方法不如简单地计数符号有效。