繁体   English   中英

设计一个图灵机来接受 {1^n: n is prime number}

[英]Design a turing machine to accept {1^n : n is prime number}

设计一个图灵机来接受 {1^n: n is prime number}。

我有这个家庭作业来制作一个识别器图灵机,如果 1 的出现等于任何质数,它将被接受。 到目前为止,我仍然不知道如何找到与这个素数相关的解决方案。

我应该怎么go一下这个?

因为我们正在制造图灵机并且我们没有明确表示我们关心性能,所以我们很可能只关心证明 TM 可以解决这个问题 - 所以,任何解决方案,无论多么愚蠢,都应该足够了。 什么是正确的,如果不必要的乏味,表明一元格式的数字(例如,1^p)是质数的方法? 一种方法是检查 p 的数量是否可以被 2 和 p - 1(含)之间的任何数字整除。 对于图灵机来说,这实际上很容易做到。 由于问题并没有告诉我们不要这样做,我们可以通过使用多带图灵机来构造它,从而使它变得更加简单。

让输入在#1 磁带上,并使用#2 磁带记录我们试图除以输入的当前事物。 在开始之前,我们可以验证一下我们的p是否大于2,如下:

  • 查看当前磁带方格是否为 1,如果是,则向右移动,否则停止拒绝,因为 0 不是素数
  • 查看当前磁带方格是否为 1,如果是,则向右移动,否则,停止拒绝,因为 1 不是质数
  • 查看当前磁带方格是否为 1,如果是,重置磁带头并继续我们的除法过程,知道 p > 2; 否则,暂停接受,因为 2 是质数。

如果我们在这一点上继续,那意味着我们已经验证我们正在查看大于 2 的数字的一元编码。我们需要这样做,因为 2 是我们需要检查整除性的第一个数字,我们不想说 2 是合数,因为 2 整除它。 在这个阶段,我们可以在#2 磁带上写入 11(一元 2)。 如果愿意,您可以在重置磁头时执行此操作,如上所述。 否则,您可以使用一些专门用于该部分设置的新状态。

我们现在正在查看这样的 TM 配置:

#1111111111111111111111#
 ^
#11#
 ^

我们想看看第二张纸带上的数字是否能整除第一张纸带上的数字。 为此,我们可以重复“划掉”第一个磁带上的数字,分组的大小与第二个磁带的大小相同,直到我们用完第一个磁带上的数字。 如果我们在划掉整个组的中间用完了,那么第一个磁带上表示的数字不能被第二个磁带上表示的数字整除,我们可以继续检查第二个磁带上的递增数字。 如果我们在划掉整个组后用完了,那么它可以被除 1 和它本身之外的数字整除,所以我们可以停止拒绝,因为这个数字不是质数。 处理我们的示例如下所示:

=>   #1111111#   =>   #x111111#   =>   #xx11111#   =>   #xx11111#
      ^                 ^                 ^                ^
     #11#             #11#             #11#             #11#
      ^                 ^                 ^               ^

=>   #xx11111#   =>   #xx11111#   =>   #xx11111#   =>   #xxx1111#
        ^                ^                ^                 ^
     #11#             #11#             #11#             #11#
      ^               ^                 ^                 ^

=>   #xxxx111#   =>  ... reset    =>   #xxxx111#   =>   ... cross
          ^           tape 2                ^            off another
     #11#             back to          #11#              pair of 1s
        ^             head ...          ^               ...

=>   #xxxxxx1#   =>   #xxxxxxx#
            ^                 ^
     #11#             #11#
      ^                 ^

在此阶段,我们在第二盘磁带上看到 1,在第一盘磁带上看到空白; 这意味着这个数字不能被我们目前的猜测整除。 如果我们看到 blank/blank,我们可以立即停止拒绝。 相反,我们需要继续检查更大的可能除数。 这个阶段我们需要:

  1. 将第一个磁带头重置为输入的开头,再次用 1 替换 x。
  2. 将额外的 1 添加到第二个磁带头以增加其值,然后将磁头重置为其值的开头。
  3. 重复上述可分性检查。

如果我们继续这个过程,我们最终会找到输入磁带上表示的数字的除数,如果该数字是合数的话。 然而,实际上,当第二条磁带增加到与输入相同的数字时,我们目前将暂停拒绝素数。 然后我们会发现质数会平分自己。 我们需要检查一下; 一个好的位置是在上面最后一组 3 个步骤中的第 2 步和第 3 步之间,我们可以比较磁带 #1 和 #2 看看它们是否完全匹配。 这就像可分性检查一样,但它最多只会从磁带 #1 中删除磁带 #2 的一个副本,如果它变成空白/空白,它会停止接受而不是停止拒绝。

显然,如果您想通过提供其转换表来正式定义 TM,则需要填写很多细节。 但是,这是可以做到的,并且可以使用此处概述的过程来解决此问题。 同样,这不是解决此问题的最有效方法,但它是解决此问题的一种方法,通常在为某些问题寻找 TM 时就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM