我想知道压缩算法如何实际写出他们的笔记。让我们说" 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") ."
算法如何知道一个是压缩的?
答案 0 :(得分:1)
通常的处理方法是识别(在压缩期间)原始文本包含的字符序列会导致解压缩问题并以某种方式“逃避”它。有很多方法可以做到这一点,但对于您发布的示例,最简单的方法可能是将文本压缩为:
"Compression programs label how many times string is repeated like this: 1x("4x")("text"), this is 3x("repeated").
这样,“4x”(或任何其他可能看起来像重复计数的东西)不会被用于重复计数,因为它已被捕获为要重复的文本(尽管只有一次)。并且文本("text")
不以重复计数为前缀,因此它将在解压缩阶段保持不变。
请注意,此特定编码方案还有其他问题(例如重复文本本身包含双引号)。但所有这些问题都可以通过适当的逃避处理来解决。
答案 1 :(得分:1)
粗略地说,有三种方法:
一切都是特殊的象征。因此,文本将被编码为1x"压缩",1x"程序",1x"标签"等等。
逃逸。这指的是使用特殊字符来表示符号。因此,4x("text")
将表示为$4x("text")
,$
的存在意味着后面的内容是特殊的压缩序列。当然,为了实现这一点,需要一个技巧来允许我们在正常文本中包含$
。诀窍非常简单:$1x("$")
。
词典。您考虑的压缩算法是极其简单的变形编码"运行长度编码"算法。 (查一下。)这个算法几乎没有任何好处,现在很少使用。像LZW这样的现代压缩算法要复杂得多,它们使用字典,每个输入组合都映射到要输出的字节串。一个完整的解释太长,无法包含在答案中,但随意查阅LZW。