构建图灵机来决定ww ^ Rw

时间:2011-10-03 03:06:10

标签: turing-machines

w ^ R是w的反向,w是{0,1} *。因此,TM需要决定一个单词,然后是该单词的反向,后跟单词。 我不想要答案,我只想要领先一步并走上正轨。

3 个答案:

答案 0 :(得分:5)

由于时间过去了,可能不再需要答案,我想我会提出一个解决方案,为未来的学生寻找一个图灵机如何识别一种语言的例子。

这是个主意。我们将把磁带字母{0,1,a,b,c,d}作为一个单磁带单无限磁带图灵机来识别w w ^ R w。该机器将分五个阶段工作:

  1. 用w和R替换前缀w w ^ R中的0和1。
  2. 看看w w ^ R是否是回文。
  3. 将磁带恢复到原始状态。
  4. 用c和d's替换后缀w ^ R w中的0和1。
  5. 看看w ^ R是否是回文。
  6. 请注意,这只是一个简单的(我理解,也就是说)显示存在图灵机来识别这种语言的方法。当然,表明在任何图灵等效计算系统中存在一种解决这个问题的算法同样好(它证明存在TM)......但是,这仍然概括了一个这样的TM的构造。还要注意,可能有一个更简单,更有效或更直观的TM来解决这个问题......再次,这只是一种方法。

    步骤1的工作原理如下:

    • 前提条件:磁带以空白开头,包含(0 + 1)*中的任何字符串,后跟无限长的空白方块。
    • 后置条件:如果磁带为空或长度不是3的倍数,则暂停;否则,磁带以空白开头,后跟(a + b)^ 2n(c + d)^ n,然后是无限长的空白字符串。

      1. 向右移动。
      2. 如果为空,请停止接受。否则,向右扫描直至找到空磁带方块,然后向左移动。
      3. 如果为0,则将磁带更改为c;如果为1,则将磁带更改为d。
      4. 向左扫描,直至找到空磁带方块。向右移动。
      5. 如果录像带为0或1,请更改为a或b然后向右移动。如果磁带是c或d,则停止拒绝。
      6. 如果录像带为0或1,请更改为a或b然后向右移动。如果磁带是c或d,则停止拒绝。
      7. 如果磁带是c或d,请扫描到磁带的开头并转到步骤2.否则,向右扫描直到c或d,然后向左移动。
      8. 如果为0,则将磁带更改为c;如果为1,则将磁带更改为d。
      9. 向左扫描,直到找到a或b。向右移动。
      10. 从4开始重复。

    步骤2的工作原理如下:

    • 前提条件:磁带以空白开头,后跟(a + b)^ 2n(c + d)^ n,后跟无限长的空白字符串。
    • 后置条件:如果前缀(a + b)^ 2n不是回文,则停止;否则,使磁带处于D(c + d)^ 3n D *

      之类的状态
      1. 向右移动。
      2. 如果磁带是(或b),请向右移动。如果磁带是c或d,请转到磁带的开头,然后转到步骤3.
      3. 如果磁带为c,d或空白,则停止拒绝。否则,向右扫描直至找到c,d或空白。向左移动。
      4. 如果磁带是b(或a),则停止拒绝。否则,将其更改为c(或d)并向左扫描,直到看到空白,c或d。向右移。将a(或b)更改为c(或d)。向右移动。
      5. 从步骤2开始重复。

    第3步将如下工作

    • 前提条件:胶带为D(c + d)^ 3n D *
    • 后置条件:磁带为D(0 + 1)^ 3n D *

      1. 向右移动。
      2. 如果磁带是c,则写入0并向右移动。如果磁带是d,则写入1并向右移动。如果磁带为空白,请移至磁带末尾的第一个空白区域,然后转到步骤4.
      3. 重复步骤2.

    步骤4和5就像步骤1和2一样工作,除了你向后工作(磁带现在看起来像D(c + d)^ n(a + b)^ 2n D *,你必须检查是否(a + b)^ 2n部分是回文。

    通过这两个测试的任何字符串必须是w w ^ R w的形式,其中w在(0 + 1)*中。

答案 1 :(得分:3)

作为提示,请注意ww R w对于某些n必须具有3n的长度(因为每个字符恰好出现三次)。因此,您可以构建一个图灵机,它通过某种方式计算字符串的长度,使用它来确定三个字符串的边界在哪里,然后检查这三个部分都具有适当的组成。如果你不能计算3个字符的倍数,你可以立即拒绝。

根据允许的TM类型,使用多轨或多点图灵机可能最简单,这样您就可以用一些额外的信息标记字母。

希望这有帮助!

答案 2 :(得分:0)

这是我如何用 2 个磁带和 O(n) 复杂度做到的:

  1. 通过扫描磁带 1 确保长度除以 3,同时在磁带 1 中每 3 步向右移动磁带 1
  2. 如果您到达磁带 1 的末尾,而磁带 2 的下一步是向右移动足够数量的字母(可被 3 整除)
  3. 在磁带 2 上标记您到达的字母(这是前三分之一的结尾)
  4. 回滚到两个磁带的开头
  5. 通过胶带 2 直到标记并返回到第二个三分之一
  6. 确认 WWR:将两个磁带移动到磁带 2 的末尾,然后向前移动磁带 1,向后移动磁带 2。如果它们匹配,您将获得 WWR
  7. 在开头和结尾检查 W:只需在磁带 1 上继续扫描,同时从开头与磁带 2 进行比较