【问题标题】:Turing machine diagram for enumerator枚举器的图灵机图
【发布时间】:2011-05-09 20:44:10
【问题描述】:

我应该为语言 0^k1^k (k>=0) 画一个枚举数。我不确定这与为该语言构建图灵机状态图有何不同:我理解它的方式是,我需要构建一个枚举器,通过模拟图灵,在给定所有高于 {0,1} 的字符串的情况下,我需要构建一个能够识别上述语言的枚举器机器在 i 步骤中识别字符串 i 上的这种语言,我想不出如何使用状态图来做到这一点,但我的老师指出,这就是我们如何证明枚举器和图灵机之间的等价性,所以我认为我们必须做的是使用为枚举器定义的转换函数,这使得图表看起来类似于识别 0^k1^k 的图灵机,只是我们没有移动到 qaccept 我们移动到 qprint 以获取语言中的输入,并且那么对于必须拒绝的输入,我们打印 epsilon?但是我们如何在字母表 {0,1} 之上产生无限数量的字符串呢?在初始状态,工作带和打印带是空的。有人可以为我澄清这些观点吗?可能是我误会了。

【问题讨论】:

  • 枚举器构造属于该语言的字符串,而不是接受/拒绝
  • 否,但它打印图灵机接受的语言,并且具有转换功能。

标签: turing-machines


【解决方案1】:

我想我终于清楚了枚举器的概念,枚举器不应该读取输入,它会以构建它的语言创建单词: 这是算法:

  1. 在输出磁带上打印 epsilon
  2. 在工作磁带上写 01
  3. 回到磁带的前面并将其内容复制到输出磁带
  4. 回到最左边的0,换成1,到最右边的1,最后加两个1。
  5. 返回第 3 阶段

【讨论】:

    【解决方案2】:

    我想到了另一种稍微不同的算法,它产生的状态数量较少,并且在其工作磁带上仅使用 {0,blank}:

    【讨论】:

      【解决方案3】:

      我认为你可能有一个错误。 在第 4 阶段,您写了“回到最左边的 0,将其替换为 1,转到最右边的 1 并在末尾添加两个 1” 我觉得应该是:“回到最左边的1,换成0,到最右边的1,最后加两个1”

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 2014-04-25
        • 1970-01-01
        • 2012-05-17
        • 1970-01-01
        • 2011-05-21
        • 1970-01-01
        • 2010-09-29
        • 1970-01-01
        相关资源
        最近更新 更多