递归和递归可枚举语言之间有什么区别

时间:2015-11-01 20:48:17

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

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

3 个答案:

答案 0 :(得分:6)

R RE 之间存在关联: R RE 的(正确)子集。基本上,递归语言是一个总决策者。

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

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

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

答案 1 :(得分:1)

停机问题是 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/输入对的语言。

答案 2 :(得分:0)

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

当我们使用递归语言时,它总是会被机器是否接受而停止。如果接受,则到达(q accept)并停止。如果机器不接受,它会直接到达(停顿)。