电脑跑代码慢_你的电脑被卡死了吗?

停机问题

用数学走进程序员的生活

逝者如斯夫,不舍昼夜  —— 《子罕》

程序员的一次编码

在以前,由于电脑的性能问题,经常会出现程序不断运行但是不输出结果的情形。有的时候是由于电脑运行过慢,有的时候是电脑内存不够,有的时候单纯是自己写出了死循环。

作为一个程序员,从来不希望自己的代码无止境的运行下去。因为这很可能意味着我们得不到计算的结果,可能代表着服务器的崩塌,可能意味着永远找不到对象。

2dad2aa1620657e1d62fb93584dcfc48.png

最让人头疼的应该是在等待的过程中吧,很可能下一毫秒就能运行出正确结果,但是我们失去了耐心,手欠终止了程序,很可能再也不能正确地写出程序,因为我们会忙着改变这个「错误」的代码。

699ce03b748ab595929dabc293b5bd6f.png

我在上大一的第一门COMP课时,教授是Rocky。他有个程序跑得非常慢,我们都以为他翻车了,结果这时一个macBook Pro完美运行了出来(坚定了我转Apple的决心)。

所以,不只是我,所有的程序员都有一个问题,是否存在一个程序能够检测所有的代码,并在有限的时间内判断出来它会终止,还是会无止境的运行下去。

停机问题

好了,你可能要问这个问题有什么用,很多时候人们用眼睛就能区别那些能无止境运行,那些肯定会终止,比如下面这个程序

初始

判是否大于是则终止,否则执行

让为,然后执行

不需要超凡的才能,就能知道,

  • 若, 那么这个程序将会无休无止地运行下去。

  • 相反,若那么程序在第一次运行到第二步时就会终止。

所以说很多时候人也能通过简单的计算来分别自己是否写了死循环。但是我马上就能让你觉得这个能判断程序是否终止的程序,是一个有重要价值的事情。

数学有一道难题叫哥德巴赫猜想: 任何大于的偶数,都能表示为两个素数的和

0060b4c06e0543d9257c0a85c5fb6158.png

这个程序很容易写出来(欢迎读者订阅本公众号,会教你用计算机语言写个出来)。然后我们用这个判断程序来考察这个哥德巴赫猜想程序。如果说这个程序能终止,那我们就推翻哥德巴赫猜想;要是无止境地运行,我们就能证明哥德巴赫猜想是对的。

还有好多数学界的难题,只要是离散的,我们都可以用这个程序解决。我们可以设计一个人类人口模型,判断人类是否能无止境的存在在这个世界上。随着科技的发展,我们可以输入足够的数据,来设计一个程序考察这个宇宙能否无尽的存活下去。所有的问题我们都可以来这么解决。

b713a76e310aa0be8395193bd3ac0ca4.png

那么我们能设计一个这样的程序吗?那样我们可就是人类的功臣了。

答案是不可能

我可能设计不出来,但我能证明任何人都设计不出来。(A型多巴胺也不行,我说的)

假设我们有一台完美的机器,它有无限大的内存,能表示无穷精度的数,比如下面这个哥们,它可能仅仅存在我们的想象中,但事实上,很多超级计算机,运行速度已经超过了我们的想象,所以这个假设是合理的。这样,我们先排除因为计算机内存问题的终断。dee1edc40bf43f6ee0ed3601d57697a6.png

我们用归谬法,假设存在这样一个程序,然后找到矛盾。

假设这个程序叫

它输入代码段a,还有代码段的环境变量b(换句话说就是程序a的输入)。它能判断 的运行情况,
  • 要是无止尽,就输出无止尽;
  • 要是能停止,就输出终止。

那我们偏偏要搞这个程序的心态。

我们要构造一个程序, 它输入一个数据。然后调用 , 要是

  • 输出无止尽,就立即终止;
  • 输出终止,就执行一个死循环,比如之前那个, 令.

现在我们调用

,也就是把 自己输过去。那么在里边 就会判断, 。也就是 以自己( )作为输入,其结果如何。
  • 要是输出无止境的运行,那么就会立即终止。
  • 要是输出终止,那么就会执行死循环。

是什么意思?意思是程序以代码为输入的运行结果究竟是死循环还是终止。我们看一下这个,正好就是以为输入的过程。然而,的判断和事实背道而驰,所以它不能预测的未来。

因此,这样一个并不能存在。证毕。

总结

这个证明撕碎了我们企图成为人类主宰的梦想。但是也告诉我们,很多时候,人类的想象力是有限的。因为人们对计算能力的思考,天生就被限制在语言的范围。这也侧面证明了

程序员的力量是有限的

踏踏实实工作,才是生活真谛。

你遇到过最惨的电脑问题是什么呢?只要够惨,就快点来分享吧。

关注泡梨C院,更多干货趣闻搞起来熬。

0d0848a005f12651c80510a456bd39a0.png

(图片源于网络,如有侵权,请告知删除)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值