简单的压缩算法 - 如何避免标记字符串?
Simple compression algorithm - how to avoid marker-strings?
我试图想出一个明文字符串压缩算法,例如
AAAAAAAABB -> A@8BB
其中n个符号y写成
y@n
问题是:如果我需要压缩字符串 "A@8" 怎么办?这会使解压算法感到困惑,认为原始输入是 "AAAAAAAA" 而不是 "A@8".
我该如何解决这个问题?我正在考虑使用 "marker" 字符而不是 @,但是如果我想让算法处理二进制数据怎么办?我想在那种情况下没有可以使用的标记字符
一个简单的解决方案是 escaping:您可以用 @@
表示源中的每个 @
。
每次遇到 @
时,您都会向前看一个字符,然后找到一个数字(重复前一个字符)或另一个 @
(字面意思是 @
)。
一个变体会将每个 @
编码为 @@1
,这将非常适合您当前的方案并允许将 n 个连续的 @
编码为 @@n
。
我试图想出一个明文字符串压缩算法,例如
AAAAAAAABB -> A@8BB
其中n个符号y写成
y@n
问题是:如果我需要压缩字符串 "A@8" 怎么办?这会使解压算法感到困惑,认为原始输入是 "AAAAAAAA" 而不是 "A@8".
我该如何解决这个问题?我正在考虑使用 "marker" 字符而不是 @,但是如果我想让算法处理二进制数据怎么办?我想在那种情况下没有可以使用的标记字符
一个简单的解决方案是 escaping:您可以用 @@
表示源中的每个 @
。
每次遇到 @
时,您都会向前看一个字符,然后找到一个数字(重复前一个字符)或另一个 @
(字面意思是 @
)。
一个变体会将每个 @
编码为 @@1
,这将非常适合您当前的方案并允许将 n 个连续的 @
编码为 @@n
。