【问题标题】:Recognition of Undecidable Propositions(infinite loop)不可判定命题的识别(无限循环)
【发布时间】:2015-06-04 21:13:55
【问题描述】:

假设我想找到一个 n+n=3 的自然数 n 为了在计算上解决这个问题,我会运行一个算法:

int n = 1;
while(n+n!=3)
    n++;
System.out.println(n);

当然我们知道这个循环是一个无限循环。但是有没有一种算法可以预测这个循环是无限的还是有限的? (与停机机器相似但不同,因为我想要的算法只检查这个循环,而停机机器可以检查所有循环)如果有,算法是什么?

【问题讨论】:

  • 我已经在我的问题中提到我想要的算法与停止问题相似但不同。请不要指责别人欺骗,如果你无论如何都不回答我的问题。
  • 当我写我的评论时,你的问题看起来完全不同......有可能诱使经验不足的人做出可能令人尴尬的答案。既然你已经提炼了它,我就把它删除了。

标签: halting-problem


【解决方案1】:

在回答所提出的具体问题时(“是否有一种算法可以预测此循环是无限的还是有限的”),该算法只是简单地报告“INFINITE”。

如果您正在寻找更通用的东西(即处理任意源代码),那么有些算法可以处理各种类型的算法/代码。但是很早以前就知道,一般情况下不存在这样的算法。

【讨论】:

  • 你能给我一个简单的例子吗?以防万一,我再次提醒您,我想要的算法是一种特殊的停机机器。当然,我已经知道停机机器不存在。
  • 我做到了:返回“无限”;这就是算法。
【解决方案2】:

当程序运行时,它的状态可以完全由变量“n”的值和要执行的下一个操作(在有限的一组操作中)定义。算法可以逐步模拟该程序的执行,在每一步检查数据和下一个操作是否与前一步的操作相匹配。如果找到匹配项,则算法停止模拟并报告程序没有停止。如果未找到匹配项,则会记录程序的新状态以供将来比较。如果没有进一步的操作要执行,即程序自行运行完毕,则算法报告程序停止。

这个算法当然效率很低,但它展示了一个非常普遍的情况:可以预测特定程序是否停止,当该程序不使用任意大量内存(用于代码和数据)时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2015-08-02
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多