【问题标题】:What is the difference between recursive and recursively enumerable languages递归和递归可枚举语言有什么区别
【发布时间】:2016-02-01 17:05:12
【问题描述】:

我想知道递归和递归可枚举语言在停机和图灵机方面的区别是什么。我知道递归可枚举语言是递归语言的一个子集,但我不确定除此之外的区别。

【问题讨论】:

  • 我投票结束这个问题,因为它是关于计算理论,而不是编程。
  • @RaymondChen 我认为有“理论”和“计算理论”标签的事实证明了我的问题。

标签: computer-science theory computation-theory turing-machines formal-languages


【解决方案1】:

RRE 之间的关系是向后的:RRE 的(正确)子集.基本上,递归语言是一种你有一个完全决定者的语言。

回想一下递归可枚举语言的定义,因为它存在一个部分决定器;也就是说,一个图灵机,在你的字母表中输入一个单词,它会根据你的语言正确地接受/拒绝这个词,或者如果这个词不是你的语言,它可能会永远循环。

相比之下,递归语言是一种存在总决策者的语言,即永远不会循环,并且总是在接受或拒绝状态下停止的语言。

将这两个定义放在一起,很明显,递归语言也是递归可枚举的,因为总决策者也是部分决策者(它只是从不“选择”循环而不是停止以正确答案) .

【讨论】:

    【解决方案2】:

    主要区别在于,在递归可枚举语言中,机器对于语言 L 中的输入字符串会停止。但对于不在 L 中的输入字符串,它可能会停止,也可能不会停止。

    当我们谈到递归语言时,无论它是否被机器接受,它总是会停止。如果它接受它到达(q接受)并停止。如果不被机器接受,它会直接到达 (q halt)。

    【讨论】:

      【解决方案3】:

      停机问题是 RE 但非 R 问题的典型示例

      在尝试拆分复杂性类时,最好记住一个属于一个但不属于另一个的示例。

      在这种情况下,规范示例是与halting problem 决策问题对应的语言:

      HALT = 所有停止的图灵机/输入对

      众所周知,任何图灵机都无法确定性地解决停机问题,因此语言 HALT 不在 R 中。

      但 HALT 显然是在 RE 中。

      我们回忆递归可枚举语言的定义为:

      RE 语言是这样一种语言,即存在一个图灵机,它会在该语言的每个成员上停止并输出是,并且可能永远在非成员上运行

      所以我们只需要一台图灵机来模拟另一台图灵机 (universal Turing machine)。然后该机器将在 HALT 的每个成员上停止,因此 HALT 在 RE 中。

      仅此事实就应该突出 RE 比 R 更难:RE 包含 undecidable problems,为此设计算法是不可能的! R,作为其定义的直接结果,没有。

      非 RE 问题

      查看同时绑定两者的示例也很有帮助:

      规范示例是 HALT 的补充:所有非停止 TM/输入对的语言。

      【讨论】:

        猜你喜欢
        • 2021-09-18
        • 2012-03-16
        • 2018-05-06
        • 2014-04-20
        • 2011-06-28
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        • 2016-01-23
        相关资源
        最近更新 更多