【问题标题】:How do I find largest subsequence in turing?如何在图灵中找到最大子序列?
【发布时间】:2015-01-09 06:52:33
【问题描述】:

在大学里我遇到了这个问题,但我似乎还没有找到答案(这不是家庭作业,只是一个谜语)。 假设您在图灵机中有输入:

01001101(8位序列)

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

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

1#01001101

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

编辑:只有一张暂存磁带可以处理。

【问题讨论】:

    标签: algorithm computer-science turing-machines


    【解决方案1】:

    这在概念上很容易,但编程起来很麻烦(就像图灵机上的任何不平凡的东西)。下面是一个算法的概要:

    • 确保有两个暂存磁带,一个用于存储读取磁头下的零运行长度,一个用于存储最长运行(我们将磁带称为 N 和 Max,并在两者上存储一元数)。最初两者都是空的。
    • 当您看到零时,请在 N 上多写一个 1。
    • 当你看到一个 1 时,倒回 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
    

    变量被临时磁带替换。

    【讨论】:

    • 非常抱歉,我忘了说我只有一盘磁带要处理。
    • @GrzegorzOlechwierowicz 一个磁带还是一个暂存磁带? (无论哪种情况,单磁带 TM 和多磁带 TM 都有标准结构。)
    • 我相信只是主磁带。就是这样。
    • 您应该能够将三个磁带散布成一个(在通过在任意两个输入数字之间放置两个空格将您的输入转换为这种新的稀疏格式的第一阶段之后)
    【解决方案2】:

    4294967289,这就是答案,不信我试试在图灵上给那个数字加1,它会说数字太大

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多