图灵停机问题(The Halting Problem)------巧妙的证明
转自: https://blog.csdn.net/niushuai666/article/details/7260957
不存在这样一个程序(算法),它能够计算任何程序(算法)在给定输入上是否会结束(停机)。
那么,如何来证明这个停机问题呢?
反证!假设我们某一天真做出了这么一个极度聪明的万能算法(就叫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)不能停机=> 它能够停机
所以它停也不是,不停也不是,左右矛盾。
图灵停机问题(The Halting Problem)------巧妙的证明相关推荐
- 停机问题--The Halting Problem
http://www.juniata.edu/faculty/rhodes/intro/theory2.htm 看停机问题时,觉得它跟我国的"以子之矛攻子之盾"的想法很相似 也跟C ...
- 图灵停机问题(The Halting Problem)
不存在这样一个程序(算法),它能够计算任何程序(算法)在给定输入上是否会结束(停机). 那么,如何来证明这个停机问题呢? 反证!假设我们某一天真做出了这么一个极度聪明的万能算法(就叫God_algo吧 ...
- ZOJ - 4049 Halting Problem 题解【c++】
题目如下: In computability theory, the halting problem is the problem of determining, from a description ...
- The halting problem
转自: http://www.matrix67.com/blog/article.asp?id=62 不可解问题(Undecidable Decision Problem)指的是这样一种问题:他无论如 ...
- halting problem 详解
在讲解halting problem 问题之前,我们先来看一张图和一个小故事 图片: 图片来自网络,如有侵权请联系删除 故事: 理发师悖论: 在一个村子里只有有一个理发师,他说他只给不给自己理发的 ...
- Halting Problem的讨论
有关于Halting Problem的一点点讨论 Halting Problem with no input: Halting Problem with no input: Show that giv ...
- 图灵停机问题的史上最详细描述
图灵停机问题 停机问题就是判断任意一个程序是否能在有限的时间之内结束运行的问题. 等价于是否存在一个程序H,对于任意输入的程序P,能够判断P会在有限时间内结束或者死循环. 假设存在这样的一个函数H来判 ...
- 罗素悖论-图灵停机问题
百度百科 罗素悖论的表达形式为S={x|x∉S} 那么问题来了,x到底是否∈S? 这玩意还引发了第三次数学危机,解决方案是著名的"图灵停机问题" 百度百科:停机问题是目前逻辑学的焦 ...
- C Halting Problem
题目链接 C Halting Problem In computability theory, the halting problem is the problem of determining, f ...
最新文章
- CPU对指令长度的判断
- Java多态性Polymorphic
- Lead time 在ERP 中怎么填
- 工人物语5战役攻略_《工人物语7》入门详细图文攻略
- 轻松学习分布式|系列3|分布式数据库。
- springboot接收json参数_Springboot + Vue + shiro 实现前后端分离、权限控制
- 如何把Access转成SQL Server的方法介绍
- 前置++与后置++之一道简单的题目引发的思考
- cocos2d-x for xna创建动画-人物行走
- #leetcode刷题之路27-移除元素
- Atitit 返回http500返回码,以及自定义返回提示 目录 1. 可以看到从php发送http响应代码的三种方法:	1 1.1. Header(HTTP/1.1 404 Not Found
- vuex的购物车效果 index.js
- 神经体液调节网络,神经网络能干嘛
- 2022-2027年中国重卡行业市场深度分析及投资战略规划报告
- linux文件内容乱码怎么解决,window到linux文件名乱码和文件内容乱码解决总结
- cubemx+stm32f407+双Can通信
- 一个网站SEO优化主管必须具备的能力
- java结账_java 基础程序之商场结账管理
- Appuploader的安装介绍
- Ajax中的<form>标签
热门文章
- JavaScript实现九九乘法表四种方法(附代码)
- 笔记本电脑升级后无法用拓展坞供电,提示显示器连接可能受限。
- java静态分页_关于新闻列表静态化分页问题
- 保姆式做启动盘,装win10专业系统,系统盘机械盘分区,下载网卡、主板等驱动
- signature=959e598d2ffb94a32cc0a92ca6d43637,Modelling digital thunder
- 数车计算机编程教学caxa,CAXA数车加工流程
- 基于Teager-Kaiser能量算子和深度置信网络的往复式压缩机阀门故障诊断方法
- python 判断手机号码和正整数
- 封装原声ajax,原生AJAX封装的简单实现
- i5四核八线程怎么样_8代酷睿首测 4核8线程!i5 8250U移动CPU