图灵停机问题(The Halting Problem)

不存在这样一个程序(算法),它能够计算任何程序(算法)在给定输入上是否会结束(停机)。


那么,如何来证明这个停机问题呢?
反证!假设我们某一天真做出了这么一个极度聪明的万能算法(就叫God_algo吧),你只要给它一段程序(二进制描述),再给它这段程序的输入,它就能告诉你这段程序在这个输入上会不会结束(停机),我们来编写一下我们的这个算法吧:
bool God_algo(char* program, char* input)
{
    if(<program> halts on <input>)
        return true;
    return false;
}


这里我们假设if的判断语句里面是你天才思考的结晶,它能够像上帝一样洞察一切程序的宿命。现在,我们从这个God_algo出发导出一个新的算法:
bool Satan_algo(char* program)
{
if( God_algo(program, program) )
{
       while(1);        // loop forever!
       return false;   // can never get here!
}
else
       return true;
}
正如它的名字所暗示的那样,这个算法便是一切邪恶的根源了。当我们把这个算法运用到它自身身上时,会发生什么呢?
Satan_algo(Satan_algo);
我们来分析一下这行简单的调用:
显然,Satan_algo(Satan_algo)这个调用要么能够运行结束返回(停机),要么不能返回(loop forever)。
如果它能够结束,那么Santa_algo算法里面的那个if判断就会成立(因为God_algo(Santa_algo,Santa_algo)将会返回true),从而程序便进入那个包含一个无穷循环while(1);的if分支,于是这个Satan_algo(Satan_algo)调用便永远不会返回(结束)了。
如果不能结束(停机),则if判断就会失败,从而选择另一个if分支并返回true,即Satan_algo(Satan_algo)又能够返回(停机)。
总之,我们有:
Satan_algo(Satan_algo)能够停机=> 它不能停机
Satan_algo(Satan_algo)不能停机=> 它能够停机


所以它停也不是,不停也不是,左右矛盾。
  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
图灵机与计算问题 张江(email: [email protected]) 自从20世纪30年代以来,图灵机、计算这些重要的概念在科学的天空中就一直闪烁着无限的光彩。尤其是近年来量子计算机、生物计算机、DNA计算等领域的创新工作引起了世人的广泛关注。我们不禁问这样的问题,国外究竟为什么能发明出这些各式各样的计算机呢?这些意味着什么呢?其实这一切的源头都来源于计算理论。国内在介绍计算理论方面的教材虽然有不少,但一般都比较深奥难懂。所以我觉得很有必要对这些内容进行科普。于是尝试写下这么一篇文章,希望我的文章能够让你更加清楚、透彻的理解图灵机、计算等等一些基本而重要的概念,并洞悉到这些概念的本质和深远涵义。 本篇文章大体上可以分成四部分:首先给大家讲一讲关于图灵、哥德尔等科学家的故事;然后正式引入图灵机的概念,为了对这个概念有比较直观的理解,我采用了一个人工生命:“小虫”的比喻来叙述。接下来,文章介绍了跟图灵机有关的概念:什么是模拟,什么是“万能计算机”等等;最后是关于图灵停机问题的探讨,我个人认为很有可能未来对科学的重大突破都来源于对图灵停机问题的深入理解。在行文过程中,我除了用自己的方式介绍一些现有的基本概念之外(为了尽量表达得清楚明白,我不得不放弃理论论证的严格性),还探讨了很多我认为别人没有探讨的问题,这些问题多是我自己的思考结果,而它们没有经过科学的验证。在这部分内容上我都标上了*号,希望你能有选择的看待这些问题和观点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值