巫师2 刺客之王的停机问题

480被浏览78,404分享邀请回答def is_halt(program, input) -& bool:
# 返回 True
如果 program(input) 会返回
# 返回 False 如果 program(input) 不返回
(在这里,我们通过把一个函数作为另一个函数的输入来描述一个「程序」作为另一个「程序」的「输入」,如果你不熟悉「头等函数」的概念,你可以把所有文中的函数对应为一个具备该函数的对象。)为了帮助大家理解这个「停机程序」的功能,我们举个使用它的例子:from halt import is_halt
def loop():
while(True):
# 如果输入是 0,返回,否则无限循环
def foo(input):
if input == 0:
is_halt(foo, 0)
# 返回 True
is_halt(foo, 1)
# 返回 False
是不是很棒?不过,如果这个「停机程序」真的存在,那么我就可以写出这么一个「hack 程序」:from halt import is_halt
def loop():
while(True):
def hack(program):
if is_halt(program, program):
这个程序说,如果你(
判停了,我就无限循环;如果你判它不停,我就立刻返回。那么,如果我们把「hack 程序」同时当做「程序」和「输入」喂给「停机程序」,会怎么样呢?is_halt(hack, hack)
你会发现,如果「停机程序」认为
会给出结果,即
,那么实际上
会进入无限循环。而如果「停机程序」认为
不会给出结果,即
返回 ,那么实际上
会立刻返回结果……这里就出现了矛盾和悖论,所以我们只能认为,我们最开始的假设是错的:这个「停机程序」是不存在的。意义简单的说,「停机问题」说明了现代计算机并不是无所不能的。上面的例子看上去是刻意使用「自我指涉」来进行反证的,但这只是为了证明方便。实际上,现实中与「停机问题」一样是现代计算机「不可解」的问题还有很多,比如所有「判断一个程序是否会在某输入下怎么样?」的算法、Hilbert 第十问题等等,wikipedia 甚至有一个 。漫谈最初图灵提出「停机问题」只是针对「图灵机」本身的,但是其意义可以被推广到所有「算法」、「程序」、「现代计算机」甚至是「量子计算机」。实际上「图灵机」只能接受(纸带上的)字符串,所以在图灵机编程中,无论是「输入」还是另一个「图灵机」,都是通过编码来表示的。「图灵机的计算能力和现代计算机是等价的」,更严谨一些,由于图灵机作为一个假象的计算模型,其储存空间是无限大的,而真实计算机则有硬件限制,所以我们只能说「不存在比图灵机计算能力更强的真实计算机」。这里的「计算能力」(power)指的是「能够计算怎样的问题」(capablity)而非「计算效率」(efficiency),比如我们说「上下文无关文法」比「正则表达式」的「计算能力」强因为它能解决更多的计算问题。「图灵机」作为一种计算模型形式化了「什么是算法」这个问题()。但图灵机并不是唯一的计算模型,其他计算模型包括「」、「
- 」等,它们在计算能力上都是与「图灵机」等价的。因此,我们可以用「图灵机」来证明「」的上界。也因此可以证明哪些计算问题是超出上界的(即不可解的)。需要知道的是,只有「可计算的」才叫做「算法」。「停机问题」响应了「哥德尔的不完备性定理」。拓展阅读:中文:英文:779 条评论分享收藏感谢收起停机问题学习笔记 - 简书
停机问题学习笔记
Turing Machine
前段时间看到 Scott H Young 那篇介绍费曼技巧 [1] 的文章,一下想到了程序员界流传甚广的小黄鸭调试法(Rubber Duck Debugging) [2] 。几天前晚上散步的时候,聊天儿时提起了罗素悖论,让我联想到图灵对停机问题精妙的解法。想拿这个试试费曼技巧,讲到一半发现卡壳了,自己把自己绕了进去。我想到刘未鹏说过的那种状态,学习一个算法,初看觉得太牛逼了,然后花十分钟理解了人家花了十年才想出的成果,再花十天完全忘记,只能想起那个算法十分精妙,该不会的还是不会。所以应该由本溯源地学习数学和算法,并且写一个博客记录下学习的过程。于是这篇就作为费曼技巧和写作学习实践的第一篇。
在计算机科学领域,最广为人知的问题是关于 P 与 NP 问题的讨论,但不论 P 还是 NP,它们只是对解决问题效率的讨论。其实还有一类问题,它们难到计算机永远无法解出,这类问题被称作不可判定问题(Undecidable Problem) [3] ,其中一个可能是最有名的问题就是停机问题。
停机问题提出了这样的疑问:是否存在一个程序,可以判定任何一个程序是否会停止。
要解决这个问题,我们先假设存在一个程序满足上述条件,比如:
int yourBrilliantProgram(char * program, inputType
if (program(input) stops)
else //It loops forever
其中,第一个 if 语句中的判断是人类智慧的结晶,它用了神奇的方法得知了 program(input) 是否停止。
接着我们就要进行破坏了,再来考虑这样一个程序:
int myDisgustingProgram(char * program){
if (yourBrilliantProgram(program, program)){
return 0; //Never reaches here
我的程序专门跟你作对,如果你说这个程序可以正常退出,那么我就作一个死循环;你说它是死循环的,我就正常退出给你返回一个true。
So far so good.
最精彩的地方来了,考虑 yourBrilliantProgram(myDisgustingProgram, myDisgustingProgram) 的返回值。这里有点绕,我们一步一步跟踪。
首先,进入 yourBrilliantProgram 的第一个判断语句,这里执行 myDisgustingProgram(myDisgustingProgram) ,进入 if(yourBrilliantProgram(myDisgustingProgram, myDisgustingProgram)) 这一句。这里可能出现两个结果:
返回 1,说明 myDisgustingProgram(myDisgustingProgram) 正常退出,那么当前程序进入死循环,此时上一层的 yourBrilliantProgram() 应该检测到这个死循环,并返回 0,说明 myDisgustingProgram(myDisgustingProgram) 是个死循环。矛盾。
返回 0,说明 myDisgustingProgram(myDisgustingProgram) 死循环,那么当前程序返回 1 并且正常退出,又证明 myDisgustingProgram(myDisgustingProgram) 不是死循环。矛盾。
也就证明,根本不存在这样的程序可以判定任何一个程序是否停止。
一个热爱计算机,喜欢文学和数学,对政治感兴趣且政治不正确的年轻人。
百战程序员_ Java1573题 QQ群:034603 掌握80%年薪20万掌握50%年薪10万 全程项目穿插, 从易到难,含17个项目视频和资料持续更新,请关注www.itbaizhan.com 国内最牛七星级团队马士兵、高淇等11位十年开发经验专...
来源 https://zhuanlan.zhihu.com/p/ 给深度学习入门者的Python快速教程 - numpy和Matplotlib篇 的番外篇,因为严格来说不是在讲Python而是讲在Python下使用OpenCV。本篇将介绍和深度学习数据处理阶...
NP完全性 P类问题及时在多项式时间内可以解决的问题。对于规模为n的输入,最坏的情况下的运行时间为O(n^k) NP类问题就是指那些可以在多项式时间内可以被证明的问题(能在多项式时间验证答案正确与否的问题)。 简单来说,P是否等于NP实质上就是在问,如果对于一个问题我能在多...
最完整TICK数据0错误回测方法 1.准备2个工具软件:TickDownloader和Tickstory 下载地址:http://www.strategyquant.com/tickdownloader/
https://tickstory.com/ 2....
函数注释快捷键 command + option + / 未完待续
出差5天四夜了,和帅哥的联络很少.没有问候,没有一天一电话,没有微信.这是我现在的常态. 第二天写原创,脑袋里出现这五个字.就写写我和你.一个拥抱,一个亲吻,一桌丰盛的煮菜,是我幸福开心的时刻.20年的感情,20年的时间,20年的守护.在你的呵护下,以经来到了新的一个次...
【一】 朋友圈看到一个熟悉的头像点赞,不复往常,我平静地放下了手机。 时经一季,我重新拾起了这件事,三个月前,我想我很久很久都跨不过这道坎了,甚至都不敢认真地去思考这件事。 事情突如其来,当时我来不及停下脚步,就已经仓促转过身去,不愿多说一句,不愿回看一眼。 一星期后,我忙...
冥想是一种改变意识的形式,它通过获得深度的宁静状态而增强自我知识和良好状态,在竞争异常残酷的社会环境下,常常因忙碌导致睡眠质量低下,引起精力不足,从而引起一种状态不佳的恶性循环。 《冥想五分钟等于熟睡一小时》这本书中介绍了关于恢复精力的方法,分别从冥想的好处,适合冥想的场景...如何通俗地解释停机问题(HaltingProblem)?- 百度派
{{ mainData.uname }}
:{{ mainData.content }}
{{ prevData.uname }}
:{{ prevData.content }}
{{ mainData.uname }}
:{{ mainData.content }}
0 || contentType !== 1" class="separate-line">
:{{ item.content }}
如何通俗地解释停机问题(HaltingProblem)?
问题说明(可选):
扫一扫分享到微信
有幸受邀,坐卧不宁。停机题目形貌起来还是很大略的:正如@陳浩所引,题目是对付某步伐P,给出某输入I,求解此步伐P是否会到达停止状态。停机题目无解的证明也是很大略的,稍受过训练的人就该想到,这内里...
&&&&有幸受邀,坐卧不宁。&&&&停机题目形貌起来还是很大略的:正如@陳浩所引,题目是对付某步伐P,给出某输入I,求解此步伐P是否会到达停止状态。&&&&停机题目无解的证明也是很大略的,稍受过训练的人就该想到,这内里存在“自指”题目。证明便是布局反例即可:要是存在一个果断停机题目的步伐H(H必要的输入是一个步伐),你和我再布局一个新的步伐K,这个步伐调用H但是与H的输出恰好相反:要是K的输入经H果断为停机,则K不绝机;要是K的输入经H果断为不绝机,则K停机。如今抵牾出现了:要是你和我把K输入K(即用H果断对付步伐K,给出输入为K),那么K停机么?要是按逻辑推演,答案应该是:要是K不绝机则K停机;要是K停机则K不绝机。抵牾出现了。唯一办理抵牾的表明是:不存在如许全能的H。&&&&停机题目和撒谎者悖论/理发师悖论是一脉相承的,撒谎者/理发师悖论归根结底是定义了一个聚集S={a|aisnotina}。补上这个弊端的唯一要领是拒绝聚集的自指。同样停机题目也阐明白,不存在一个鉴定统统步伐的步伐,由于这个步伐本身也是步伐。&&&&大概会有人遐想到哥德尔不完备性定理,哥德尔不完备性定理是很巨大的题目,我不敢说太多。但是我个人私家以为停机题目和哥德尔不完备定理是本质雷同的。哥德尔不完备定理的核心是:包括“可数无穷”见解的公理体系内里存在不克不及证真也不克不及证伪的命题,证明也黑白常雷同地布局了一个“声称不可自证”的命题,然后问这个命题本身是否可自证。&&&&停机题目的“实际”意义是阐明白步伐不是无所不克不及的,说实话这不算多大的意义,由于正凡人都不会以为编程全能(画外音:去世程救济天下!)。要是说它在数学上的理论意义,个人私家以为停机题目不存在逾越聚集论内容的意义。要是然有人想较真停机题目(画外音:去世宅救济天下!!!),请先从聚集论学起。&&&&即日就寝不敷,临键盘乱按,不知所言:-)
扫一扫分享到微信
如何通俗地解释停机问题(HaltingProblem)?
,才能进行回答
一个问题只能回答一次,请&nbsp点击此处&nbsp查看你的答案
1人关注了此问题如何通俗地解释停机问题(Halting Problem)?
我的图书馆
如何通俗地解释停机问题(Halting Problem)?
本人和编程都不是太好。
【的回答(22票)】
感谢邀请。通俗地说,图灵当年想要证明希尔伯特的可判定性问题,也就是说,是否存在一种通用的机械过程,能够判定任何数学命题的真假。于是图灵就设计了一种假想的机器,也就是图灵机。他首先证明,图灵机就覆盖了所有的“机械过程”,如果存在一个问题,图灵机判定不了,那么就说明,不存在这种“通用的”过程,这样就证明了原问题。
然后,图灵就设计了一个问题,确实是图灵机判定不了的,这个问题就是:对于一个输入,让图灵机判定自己是否能够在有限的时间内停下来。
图灵证明,这个问题是图灵机回答不了的,所以原问题得以证否。至此,希尔伯特的三大问题,全部得到了证否(前两个是由哥德尔证否的)。因为这个问题设计得非常巧妙,所以在历史上留下了名字,叫“”。
顺便说一下,图灵当时设计这个图灵机,完全只是为了辅助他证明这个问题而已,这个机器是假想的,不存在的,就像画一条辅助线。可是后来他又发现,虽然这个机器不能解决所有的问题,但确实能够解决很多问题,而且真的是可以造出来的。于是……
图灵就成为了“科学之父”。
【paradisor的回答(8票)】
有幸受邀,诚惶诚恐。
停机问题描述起来还是很简单的:正如@陳浩 所引,问题是对于某P,给出某输入I,求解此程序P是否会到达终止状态。
停机问题无解的证明也是很简单的,稍受过训练的人就该想到,这里面存在“自指”问题。证明就是构造反例即可:如果存在一个判断停机问题的程序H(H需要的输入是一个程序),我们再构造一个新的程序K,这个程序调用H但是与H的输出正好相反:如果K的输入经H判断为停机,则K不停机;如果K的输入经H判断为不停机,则K停机。现在矛盾出现了:如果我们把K输入K(即用H判断对于程序K,给出输入为K),那么K停机么?如果按逻辑推演,答案应该是:如果K不停机则K停机;如果K停机则K不停机。矛盾出现了。唯一解决矛盾的解释是:不存在这样万能的H。
停机问题和说谎者悖论/理发师悖论是一脉相承的,说谎者/理发师悖论归根结底是定义了一个集合S={a|a is not in a}。补上这个漏洞的唯一方法是拒绝集合的自指。同样停机问题也说明了,不存在一个判定一切程序的程序,因为这个程序本身也是程序。
可能会有人联想到哥德尔不完备性定理,哥德尔不完备性定理是很复杂的问题,我不敢说太多。但是我个人认为停机问题和哥德尔不完备定理是本质类似的。哥德尔不完备定理的核心是:包含“可数无穷”概念的公理系统里面存在不能证真也不能证伪的命题,证明也是非常类似地构造了一个“声称不可自证”的命题,然后问这个命题本身是否可自证。
停机问题的“现实”意义是说明了程序不是无所不能的,说实话这不算多大的意义,因为正常人都不会觉得编程万能(画外音:死程拯救世界!)。如果说它在数学上的理论意义,个人认为停机问题不存在超越集合论内容的意义。如果真有人想较真停机问题(画外音:死宅拯救世界!!!),请先从集合论学起。
近日睡眠不足,临键盘乱按,不知所言:-)
【谢然的回答(1票)】
关于此问题,请看Matrix67大牛的文章
看完你一定会理解的
馆藏&70386
TA的推荐TA的最新馆藏
喜欢该文的人也喜欢手机停机问题_百度知道
手机停机问题
本人有个深圳的移动号码不知什么原因突然被停机了,在停机的前两天我还交了50元,停机后又交了80元,可还是停机,本人一般只在公交车上才使用一下流量,照道理应该不会欠费那么多的,这个号码已用了很多年,之前也没有发生过这样的情况。而且以前快欠费之前都...
我有更好的答案
用其他手机号码打通客服查查,电信联通的手机号也是可以打客服的,只是会收费。
问题上说的很清楚了,我就是用其他的手机号码打通客服的,客服要我的服务密码。
采纳率:66%
你应改是下啥软件啦,你刚进软件的时候应该有个获取短信,就像你玩王者荣耀,或者是打开腾讯视频,都有一个获取地理位置,软件直接发短信扣钱
移动现在就是有点怪
我的移动号用了十一年了
移动把资费给我改了
我都不知道什么时候改的
我也不在归属地,只好下载了一个10086APP自己暂时改了一个最小的资费
是的,我也碰到过这样情况,垄断行业就这个样子。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 巫师2 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信