以下文章来源于中科院物理所,作者Cloudiiink
回忆起童年和青春,眼前总是浮现出一片碧蓝碧蓝的天空和嫩得出水的草地,以及以前在那上面和小伙伴们度过的愉快的时光……当然,你们别想错了,我说的蓝天和草地是指这个。
为了防止被打,小编选择提前爆头蹲防。Windows XP 确实承载很多的记忆,而且 XP 这个系统也是真的经用。
Windows XP 于 2001 年 8 月 24 日正式发布,微软在 2014 年 4 月 8 日才停止了对 Windows XP 桌面版系统的支持服务,一直到这周二,2019 年 4 月 9 号,运行在嵌入式设备上的最后的一批 Windows XP 才失去微软的官方支持。XP 们终于正式对我们 say goodbye 了。
提起 XP,不得不说操作系统自带的诸如扫雷、纸牌这一类的经典游戏真的经典,好玩又杀时间。如果可以统计全人类花在这上面的时间,估计肯定是一个天文数字。不过尽管扫雷大家玩的时间很长,玩的次数也很多,但是我猜 99% 的玩家肯定没思考过,自己玩扫雷为啥那么容易就死了。
其实吧,扫雷这个游戏很多科学家也爱玩。不过一般人玩扫雷如果死得快,就不断重开重开重开,直到碰到一个好的开局(然后又快速地死掉)。科学家就不一样,如果他们玩扫雷死得快,他们会直接证明“这个游戏通关概率为 0”。扫雷毕竟已经有这么长的历史了,分析扫雷游戏求解概率的论文都有一大堆。
作为一个熟练点击扫雷重开键的手残扫雷玩家,今天我就来和大家系统地聊一聊扫雷的背后的故事。
从数学上来看,扫雷就相当于一个不断给你已知条件不断求解的过程,就像一个不断增加条件的应用题。你可以通过左键点开确定不是雷的块,右键标记你认为是雷的区域。如果你点开的这一块不是雷,那么它会告诉你这块区域周围八格内有几颗雷。只要你点得足够快,雷就追不上你。
通过很简单的反证法,我们可以推出来很大一部分雷所在的位置。所谓反证法,就是反过来想这个问题。如果存在这么一个向内凹的角,内部的都是空白,但是角落上是一个 1,那么这个角上一定会有一颗雷。因为如果这个地方再不是雷的话,那中间的 1 所指的雷就只能去流浪了。同理,一条边上如果有 3 的话,那和 3 挨着的这三个一定是雷。毕竟地雷兄弟们也不能挤一挤挪到一个格子上去。
除了这个反证法以外,在扫雷里还有很多固定的“套路”。学会这个套路,保证你扫雷功力大增,杀进小区扫雷五百强。
在扫雷的时候其实经常会遇到一些固定的数字,比如三个连续的数字为 121,此时想都不用想,就可以直接在 121 两个 1 的正对方向标上雷。或者四个连续的数字 1221,此时两个 2 的正对方向上也一定是雷。
有些人可能会有问题。比如遇上 121221,按照秘籍填雷的话中间那个 1 附近有两颗雷诶?但这种情况是不可能的!左边数起三个 1 已经覆盖了上面的所有未知空格,所以地雷数至多只有 3 个。但下方显示地雷数为 1+2+2+1+2+1,在只有中间 5 个格子重复计数的情况下都到了 7,大于 3 的 2 倍。所以这种图形是不可能存在的!
咳咳,把思路收回来,如上所述,扫雷确实是有一些套路的。每日熟读此扫雷秘籍,假以时日,扫雷技艺必将大成。
玩扫雷,你必须要接受,这是一款拼人品的游戏。虽然人生已经如此地艰难,但我还是要无情地拆穿这一点。想必你此时已经熟练掌握了扫雷的套路,不过在有些时候你还是要面对猜雷这种事情,而且一招不慎,满盘皆输。
假设在我们的扫雷过程中遇到了这么一个图案,确实是一件欲哭无泪的事情。不知道怎么哭的可以先把眼泪准备好,马上就告诉你们为啥要哭。从左边开始,假设第一个空位有雷,那么第二个空位没有雷,因为空位中间 1 的存在从而第三个空位有雷,依次类推。但是如果是第一个空位没有雷,而第二个空位有雷,我们也说得通。都要踩地雷了,还整个这么复杂的难题,至于么。
然而很遗憾的是,一般情况下,计算机目前对扫雷这个问题还是无能为力。稍微值得庆幸的是,在我们平时玩的比较小的棋盘下,计算机还可以通过搜索得到答案。为了了解计算机处理问题难度的几个级别,有必要先知道一个概念——多项式时间。
对于同一个算法,根据处理问题大小的不同,计算机一般来说需要不同的时间进行计算。评价一个算法,随着问题规模的增大,计算时间怎么增长是一个十分重要的指标。扫雷游戏属于一个如此困难的问题,其原因就出在上一章提到的,可以把扫雷游戏看做一个个逻辑门进行运算的逻辑电路。给定一个逻辑电路,在已知输出结果的情况下,能否确定每个输入的值?这个问题被称为 SAT 问题,是世界上第一个被证明其为 NP 完全的问题。
其实我们在玩扫雷游戏的时候觉得很难,其实还有另外一个原因。这个原因和物理里面的渗透还有关系。当一盘游戏里面的地雷密度特别低的时候,我们差不多随便点,都不会点到地雷,而是点到大片大片的空白,一下子就把问题解决了。但是当地雷密度增高以后,在增大到一定程度以后,即使我们理性地分析,从不瞎猜,也不可能把扫雷问题做对了。
随着网格的不断增大,这条胜率曲线中间部分也变得越来越陡峭,扫雷问题越来越向两个极端发展:要不就根本解不出来,要不就是很容易地就能解出来。相信看到这里的人一定已经跃跃欲试想要玩一下扫雷了,我相信你们天下无难事,只要肯放弃卸载也行。