有时,小编回忆起童年和青春,眼前总是浮现出一片碧蓝碧蓝的天空和嫩得出水的草地,以及以前在那上面和小伙伴们度过的愉快的时光……
当然,你们别想错了
我说的蓝天和草地是指这个
为了防止被打小编选择提前爆头蹲防
WindowsXP确实承载很多的记忆,而且XP这个系统也是真的经用。WindowsXP于2001年8月24日正式发布,微软在2014 年 4 月 8 日才停止了对 Windows XP 桌面版系统的支持服务,一直到这周二,2019 年 4 月 9 号,运行在嵌入式设备上的最后的一批WindowsXP才失去微软的官方支持。XP们终于正式对我们saygoodbye了。[1]
经典的扫雷游戏
提起 XP,不得不说操作系统自带的诸如扫雷,纸牌这一类的经典游戏真的经典,好玩又杀时间。如果可以统计全人类花在这上面的时间,估计肯定是一个天文数字。。。不过尽管扫雷大家玩的时间很长,玩的次数也很多,但是我猜99%的玩家肯定没思考过,自己玩扫雷为啥那么容易就死了。。。
对比一下别人家的孩子玩扫雷的速度
图片经过加速。如果你想看真正目前世界上扫雷最快的记录的话,可以去[2]围观
再看看自己玩扫雷的样子...
差不多就是这种水平,刚点到扫雷图标雷就已经炸了
虽然XP已经离我们而去,但是万幸的是Win10系统还能够在商店中直接搜索「minesweeper」下载官方重置了的扫雷游戏,重新体会以前的经典。
其实吧,扫雷这个游戏很多科学家也爱玩。不过一般人玩扫雷如果死得快,就不断重开重开重开直到碰到一个好的开局(然后又快速地死掉)。科学家就不一样,如果他们玩扫雷死得快,他们不会重开,他们会直接证明「这个游戏通关概率为 0」。
扫雷毕竟已经有这么长的历史了,分析扫雷游戏求解概率的论文都有一大堆。作为一个熟练点击扫雷重开键的手残扫雷玩家,今天我就来和大家系统地聊一聊扫雷的背后的故事。
扫雷秘籍
Minesweeping cheat sheet
天下武功,无坚不摧,唯快不破!
从数学上来看,扫雷就相当于一个不断给你已知条件不断求解的过程,就像一个不断增加条件的应用题。你可以通过左键点开确定不是雷的块,右键标记你认为是雷的区域。如果你点开的这一块不是雷,那么它会告诉你这块区域周围八格内有几颗雷。只要你点得足够快,雷就追不上你。
通过很简单的反证法,我们可以推出来很大一部分雷所在的位置。[3]
角落上的情形
所谓反证法,就是反过来想这个问题。如果存在这么一个向内凹的角,内部的都是空白,但是角落上是一个1,那么这个角上一定会有一颗雷。因为如果这个地方再不是雷的话,那中间的1所指的雷就只能去流浪了。。。同理,一条边上如果有3的话,九宫格扫雷技巧图解,那和3挨着的这三个一定是雷。毕竟地雷兄弟们也不能挤一挤挪到一个格子上去。,
位于边界时候的情形
除了这个反证法以外,在扫雷里还有很多固定的「套路」。学会这个套路,保证你扫雷功力大增,杀进小区扫雷五百强。
听起来好像很厉害的样子
在扫雷的时候其实经常会遇到一些固定的数字,比如三个连续的数字为 121,此时想都不用想,就可以直接在 121 两个 1 的正对方向标上雷。或者四个连续的数字1221,此时两个 2 的正对方向上也一定是雷。
121情形下,由于左侧1的限制,在黄色区域内只能有一格雷,但是中间的2至少要求2格雷,所以粉色的那颗一定是雷。同理证明另外一侧
1221情形下,和上面证明过程相同,由于1的限制导致在黄色区域内只能有1格雷,所以另一个2正对的方格一定是雷。
「小编小编,我有个问题,那121221呢?按照秘籍填雷的话中间那个1附近有两颗雷诶?」
似乎有问题的秘籍?
「这种情况是不可能的!左边数起三个1已经覆盖了上面的所有未知空格,所以地雷数至多只有3个。但下方显示地雷数为1+2+2+1+2+1,在只有中间5个格子重复计数的情况下都到了7,大于3的2倍。所以这种图形是不可能存在的!」
咳咳,把思路收回来,如上所述,扫雷确实是有一些套路的。每日熟读此扫雷秘籍,假以时日,扫雷技艺必将大成。
扫雷还是运气活
Lucky or not,it's a question
玩扫雷,你必须要接受,这是一款拼人品的游戏。
猜猜黄色部分的雷应该是怎么分布的?
图中黄色部分就是典型的需要猜的扫雷难题。根据角落里面的数字,我们都只能知道 1×2 的黄色部分里面一定只有一个雷,不过我们并不知道哪个才是雷。如果没有其它信息的话,我们辛辛苦苦大半个棋盘,最后通过这个地雷阵的概率还是只有1/8。
这种简单的判断还好,有些时候还会遇到一些藏得更加隐晦的猜的时候。
扫雷判断题
假设在我们的扫雷过程中遇到了这么一个图案,确实是一件欲哭无泪的事情。不知道怎么哭的可以先把眼泪准备好,小编马上就告诉你们为啥要哭。。。从左边开始,假设第一个空位有雷,那么第二个空位没有雷,因为空位中间1的存在从而第三个空位有雷,依次类推。但是如果是第一个空位没有雷,而第二个空位有雷,我们也说得通。都要踩地雷了,还整个这么复杂的难题,至于么。。。
别急,后面还有更加复杂的。这里的x和之后的*号上是否有雷的情况一直相同,所以这个地雷阵就像一根传递信号的导线一样。在扫雷的地图上,我们不仅仅能够做出这种简单的传递信号的导线,其实还能够实现所有的电子电路中的逻辑门的操作。[4,5]
非门电路
玩扫雷可以打开扫雷,随机点击一块方格,出现1、2、3、4、5、6等多个数字,点击鼠标右键把雷标志起来,具体办法如下:1、打开扫雷,新手的话可以先从中级或初级难度开始玩。2、第一次随机点击一块方格,正常系统不会让你。
或门电路
红石计算机,具有完整的寄存器,加法器等部件 [6]
算了,我已经不敢想象扫雷会变成什么样了。。。
判断有没有解都是一件很难的事情
Find solution
回到文章最开始,我们人去破解一个扫雷问题的话,很容易就会死掉了,那把这个问题交给计算机来做会怎么样?然而很遗憾的是,一般情况下,计算机目前对扫雷这个问题还是无能为力。。。
游戏的基本操作包括左键单击(LeftClick)、右键单击(RightClick)、双击(Chording)三种。..其中左键用于打开安全的格子,推进游戏进度。.右键用于标记地雷,以辅助判断,或为接下来的双击做准备;双击在一个数字周围的地雷。
难过
稍微值得庆幸的是,在我们平时玩的比较小的棋盘下,计算机还可以通过搜索得到答案。
为了了解计算机处理问题难度的几个级别,有必要先知道一个概念——多项式时间。对于同一个算法,根据处理问题大小的不同,计算机一般来说需要不同的时间进行计算。用最直观的例子来说,小明要去洗衣服,他洗 1 件衣服的时间为 2 分钟,洗 5 件衣服的时间为 10 分钟,洗 10 件衣服的时间为 20 分钟,处理问题的时间随问题规模的变化为线性关系,一次多项式。现在我们假设小明还是要洗衣服,只不过现在的衣服比较特殊,他洗1件这种衣服的时间为2分钟,但洗5件的时间变为32分钟,洗10件的时间变为1024分钟,这个时候就是指数关系的,而不再是多项式了。评价一个算法,随着问题规模的增大,计算时间怎么增长是一个十分重要的指标。
很不幸,求解一个扫雷游戏的解,正好是一个NP完全问题——在能够轻松验证结果是否正确的问题里面最难的那一类。这一类问题目前为止人们还没有发现多项式时间的求解算法,通常只有指数级甚至阶乘级的搜索算法来解决。
用来显示液晶数字的逻辑电路。我们可以很方便地一个一个试,但是反过来却很难,尤其是在这个逻辑电路非常庞大的时候
求解扫雷游戏的结果,利用那些构造的逻辑门,恰恰等价于求解SAT问题。[9]
扫雷还和渗透有关系
Precolation
液体,图片来自 Giphy,Michael Shillingburg
其实我们在玩扫雷游戏的时候觉得很难,其实还有另外一个原因。这个原因和物理里面的渗透还有关系。
在上个世纪 60 年代,科学家们 [10] 发现在流体流过多孔的介质的时候,介质中的空洞总是会被堵塞,有时候就会影响流体流出。更为奇怪的是,当这些多孔的介质的孔隙被随机堵塞的比例逐渐增大而达到某一值时,一开始一直能够流动的流体就突然被完全堵住。在孔洞被随机堵住的概率发生变化时,液体流过的比率也会发生一个突变。
这种现象被称为逾渗(precolation)。[11]
遇到这种情况,你该怎么下手
针对不同的棋盘大小,有人计算了在不同地雷密度情况下获胜的概率。三角形对应的曲线为初级8×8,正方形为15×13,菱形为高级,30×16。这里的能否求解实际上不包括第一次随机点击的时候踩中雷的概率。[12]
我们把流体通过多孔介质逾渗的模型抽象出来的话,其实对应着点逾渗,也就是把整个介质想象成一个网络,流体在经过每个网格时,有概率p的可能通过。如果不能流过的网格在网络中连成了片,流体就不能流过了。
推土机,图片来自网络
随着网格的不断增大,这条胜率曲线中间部分也变得越来越陡峭,扫雷问题越来越向两个极端发展:要不就根本解不出来,要不就是很容易地就能解出来。在高级模式下,地雷的密度其实已经到了99/480=0.2,能够解出来的概率已经不到1/4,这还不算手抖了点错了,开局不好重开之类的情况,真的不算是友好了。
结 论
Conclusion
emoji 版本扫雷 [14]
相信看到这里的人
一定已经跃跃欲试想要玩一下扫雷了
扫雷玩法如下:扫雷主要需要借鉴边上的数字,扫雷边上的数字代表其周围3×3区域中的地雷数。在判断出不是雷的方块上按下左键,可以打开该方块。如果方块上出现数字,则该数字表示其周围3×3区域中的地雷数,一般为8个格子。
我相信你们
天下无难事,只要肯放弃
卸载也行
* 封面图修改自周星驰电影《功夫》
[1]最后的 Windows XP 退役
[2] Minesweeper Game World Ranking
[3] 更详细的扫雷教程可以点击阅读 Strategy - MinesweeperWiki,对更具体的细节感兴趣的,可以阅读 扫雷游戏有些什么技巧吗?-张砷镓的回答-知乎
[4]Minesweeper and logical circuits
[5]要成为扫雷高手,先练好逻辑吧 - Albert_JIAO,果壳
[6]Quad-Core Redstone Computer - YouTube
[7]什么是P问题、NP问题和NPC问题,以及怎么理解P问题和NP问题?-知乎
[8]布尔可满足性条件 - 维基百科
[9]Circuits,Minesweeper,and NP Completeness - Richard Carini
[10]SRBroadbentandJMHammersly,Percolationprocesses.ProceedingsoftheCambridgePhilosophical,1957,53:629-641.
[11]Percolation - wikipedia
游戏的基本操作包括左键单击(LeftClick)、右键单击(RightClick)、双击(Chording)三种。..其中左键用于打开安全的格子,推进游戏进度。.右键用于标记地雷,以辅助判断,或为接下来的双击做准备;双击在一个数字周围的地雷。
[12]Minesweeper as a Constraint Satisfaction Problem - Chris Studholme
[13]TheMinesweepergame:PercolationandComplexity-ElchananMossel
[14]emoji - minesweeper - muan,github
[15]看B站学物理:扫雷里的相变-梁昊,知乎