计算机技术已运用到人类生活的方方面面,帮助人类解决各种问题。可你是否有想过,计算机是否能为人类解决所有问题呢?

假如你是一个程序猿,你已编写过很多程序。有些程序一下子就能出结果,有些程序则好久都没有显示结果。你不知道这些程序到底最终是否会显示结果。你突然灵光一现---“能不能设计一个程序,用于检测任意程序最终会停止运行还是会无限运行下去”。这样,你就不用为了得到程序的结果而等很久,有时甚至还无法确定到底是不是程序本身出现了问题,导致程序无限循环。

说干就干,你为这一想法设计的思路如下:

定义一个all_mighty_program,其输入参数是需测试的程序本身和其输入

如果该程序最终停止运行,返回True

如果该程序最终无法停止运行,则返回False

然后你根据此写了一段伪代码(pseudocode):

def all_mighty_program (code, code_input):

    if code (code_input) halts:

        return True

    else:

        return False

那么有没有什么测试程序能使上面的这段伪代码失效呢?为此,你需要进行反证。

首先,需测试的程序有两种可能性:

1,该程序最终会返回某值

2,该程序会无限循环下去

对于第一种可能性:在某个条件下,该程序最终会返回某值,也就是说该程序最终会停止运行。

需要把这个条件设计成与上面的伪代码相反。既然上面的伪代码是测试程序最终停止运行返回True,那么把条件设计成:当上面的伪代码返回False时,测试程序最终会停止。

同样,对于第二种可能性:在某个条件下,该程序会无限循环下去,也就是说该程序最终会无限运行下去。

需要把这个条件设计成与上面的伪代码相反。既然上面的伪代码是测试程序最终无法停止运行返回False,那么把条件设计成:当上面的伪代码返回True时,测试程序最终会无限循环下去。

写成伪代码如下:

def code (code_input):

    if all_mighty_program (code, code_input) is False:

        return True

    else:

        loop forever

由此可以看出,这两段伪代码的逻辑是矛盾的。当all_mighty_program (code, code_input)是False时(也就是code会无限循环下去时),code (code_input)是返回True值的(也就是code最终会停止运行)。

停机问题(Halting Probelm)是决定任意程序最终是会停止运行还是会无限运行下去的问题。

Alan Turing在1963年就证明,没有这样一个通用的算法存在,此算法在所有可能的输入参数下可以解决停机问题。

不可解问题之停机问题(Undecidable Problem Halting Problem)的更多相关文章

  1. The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online -C:Halting Problem(模拟)

    C Halting Problem In computability theory, the halting problem is the problem of determining, from a ...

  2. Halting Problem

    Halting Problem: 传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4049 总结一个小规律:题目中给的 ...

  3. lightoj 1102 - Problem Makes Problem

    1102 - Problem Makes Problem As I am fond of making easier problems, I discovered a problem. Actuall ...

  4. light oj 1102 - Problem Makes Problem组合数学(隔板法)

    1102 - Problem Makes Problem As I am fond of making easier problems, I discovered a problem. Actuall ...

  5. 停机问题(英语:halting problem)是逻辑数学中可计算性理论的一个问题。通俗地说,停机问题就是判断任意一个程序是否能在有限的时间之内结束运行的问题。该问题等价于如下的判定问题:是否存在一个程序P,对于任意输入的程序w,能够判断w会在有限时间内结束或者死循环。

    htps://baike.baidu.com/item/停机问题/4131067?fr=aladdin 理发师悖论:村子里有个理发师,这个理发师有条原则是,对于村里所有人,当且仅当这个人不自己理发,理 ...

  6. (light oj 1102) Problem Makes Problem (组合数 + 乘法逆元)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1102 As I am fond of making easier problems, ...

  7. LightOJ - 1102 - Problem Makes Problem(组合数)

    链接: https://vjudge.net/problem/LightOJ-1102 题意: As I am fond of making easier problems, I discovered ...

  8. P与NP问题详解

    P,NP,NPC问题,这或许是众多OIer最大的误区之一. 本文就为大家详细讲解如上三个问题. 前序: 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题了”之 ...

  9. NP问题/NP完全问题(NP-complete problem)如何判断是否是NP完全问题

    在算法复杂度分析的过程中,人们常常用特定的函数来描述目标算法,随着变量n的增长,时间或者空间消耗的增长曲线,近而进一步分析算法的可行性(有效性). 引入了Big-O,Big-Ω,来描述目标算法的上限. ...

随机推荐

  1. IIS6下使用多域名和通配符证书

    由于SSL协议,在完成握手以前,都只能采用IP地址通信方式,没有办法获取访问地址中的域名信息,所以针对每个IP地址的每个端口,服务器只能返回相同的一张证书.如果要实现多个不同域名共享一个IP地址的缺省 ...

  2. 字符串的查找KMP

    基本思想,当出现不匹配的时候,就知晓一部分文本内容(因为在匹配失败前已经发生匹配) P[0 ~ k-1] == P[j-k ~ j-1] //KMP #include<iostream> ...

  3. 砝码组合(dfs)

    砝码组合  题目内容:用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量.如果只有5个砝码,重量分别是1,3,9,27,81.则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两 ...

  4. kubectl常用命令汇总

    #查看k8s的所有node节点 kubectl get node #查看ns的pod kubectl get pod --all-namespaces -o wide kubectl get pod ...

  5. sql学习内容记录

    1.left函数 left(字段,长度):获取指定字段左侧的数据,类似substring函数 2.union / union all 将多个记录合并成一个完整的数据集 3.insert into se ...

  6. vue router 根据不同的id切换链接界面不刷新

    我们一般使用vue的router时候会根据不同的id来切换界面,但是界面没有立刻刷新.下面我们讲下如何解决这个问题. html: <template> <div id="a ...

  7. Azure系列2.1.4 —— BlobInputStream

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...

  8. word的"bug"

    发表博客发现,从word复制文本到chrome浏览器上的博客时, 如果复制完后立即关闭word,那么将无法粘贴到通过chrome浏览器访问的博客上,也无法粘贴到记事本上: 但是复制完立即关闭word后 ...

  9. 介绍Ajax与jQuery技术

    Ajxs技术(异步的JavaScript与XML)已有多种技术的组合 Ajax的优点是什么? 1.可以实现客户端的异步请求操作2.进而在不需要刷新页面的情况下与服务器进行通信,减少用户的等待时间3.减 ...

  10. playframework 编译打包过程失败

    root@mytest:/data# play war p2p-master --exclude tmp:logs:test:eclipse -o /data/a/sp2p~ _ _ ~ _ __ | ...