压缩算法如何将其符号与实际文件内容区分开来?

时间:2015-12-08 19:47:35

标签: algorithm compression

我想知道压缩算法如何实际写出他们的笔记。让我们说" 4x4x"意味着4次" 4x"。

如果算法标签重复这样的字符怎么办:

23 *(" text")和重复的文字是34 *("某事")

程序如何知道这不是重复文本的标签,而是实际文本。我不知道如何更好地解释这一点。

压缩此字符串后:

"Compression programs label how many times string is repeated like this: 4x("text"), this is repeated repeated repeated ."

你会得到:

"Compression programs label how many times string is repeated like this: 4x("text"), this is 3x("repeated") ."

算法如何知道一个是压缩的?

2 个答案:

答案 0 :(得分:1)

通常的处理方法是识别(在压缩期间)原始文本包含的字符序列会导致解压缩问题并以某种方式“逃避”它。有很多方法可以做到这一点,但对于您发布的示例,最简单的方法可能是将文本压缩为:

"Compression programs label how many times string is repeated like this: 1x("4x")("text"), this is 3x("repeated").

这样,“4x”(或任何其他可能看起来像重复计数的东西)不会被用于重复计数,因为它已被捕获为要重复的文本(尽管只有一次)。并且文本("text")不以重复计数为前缀,因此它将在解压缩阶段保持不变。

请注意,此特定编码方案还有其他问题(例如重复文本本身包含双引号)。但所有这些问题都可以通过适当的逃避处理来解决。

答案 1 :(得分:1)

粗略地说,有三种方法:

  1. 一切都是特殊的象征。因此,文本将被编码为1x"压缩",1x"程序",1x"标签"等等。

  2. 逃逸。这指的是使用特殊字符来表示符号。因此,4x("text")将表示为$4x("text")$的存在意味着后面的内容是特殊的压缩序列。当然,为了实现这一点,需要一个技巧来允许我们在正常文本中包含$。诀窍非常简单:$1x("$")

  3. 词典。您考虑的压缩算法是极其简单的变形编码"运行长度编码"算法。 (查一下。)这个算法几乎没有任何好处,现在很少使用。像LZW这样的现代压缩算法要复杂得多,它们使用字典,每个输入组合都映射到要输出的字节串。一个完整的解释太长,无法包含在答案中,但随意查阅LZW。