在前面的例子中,我们挑出了所有重复的单词,并将它们放入字典中。对我们来说,这是编写字典最明显的方式。但是压缩程序的看法完全不同:它没有任何单独单词的概念——它只寻找模式。为了尽可能地减小文件大小,它会仔细选择要包含在字典中的模式。
如果我们从这个角度来看待这个短语,我们就会得到一本完全不同的词典。
如果压缩程序扫描肯尼迪的短语,它遇到的第一个冗余将只有几个字母长。在“ask not what your”中,有一个重复的字母“t”后面跟着一个空格——在“not”和“what”中。如果压缩程序将此写入字典,那么每次“t”后面跟着空格时,它都可以写入“1”。但在这个简短的短语中,这个模式出现的次数还不够多,不足以使它成为一个有价值的条目,所以程序最终会覆盖它。
程序可能注意到的下一件事是“ou”,它同时出现在“your”和“country”中。如果这是一个较长的文档,将这种模式写入字典可以节省大量空间——“ou”在英语中是一个相当常见的组合。但是当压缩程序处理这句话时,它会很快为字典词条找到更好的选择:不仅“ou”被重复了,而且整个单词“your”和“country”都被重复了,而且它们实际上是一起重复的,就像短语“your country”一样。在这种情况下,程序将用“your country”的条目覆盖字典中“ou”的条目。
短语“can do for”也被重复了,一次后面跟着“your”,一次后面跟着“you”,形成了“can do for you”的重复模式。这允许我们用一个数字值写15个字符(包括空格),而“your country”只允许我们用一个数字值写13个字符(包括空格),所以程序会把“your country”条目重写为“r country”,然后为“can do for you”写一个单独的条目。程序以这种方式进行,提取所有重复的信息位,然后计算应该将哪些模式写入字典。18luck手机登录这种重写字典的能力是“适应性”的一部分LZ自适应基于字典的算法.正如您可以从上面的讨论中看到的,程序实际执行此操作的方式相当复杂Data-Compression.com.
无论您使用什么特定的方法,这个深度搜索系统都可以让您比仅仅选择单词更有效地压缩文件。使用我们上面挑选的模式,并在空格中添加“__”,我们得到了这个更大的字典:
- ask__
- 1
- 你
- r__country
- __can__do__for__you
还有这个小句子:“1 not__2345__——__12354”
这个句子现在占用了18个单位的内存,而我们的字典占用了41个单位的内存。因此,我们将总文件大小从79个单位压缩到59个单位!这只是压缩短语的一种方式,不一定是最有效的方式。(看看你是否能找到更好的方法!)
那么这18新利最新登入个系统有多好呢?的file-reduction比率这取决于许多因素,包括文件类型、文件大小和压缩方案。
在世界上大多数语言中,某些字母和单词经常以相同的模式出现在一起。由于冗余率很高,文本文件压缩得很好。缩小50%或更多对于一个大的文本文件来说是典型的。大多数编程语言它们也非常冗余,因为它们使用相对较小的命令集合,这些命令经常以一种固定的模式组合在一起。包含大量独特信息的文件,如图形或18luck手机登录MP3文件,不能用这个系统压缩太多,因为它们不会重复很多模式(下一节将详细介绍)。
如果一个文件有很多重复的模式,减少的速度通常会随着文件大小的增加而增加。通过我们的示例,您可以看到这一点——如果我们有更多肯尼迪的演讲,我们就可以更频繁地在字典中引用模式,从而从每个条目的文件空间中获得更多信息。此外,在较长的工作中可能会出现更普遍的模式,使我们能够创建一个更有效的字典。
这种效率也取决于具体情况算法压缩程序使用。有些程序特别适合在某些类型的文件中提取模式,因此可以更简洁地压缩它们。另一些则是字典中的字典,这可能对较大的文件有效压缩,但对较小的文件无效。虽然所有这类压缩程序的工作原理都是一样的,但实际上在执行方式上有很大的差异。程序员总是试图构建一个更好的系统。