或者更准确地说,当两个相同的字符串连接在一起时,为什么zlib不能使整个第二个字符串收缩呢?看起来,当匹配的字符串在同一字符串的前一个实例之后立即开始时,zlib将第一个字符作为字符串文本发出,然后向后发出对前一个字符串减去第一个字符的引用。
例如,如果我使用zlib来缩小字符串latelate,输出是5个字符串文本,后面是一个反向引用.
l a t e l <len=3, dist=4>
或者赫夫曼编码..。
0000000 cb 49 2c 49 cd 01 62 00
0000010
其中,我通过使用"raw“放气流(即windowBits = -15)和固定的huf
我开始编写一个小程序,允许使用LZ77压缩算法压缩单个文件。效果很好。现在我在考虑如何存储数据。在LZ77中,压缩数据由一系列三重奏组成。每个三重奏具有以下格式:
<"start reading at n. positions backwards", "go ahead for n. positions", "next character">
怎样才能正确地存储这些三胞胎呢?我想:<11,5,8>位,然后:
2048位,用于向后看32,匹配字符串的最大长度为1字节。
这种格式在文本压缩方面非常好,但它对我的目的(由二进制图
编辑以澄清问题
我即将在Uni上提交一个关于两种著名压缩算法(Huffman编码和Lempel-Ziv 77)的实验室项目。我对Huffman编码的实现类似于贪婪的方法,在这种方法中,构建树的步骤如下:
1. Calculate frequencies for all unique characters and place them in a minimum heap
2. While there are more than two nodes in heap:
2.1 Take a value from the minimum heap and place it as the left
我在LZ77压缩程序中工作,当我试图压缩一个116Kb的文件时,它需要太长的时间来处理。我的代码有什么问题吗?我如何才能改进算法的处理时间?
import fileinput
class Assign:
def pattern(self, data):
self.skip = []
self.m = len(data)
for k in range(256): self.skip.append(self.m)
for k in range(self.m - 1): self.skip[ord(data[k])]