如何在图灵中找到最大的子序列?

时间:2014-11-12 12:08:19

标签: algorithm computer-science turing-machines

在大学时我遇到过这个问题,我似乎无法找到答案(这不是一个家庭作业,只是一个谜语)。 假设您已在图灵机中输入:

01001101(8位序列)

如何计算此类输入中最大的子序列并获得正确的输出2#01001101? (2因为彼此相邻有两个)。

我可以正确计算和编写第一个子序列,所以我在磁带上有这个:

1#01001101

但是我不知道如何计算其他子序列,而不是用较低的数字(最后一个子序列)覆盖结果。你有什么想法吗?

编辑:只能使用一个临时磁带。

2 个答案:

答案 0 :(得分:1)

这在概念上很容易,但是编程非常麻烦(就像图灵机上的任何非常重要的事情)。以下是算法的概述:

  • 确保有两个临时磁带,一个用于存储读取头下的零行程长度,一个用于存储看到的最长运行(让我们调用磁带N和Max,并在两者上存储一元数字)。两者最初都是空的。
  • 当您看到零时,请将额外的1写入N.
  • 当你看到一个,倒回Max和N,然后将N的内容写入Max,保持内容超出N的末尾(因此复制“111”超过“1111”保留“1111”,但复制“11111 “在它上面产生”11111“)。然后擦N.
  • 当你结束时,将Max的内容(可能转换为二进制文件)复制到主磁带的开头。

这实际上是简单算法的翻译:

N = Max = 0
for all x in the input:
    if x == 0:
        N += 1
    else:
        Max = max(N, Max)
        N = 0
output Max

其中变量被临时磁带替换。

答案 1 :(得分:-2)

4294967289,这就是答案,不要相信我只是尝试在图灵上添加1号,它会说数字太大