[英]Run length encoding of arbitrary length substrings
对于任意但有限的输入流长度,有效的运行时间编码算法(就时间复杂度而言)。 可以在C中将长度为1的子字符串的算法实现为:
void encoding(char *bytes)
{
int c = 0;
char *s = bytes, ch;
while(*s) {
c=1;
ch=*s;
while(*s && *s== *(s+1)) {
c++;
s++;
}
printf("%d%c", c, ch);
s++;
}
}
但是,我正在寻找一种可以编码任意长度的子字符串的更好算法。 例如,对于输入"abbabb"
,以上代码将输出: "1a2b1a2b"
。 但是更好的算法可以将其编码为"2abb"
。
实现语言(我选择C / Python)不是问题,因为我只想寻找一种算法。
可以找到一定长度重复子串的任何算法都可以用于执行具有该长度的滑动窗口的Lempel-Ziv压缩。
因此,我将研究Lempel-Ziv编码器并使用它。 甚至更好:删除运行长度编码并实现Lempel-Ziv-它只能提供更好的压缩。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.