📜  计算理论中的可判定和不可判定问题

📅  最后修改于: 2021-09-27 15:02:38             🧑  作者: Mango

先决条件——图灵机

如果我们总能构造出一个可以正确回答问题的相应算法,则称该问题是可判定的。通过考虑一个简单的例子,我们可以直观地理解可判定问题。假设我们被要求计算 1000 到 2000 范围内的所有素数。为了找到这个问题的解决方案,我们可以很容易地设计一个算法,可以枚举这个范围内的所有素数。

现在谈论图灵机的可判定性,如果存在相应的图灵机,它会在每个输入时停止并给出答案 – 是或否,那么这个问题就被称为可判定问题。同样重要的是要知道这些问题被称为图灵可判定问题,因为图灵机总是在每次输入时停止,接受或拒绝它。

半可判定问题——
半可判定问题是那些图灵机在它接受的输入上停止但它可以在被图灵机拒绝的输入上停止或永远循环的问题。这样的问题被称为图灵可识别问题。

示例 –我们现在将考虑几个重要的可判定问题

  • 两种常规语言 L 和 M 是等价的吗?
    我们可以使用 Set Difference 操作轻松检查这一点。
    LM = 空且 ML = 空。
    因此 (LM) U (ML) = Null,则 L,M 是等价的。
  • CFL 的会员资格?
    通过使用基于动态规划的算法,我们总是可以找到给定的 CFL 中是否存在字符串。
  • CFL 的空虚
    通过检查 CFL 的产生规则,我们可以很容易地判断该语言是否生成任何字符串。

无法解决的问题——
对于我们无法构建可以在有限时间内正确回答问题的算法的问题,称为不可判定问题。这些问题可能是部分可判定的,但它们永远是不可判定的。那就是总有一个条件会导致图灵机进入无限循环,而根本不提供答案。

我们可以通过考虑费马定理来直观地理解不可判定问题,这是一个流行的不可判定问题,它指出任何 n>2 的三个正整数 a、b 和 c 都不能满足等式:a^n + b^n = c^n。

如果我们将此问题提供给图灵机以找到产生矛盾的解决方案,那么图灵机可能会永远运行,以找到合适的 n、a、b 和 c 值。但是我们总是不确定是否存在矛盾,因此我们将这个问题称为不可判定问题

示例 –这些是一些重要的无法解决的问题

  • CFG 是否生成所有字符串?
    由于 CFG 生成无限字符串,我们永远无法到达最后一个字符串,因此它是不可判定的。
  • 两个CFG L和M是否相等?
    由于我们无法确定任何 CFG 的所有字符串,因此我们可以预测两个 CFG 是否相等。
  • CFG的歧义?
    不存在可以检查是否存在 CFL 歧义的算法。我们只能检查 CFL 的任何特定字符串是否生成两个不同的解析树,那么 CFL 是不明确的。
  • 是否可以将给定的模糊 CFG 转换为相应的非模糊 CFL?
    这也是一个不可判定的问题,因为不存在将模糊 CFL 转换为非模糊 CFL 的任何算法。
  • CFL 语言学习是常规的吗?
    这是一个不可判定的问题,因为我们无法从 CFL 的产生规则中发现它是否是规则的。

一些与图灵机相关的更多不可判定问题

  • 图灵机的成员问题?
  • 图灵机的有限性?
  • 图灵机的性?
  • 图灵机接受的语言是正则还是CFL?

阅读下一篇文章——可判定性、不可判定性和可还原性