使用图灵机实现枚举器 - 冗余打印

时间:2018-03-17 17:15:13

标签: math turing-machines decidable

在以下算法中: algorithm

我们使用图灵机实现一个枚举器,枚举器应该输出图灵机接受的语言。来自Σ*的可接受单词被多次打印(每次迭代之前打印的单词将再次打印)。

为什么我们不能只说 - “对于Σ*中的每个单词运行M.如果它接受然后打印,如果拒绝然后继续下一个单词”。然后我们不会多次打印每个单词。

为什么不必要的打印?

图像中的算法是:

如果TM M识别语言A,我们可以为A构建以下枚举器。假设s1s2s3,...是Σ*中可能的字符串列表。

E =“忽略输入

1)对i = 1,2,3,...

重复以下操作

2)针对每个输入Mis1s2步,运行s3。 。 。 si

3)如果有任何计算接受,请打印出相应的sj。“

如果M接受特定字符串,它将显示在E生成的列表中(实际上无限多次)

由于

1 个答案:

答案 0 :(得分:0)

如评论中所述:问题是某些计算可能不会终止。因此,如果按顺序执行它们,则永远不会执行第一次非终止计算之后的那些。

给定的算法使用标准技术来解决这个问题:dovetailing

您可以将步骤3更改为"如果任何计算在i步骤之后接受,则打印" - 然后没有不必要的印刷品。但是,你必须在每次模拟过程中计算步数,这意味着一些额外的工作。作者选择了一个易于编程的选项,但效率不高。