停止问题指出,没有算法可以确定给定程序是否停止。结果,应该存在一些我们无法确定它们是否终止的程序。此类程序最简单(最小)的示例是什么?
停止问题指出,没有算法可以确定给定程序是否停止。结果,应该存在一些我们无法确定它们是否终止的程序。此类程序最简单(最小)的示例是什么?
Answers:
停止问题指出,没有算法可以确定给定程序是否停止。结果,应该存在一些我们无法确定它们是否终止的程序。
“我们”不是算法=)没有通用的算法可以确定给定程序是否为每个程序都暂停。
此类程序最简单(最小)的示例是什么?
考虑以下程序:
n = 3
while true:
if is_perfect(n):
halt()
n = n + 2
函数is_perfect检查n是否为一个完美数。尚不确定是否有奇数个完美数字,因此我们不知道该程序是否暂停。
你写:
停止问题指出,没有算法可以确定给定程序是否停止。结果,应该存在一些我们无法确定它们是否终止的程序。
这是一个双向的非必修课。您屈服于一个值得解决的普遍谬论。
给定任何固定程序,其停止问题(“总是停止吗?”)始终是可确定的,因为答案是“是”或“否”。即使您不知道是哪一种,您也知道两种简单的算法之一总是回答“是”。“否”解决了停止问题。P P
仅当您要求该算法解决所有¹程序的暂停问题时,您才能证明不存在这种算法。
现在,知道停机问题是不可判定并不意味着有任何的程序没有人不能证明终止或循环。即使您没有图灵机强大(这只是一个假设,而没有证明的事实),我们所知道的是,没有哪个算法/人可以为所有程序提供这样的证明。每个程序可能都有不同的人来决定。
其他相关阅读:
因此,您看到您的实际问题(如下重复)与停止问题是否可计算无关。完全没有
什么是[我们不知道要暂停或循环的程序]的最简单(最小)示例?
当然,这些不是很“自然”。
鉴于五状态2符号图灵机无法解决Busy Beaver问题,因此必须有一个图灵机仅具有五个状态并且只有两个符号,当启动空磁带时,这两个图符尚未显示停止或不停止。这是一个非常简短,简洁且封闭的程序。
这个问题很棘手,因为可确定性(CS等效形式化/停止问题的一般化)与语言相关联,因此需要以这种格式进行重铸。似乎并没有指出太多,但是数学/ CS中的许多未解决问题可以很容易地转换为可判定性未知的问题(语言)。这是因为定理证明和(不可)可判定性分析之间的紧密对应。例如(有点像奇数完美答案的其他答案),可以追溯到希腊人(超过两千年前)的双素数猜想,并且受到例如Zhang / Tao等人最近的重大研究进展的影响。将其转换为以下算法问题:
输入:n。输出:是/ 否至少存在n个双素数。
该算法搜索孪生素数,如果找到n个素数则停止。目前尚不知道这种语言是否可判定。解决孪生素数问题(询问是否存在有限或无限数)也将解决该语言的可判定性(如果也被证明/发现了有限数目的话)。
另一个例子,采用黎曼假设并考虑以下语言:
输入:n。输出:Y / N至少存在n个黎曼zeta函数的非平凡零。
该算法搜索非平凡的零(代码不是特别复杂,其类似于求根,并且存在其他相当简单的等价公式,它们基本上计算所有小于x的质数的“奇偶校验”之和),并在出现以下情况时停止它找到n个,并且不知道该语言是否可判定且分辨率“几乎”等于解决黎曼猜想。
现在,一个更加壮观的例子呢?(警告,可能还有更多争议)
输入:c:输出:是/否存在用于SAT 的O(n c)算法。
同样,这种语言的可判定性解决方案几乎等同于P vs NP问题。但是,在这种情况下,不太可能出现“简单”代码的问题。