【问题标题】:Turing machine accepting words of "1" arrange-able into square图灵机接受单词“1”可排列成正方形
【发布时间】:2020-03-02 19:39:48
【问题描述】:

我正试图找出以下作业,我可以使用你的帮助,因为我被卡住了。我的目标不是直接回答(但我不介意有人能够设计整台机器)。我更感兴趣的是赞成/反对我的想法并指出正确的方向。

任务:

构造一个接受1^k, where k=n^2 n is integer 格式单词的图灵机。 基本上它接受这些词,您可以将它们排列成正方形。 例如,前三个可接受的词是:

1Δ; 1111Δ; 111111111Δ;

哪些可以排列成这样的正方形:

1

11
11

111
111
111

我的想法:

如果我只得到一次“1”,它应该被接受。

Tape: 1Δ; k=1, n=1 and k=n^2

所以如果磁带上没有其他字符,我假设在一个“1”之后我处于“STOP”状态(我们称之为状态 A)。

下一个可接受的词是下一个正方形,我们可以这样写成公式:

(n+1)^2  That equals: n^2 + 2*n + 1

两个连续方块的差是(2*n + 1)

所以如果我的假设是正确的,如果我处于状态 A 我需要以某种方式检查我是否在磁带上得到(2*n + 1) 乘以“1”,如果这让我回到状态 A,它将被正确接受。其他任何事情都应该拒绝。

我面临的问题是,我不知道如何计算磁带上的(2*n + 1) 乘以“1”。

我也应该只用一盘磁带找到解决方案。提示是它应该以形式结束 111#111111111Δ,其中左侧的和等于“k”,右侧等于“n”。可悲的是,这个提示根本没有帮助我。我会说这让我的情况变得更糟。

【问题讨论】:

    标签: automata finite-automata computation-theory turing-machines


    【解决方案1】:

    因此,如果您只想要一台您知道可以工作且不关心效率的单磁带机,请考虑以下几点:

    1. 将输入复制到磁带末尾,用分隔符与原始输入分隔
    2. 在磁带末尾以一元形式写入一个数字 k(从 1 开始),通过第二个分隔符与副本分隔
    3. 通过从副本中迭代地减去 k 并用特殊符号标记副本的 k 个划掉符号之一,将副本除以计数器 k
    4. 假设第 3 步的除法剩下 0 余数,以相同的方式再次除法,但只考虑特殊标记的符号
    5. 提供第 4 步中的除法剩下 0 余数,看看商是否为 1。如果是,您发现 input = k^2 并且可以停止接受。否则,您可以在 k > 输入时停止拒绝。

    输入 1111 示例:

       1111
    -> 1111A1111       // copy input
    -> 1111A1111B1     // add counter
    -> 1111A3333B1     // divide by 1 by bouncing back and forth, marking every 1th
    -> 1111A5555B1     // repeat
    -> 1111A1111B11    // don't have one 5, so copy input and increment counter
    -> 1111A3232B11    // divide by 2 by bouncing back and forth, marking every 2nd
    -> 1111A5242B11    // divide by 2 again considering only 3s from last step
    -> accept          // halt-accept since one 5 remaining means input = k^2
    

    你的方法也行。您可以跟踪当前的 n(或 k),并在每个阶段迭代地删除副本中的 2n + 1 个 1。比如:

       1111
    -> 1111A1111    // copy input
    -> 1111A1111B   // begin counter at 0
    -> 1111A2111B   // cross off 1 in the copy
    -> 1111A2111B1  // increment counter
    -> 1111A2222B1  // cross off 3 in the copy
    -> accept       // all symbols crossed off
    

    如果让您了解的是“来回弹跳”以划掉、减法、除法等的实际机制,那么您的想法是您将划线的符号更改为您认为它具有含义的符号为该目的而标记;更改状态,以便您知道下一步需要标记什么;去标记它;然后,返回到您开始的第一个未标记符号(如果有)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多