因为许多真正的实际问题是变相的停顿问题。解决这些问题的方法可以解决暂停问题。
您是否希望编译器为给定程序找到最快的机器代码?实际上是暂停问题。
您拥有JavaScript,其中一些变量处于较高的安全级别,而某些变量处于较低的安全级别。您想确保攻击者无法获得高安全性信息。这也是停顿的问题。
您有用于您的编程语言的解析器。您进行了更改,但是您想确保它仍然解析它以前使用的所有程序。实际上是暂停问题。
您有一个防病毒程序,并且想查看它是否执行了恶意指令。实际上只是停止问题。
对于Wikipedia示例,是的,您可以将现代计算机建模为有限状态机。但这有两个问题。
每台计算机将是不同的自动机,具体取决于RAM的确切位数。因此,这对于检查特定的代码段没有用,因为自动机取决于运行它的机器。
如果您有n位RAM,则需要个状态。因此,对于您的现代8GB计算机,这是2 32000000000。这个数字太大了,以至于Wolfram alpha甚至都不知道如何解释它。当我执行2 10 9时,它说它具有300000000个十进制数字。显然,将其存储在普通计算机中很大。2ñ23200000000021093亿
停止问题使我们可以推理算法的相对难度。它告诉我们,有些算法不存在,有时候,我们只能猜测一个问题,而永远不知道我们是否已经解决了问题。
如果没有停顿的问题,我们仍将寻找希尔伯特的神奇算法,该算法输入定理并输出定理是否成立。现在我们知道我们可以停止寻找,可以将我们的精力放在寻找启发式方法和解决这些问题的第二好的方法上。
更新:只是为了解决评论中提出的几个问题。
@Tyler Fleming Cloutier:“荒谬”的问题源于以下方面的证明:停顿问题是不可确定的,但不可确定性的核心实际上是拥有无限的搜索空间。您正在搜索具有给定属性的对象,如果不存在该对象,则无法知道何时完成。
问题的难度可能与问题的数量有关。为了显示存在()具有任意属性的对象,您必须进行搜索直到找到一个对象。如果不存在,则通常没有办法知道。很难证明所有对象(∀)都具有属性,但是您可以搜索没有该属性的对象来证明它。永久和存在之间的交替越多,问题就越困难。∃∀
有关更多信息,请参见算术层次结构。任何高于是不可判定,虽然电平1是半可判定的。Σ00= Π00
如果不使用诸如停顿问题或骗子悖论之类的荒谬悖论,也有可能表明存在无法确定的问题。图灵机可以使用一串位(即整数)进行编码。但是问题可以编码为一种语言,即整数的子集。众所周知,在整数集和所有整数子集之间没有双射。因此,必须存在一些没有关联的图灵机(算法)的问题(语言)。
@布伦特:是的,这承认这对于现代计算机是可以决定的。但这对于特定的机器是可决定的。如果添加了具有磁盘空间的USB驱动器,或者具有存储在网络中的能力,或其他任何功能,则表明机器已更改,结果仍然不成立。
还必须说,在很多情况下,算法会说“此代码将停止”,因为它会失败并耗尽内存,而增加一点额外的内存会导致代码成功并给出不同的结果。
问题是,图灵机没有无限的内存量。从来没有机会将无数个符号写入磁带。相反,图灵机具有“无限”内存,这意味着您可以在需要时不断获得更多的内存资源。电脑就是这样。您可以添加RAM或USB记忆棒,硬盘驱动器或网络存储。是的,当宇宙中的原子用完时,内存用完了。但是拥有无限的内存是一个更有用的模型。