![](/img/trans.png)
[英]Design a turing machine that accepts the language L= {a^n+1 b^2n c^3n: n>=0}
[英]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,如下:
如果我们在这一点上继续,那意味着我们已经验证我们正在查看大于 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,我们可以立即停止拒绝。 相反,我们需要继续检查更大的可能除数。 这个阶段我们需要:
如果我们继续这个过程,我们最终会找到输入磁带上表示的数字的除数,如果该数字是合数的话。 然而,实际上,当第二条磁带增加到与输入相同的数字时,我们目前将暂停拒绝素数。 然后我们会发现质数会平分自己。 我们需要检查一下; 一个好的位置是在上面最后一组 3 个步骤中的第 2 步和第 3 步之间,我们可以比较磁带 #1 和 #2 看看它们是否完全匹配。 这就像可分性检查一样,但它最多只会从磁带 #1 中删除磁带 #2 的一个副本,如果它变成空白/空白,它会停止接受而不是停止拒绝。
显然,如果您想通过提供其转换表来正式定义 TM,则需要填写很多细节。 但是,这是可以做到的,并且可以使用此处概述的过程来解决此问题。 同样,这不是解决此问题的最有效方法,但它是解决此问题的一种方法,通常在为某些问题寻找 TM 时就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.