我想出了术语循环,希望它不会与现有术语重叠。基本上我正在尝试提出一种算法来查找打印文本中的循环。
从简单到复杂的一些例子
示例 1
鉴于:
a a a a a b c d
我想说:
5x(a) b c d
或算法:
for 1 .. 5
print a
end
print b
print c
print d
示例 2
鉴于:
a b a b a b a b c d
我想说:
4x(a b) c d
或算法:
for 1 .. 4
print a
print b
end
print c
print d
示例 3
鉴于:
a b c d b c d b c d b c e
我想说:
a 3x(b c d) b c e
或算法:
print a
for 1 .. 3
print b
print c
print d
end
print b
print c
print d
它没有让我想起我知道的任何算法。我觉得有些问题可能是模棱两可的,但现在找到一个解决方案对我来说就足够了。效率总是受欢迎的,但不是强制性的。我怎样才能做到这一点?
编辑
首先感谢大家的讨论。我已经从Rosetta改编了一个LZW算法并在我的输入上运行它:
abcdbcdbcdbcdef
这给了我:
a
b
c
d
8 => bc
10 => db
9 => cd
11 => bcd
e
f
我有一本字典:
a a
c c
b b
e e
d d
f f
8 bc
9 cd
10 db
11 bcd
12 dbc
13 cdb
14 bcde
15 ef
7 ab
它看起来很适合压缩,但并不是我想要的。我需要的更像是我的示例中算法表示中的压缩,它将具有:
- 后续序列(如果一个序列重复,则中间不会有其他序列)
- 没有字典,只有循环
- 不可约
- 具有最大序列大小(这将最小化算法表示)
- 假设允许嵌套循环(与我之前在评论中所说的相反)