玩掃雷還有什么技巧?科學(xué)家的玩游戲方法你絕對想不到

有時(shí),小編回憶起童年和青春,眼前總是浮現(xiàn)出一片碧藍(lán)碧藍(lán)的天空和嫩得出水的草地,以及以前在那上面和小伙伴們度過的愉快的時(shí)光……
當(dāng)然,你們別想錯(cuò)了
我說的藍(lán)天和草地是指這個(gè) ??

Windows?XP?確實(shí)承載很多的記憶,而且?XP?這個(gè)系統(tǒng)也是真的經(jīng)用。Windows?XP?于?2001?年?8?月?24?日正式發(fā)布,微軟在?2014 年 4 月 8 日才停止了對 Windows XP 桌面版系統(tǒng)的支持服務(wù),一直到這周二,2019 年 4 月 9 號,運(yùn)行在嵌入式設(shè)備上的最后的一批?Windows?XP?才失去微軟的官方支持。XP?們終于正式對我們?say?goodbye?了。[1]

提起 XP,不得不說操作系統(tǒng)自帶的諸如掃雷,紙牌這一類的經(jīng)典游戲真的經(jīng)典,好玩又殺時(shí)間。如果可以統(tǒng)計(jì)全人類花在這上面的時(shí)間,估計(jì)肯定是一個(gè)天文數(shù)字。。。不過盡管掃雷大家玩的時(shí)間很長,玩的次數(shù)也很多,但是我猜?99%?的玩家肯定沒思考過,自己玩掃雷為啥那么容易就死了。。。
對比一下別人家的孩子玩掃雷的速度

再看看自己玩掃雷的樣子...

雖然?XP?已經(jīng)離我們而去,但是萬幸的是?Win10?系統(tǒng)還能夠在商店中直接搜索「minesweeper」下載官方重置了的掃雷游戲,重新體會以前的經(jīng)典。
其實(shí)吧,掃雷這個(gè)游戲很多科學(xué)家也愛玩。不過一般人玩掃雷如果死得快,就不斷重開重開重開直到碰到一個(gè)好的開局(然后又快速地死掉)。科學(xué)家就不一樣,如果他們玩掃雷死得快,他們不會重開,他們會直接證明「這個(gè)游戲通關(guān)概率為 0」。

掃雷畢竟已經(jīng)有這么長的歷史了,分析掃雷游戲求解概率的論文都有一大堆。作為一個(gè)熟練點(diǎn)擊掃雷重開鍵的手殘掃雷玩家,今天我就來和大家系統(tǒng)地聊一聊掃雷的背后的故事。

掃雷秘籍


天下武功,無堅(jiān)不摧,唯快不破!
從數(shù)學(xué)上來看,掃雷就相當(dāng)于一個(gè)不斷給你已知條件不斷求解的過程,就像一個(gè)不斷增加條件的應(yīng)用題。你可以通過左鍵點(diǎn)開確定不是雷的塊,右鍵標(biāo)記你認(rèn)為是雷的區(qū)域。如果你點(diǎn)開的這一塊不是雷,那么它會告訴你這塊區(qū)域周圍八格內(nèi)有幾顆雷。只要你點(diǎn)得足夠快,雷就追不上你。
通過很簡單的反證法,我們可以推出來很大一部分雷所在的位置。[3]

所謂反證法,就是反過來想這個(gè)問題。如果存在這么一個(gè)向內(nèi)凹的角,內(nèi)部的都是空白,但是角落上是一個(gè)?1,那么這個(gè)角上一定會有一顆雷。因?yàn)槿绻@個(gè)地方再不是雷的話,那中間的?1?所指的雷就只能去流浪了。。。同理,一條邊上如果有?3?的話,那和?3?挨著的這三個(gè)一定是雷。畢竟地雷兄弟們也不能擠一擠挪到一個(gè)格子上去。

除了這個(gè)反證法以外,在掃雷里還有很多固定的「套路」。學(xué)會這個(gè)套路,保證你掃雷功力大增,殺進(jìn)小區(qū)掃雷五百強(qiáng)。

在掃雷的時(shí)候其實(shí)經(jīng)常會遇到一些固定的數(shù)字,比如三個(gè)連續(xù)的數(shù)字為 121,此時(shí)想都不用想,就可以直接在 121 兩個(gè) 1 的正對方向標(biāo)上雷。或者四個(gè)連續(xù)的數(shù)字?1221,此時(shí)兩個(gè) 2 的正對方向上也一定是雷。


「小編小編,我有個(gè)問題,那?121221?呢?按照秘籍填雷的話中間那個(gè)?1?附近有兩顆雷誒?」

「這種情況是不可能的!左邊數(shù)起三個(gè)?1?已經(jīng)覆蓋了上面的所有未知空格,所以地雷數(shù)至多只有?3?個(gè)。但下方顯示地雷數(shù)為?1+2+2+1+2+1,在只有中間?5?個(gè)格子重復(fù)計(jì)數(shù)的情況下都到了?7,大于?3?的?2?倍。所以這種圖形是不可能存在的!」
咳咳,把思路收回來,如上所述,掃雷確實(shí)是有一些套路的。每日熟讀此掃雷秘籍,假以時(shí)日,掃雷技藝必將大成。

掃雷還是運(yùn)氣活

玩掃雷,你必須要接受,這是一款拼人品的游戲。
雖然人生已經(jīng)如此地艱難,但我還是要無情地拆穿這一點(diǎn)。想必你此時(shí)已經(jīng)熟練掌握了掃雷的套路,不過在有些時(shí)候你還是要面對猜雷這種事情,而且一招不慎,滿盤皆輸。。。

圖中黃色部分就是典型的需要猜的掃雷難題。根據(jù)角落里面的數(shù)字,我們都只能知道 1×2 的黃色部分里面一定只有一個(gè)雷,不過我們并不知道哪個(gè)才是雷。如果沒有其它信息的話,我們辛辛苦苦大半個(gè)棋盤,最后通過這個(gè)地雷陣的概率還是只有?1/8。
這種簡單的判斷還好,有些時(shí)候還會遇到一些藏得更加隱晦的猜的時(shí)候。

假設(shè)在我們的掃雷過程中遇到了這么一個(gè)圖案,確實(shí)是一件欲哭無淚的事情。不知道怎么哭的可以先把眼淚準(zhǔn)備好,小編馬上就告訴你們?yōu)樯兑?。。。從左邊開始,假設(shè)第一個(gè)空位有雷,那么第二個(gè)空位沒有雷,因?yàn)榭瘴恢虚g?1?的存在從而第三個(gè)空位有雷,依次類推。但是如果是第一個(gè)空位沒有雷,而第二個(gè)空位有雷,我們也說得通。都要踩地雷了,還整個(gè)這么復(fù)雜的難題,至于么。。。
別急,后面還有更加復(fù)雜的。這里的?x?和之后的?*?號上是否有雷的情況一直相同,所以這個(gè)地雷陣就像一根傳遞信號的導(dǎo)線一樣。在掃雷的地圖上,我們不僅僅能夠做出這種簡單的傳遞信號的導(dǎo)線,其實(shí)還能夠?qū)崿F(xiàn)所有的電子電路中的邏輯門的操作。[4,5]


這是兩個(gè)「簡單」的邏輯門,分別實(shí)現(xiàn)了將信號翻轉(zhuǎn)的非門和將兩路信號做或操作的或門。在另一個(gè)也很著名的沙盒游戲——《我的世界(Minecraft)》里面,玩家也可以通過游戲中的材料,紅石(其實(shí)在此之前的 Windows 10 操作系統(tǒng)的每一年的更新代號就是用紅石來命名),實(shí)現(xiàn)各種各樣的復(fù)雜邏輯操作,更有玩家利用紅石在?Minecraft?里制造出了真正能運(yùn)行的計(jì)算機(jī)。。。

算了,我已經(jīng)不敢想象掃雷會變成什么樣了。。。

判斷有沒有解都是一件很難的事情

回到文章最開始,我們?nèi)巳テ平庖粋€(gè)掃雷問題的話,很容易就會死掉了,那把這個(gè)問題交給計(jì)算機(jī)來做會怎么樣?然而很遺憾的是,一般情況下,計(jì)算機(jī)目前對掃雷這個(gè)問題還是無能為力。。。

稍微值得慶幸的是,在我們平時(shí)玩的比較小的棋盤下,計(jì)算機(jī)還可以通過搜索得到答案。
為了了解計(jì)算機(jī)處理問題難度的幾個(gè)級別,有必要先知道一個(gè)概念——多項(xiàng)式時(shí)間。對于同一個(gè)算法,根據(jù)處理問題大小的不同,計(jì)算機(jī)一般來說需要不同的時(shí)間進(jìn)行計(jì)算。用最直觀的例子來說,小明要去洗衣服,他洗 1 件衣服的時(shí)間為 2 分鐘,洗 5 件衣服的時(shí)間為 10 分鐘,洗 10 件衣服的時(shí)間為 20 分鐘,處理問題的時(shí)間隨問題規(guī)模的變化為線性關(guān)系,一次多項(xiàng)式?,F(xiàn)在我們假設(shè)小明還是要洗衣服,只不過現(xiàn)在的衣服比較特殊,他洗?1?件這種衣服的時(shí)間為?2?分鐘,但洗?5?件的時(shí)間變?yōu)?32?分鐘,洗?10?件的時(shí)間變?yōu)?1024?分鐘,這個(gè)時(shí)候就是指數(shù)關(guān)系的,而不再是多項(xiàng)式了。評價(jià)一個(gè)算法,隨著問題規(guī)模的增大,計(jì)算時(shí)間怎么增長是一個(gè)十分重要的指標(biāo)。

在計(jì)算機(jī)里面,對于多項(xiàng)式級別的時(shí)間,我們還是認(rèn)為很快的。如果把問題按照求解的難度來進(jìn)行分類的話,P 是指能夠用多項(xiàng)式時(shí)間求解的問題,俗話說就是算起來很快的問題。NP 是指算起來不一定快,但是任何答案我們都可以檢查起來很快的問題。NP?完全問題,是比所有?NP?問題都要難的?NP?問題。雖然人們有個(gè)美好的想法,總覺得驗(yàn)算起來很快的應(yīng)該可以找到辦法讓他算起來很快,但目前還是個(gè)未知數(shù)。。。[7]
很不幸,求解一個(gè)掃雷游戲的解,正好是一個(gè)?NP?完全問題——在能夠輕松驗(yàn)證結(jié)果是否正確的問題里面最難的那一類。?這一類問題目前為止人們還沒有發(fā)現(xiàn)多項(xiàng)式時(shí)間的求解算法,通常只有指數(shù)級甚至階乘級的搜索算法來解決。

掃雷游戲?qū)儆谝粋€(gè)如此困難的問題,其原因就出在上一章提到的,可以把掃雷游戲看做一個(gè)個(gè)邏輯門進(jìn)行運(yùn)算的邏輯電路。給定一個(gè)邏輯電路,在已知輸出結(jié)果的情況下,能否確定每個(gè)輸入的值?這個(gè)問題被稱為?SAT 問題,是世界上第一個(gè)被證明其為 NP 完全的問題。[8]這種問題驗(yàn)證起來非常容易,你只需要把結(jié)果代入到邏輯電路中,馬上能知道是否符合要求,但倒過來想要計(jì)算符合結(jié)果的輸入就極端地麻煩。
求解掃雷游戲的結(jié)果,利用那些構(gòu)造的邏輯門,恰恰等價(jià)于求解?SAT?問題。[9]

掃雷還和滲透有關(guān)系

其實(shí)我們在玩掃雷游戲的時(shí)候覺得很難,其實(shí)還有另外一個(gè)原因。這個(gè)原因和物理里面的滲透還有關(guān)系。

在上個(gè)世紀(jì) 60 年代,科學(xué)家們 [10] 發(fā)現(xiàn)在流體流過多孔的介質(zhì)的時(shí)候,介質(zhì)中的空洞總是會被堵塞,有時(shí)候就會影響流體流出。更為奇怪的是,當(dāng)這些多孔的介質(zhì)的孔隙被隨機(jī)堵塞的比例逐漸增大而達(dá)到某一值時(shí),一開始一直能夠流動(dòng)的流體就突然被完全堵住。在孔洞被隨機(jī)堵住的概率發(fā)生變化時(shí),液體流過的比率也會發(fā)生一個(gè)突變。
這種現(xiàn)象被稱為逾滲(percolation)。[11]

在掃雷里面,也存在類似逾滲的現(xiàn)象。當(dāng)一盤游戲里面的地雷密度特別低的時(shí)候,我們差不多隨便點(diǎn),都不會點(diǎn)到地雷,而是點(diǎn)到大片大片的空白,一下子就把問題解決了。但是當(dāng)?shù)乩酌芏仍龈咭院?,在增大到一定程度以后,即使我們理性地分析,從不瞎猜,也不可能把掃雷問題做對了。

我們把流體通過多孔介質(zhì)逾滲的模型抽象出來的話,其實(shí)對應(yīng)著點(diǎn)逾滲,也就是把整個(gè)介質(zhì)想象成一個(gè)網(wǎng)絡(luò),流體在經(jīng)過每個(gè)網(wǎng)格時(shí),有概率?p?的可能通過。如果不能流過的網(wǎng)格在網(wǎng)絡(luò)中連成了片,流體就不能流過了。
不嚴(yán)格地來說,求解掃雷問題其實(shí)和逾滲模型很類似,我們求解的過程其實(shí)也像推土機(jī)一樣,不斷地利用已有的知識將已知區(qū)域向外一層一層地推進(jìn)。如果游戲中某處雷的密度越大,那么越有可能出現(xiàn)可解部分被雷分開的情況,地雷密度和逾滲參數(shù)起到了一樣的作用。如果被分隔到無法連接整個(gè)棋盤,那就無法繼續(xù)推理了。更為嚴(yán)格的證明可以參考?Elchanan?Mossel?的論文。[13]

隨著網(wǎng)格的不斷增大,這條勝率曲線中間部分也變得越來越陡峭,掃雷問題越來越向兩個(gè)極端發(fā)展:要不就根本解不出來,要不就是很容易地就能解出來。在高級模式下,地雷的密度其實(shí)已經(jīng)到了?99/480?=?0.2,能夠解出來的概率已經(jīng)不到?1/4,這還不算手抖了點(diǎn)錯(cuò)了,開局不好重開之類的情況,真的不算是友好了。

結(jié) 論


相信看到這里的人
一定已經(jīng)躍躍欲試想要玩一下掃雷了
我相信你們
天下無難事,只要肯放棄
卸載也行

* 封面圖修改自周星馳電影《功夫》
*?參考文獻(xiàn)以及鏈接:
[1]?最后的 Windows XP 退役 ( https://www.pconline.com.cn/win10/1247/12470057.html)
[2] Minesweeper Game World Ranking?(www.minesweeper.info/worldranking.html?ranking=1)
[3] 更詳細(xì)的掃雷教程可以點(diǎn)擊閱讀 Strategy - MinesweeperWiki(http://www.minesweeper.info/wiki/Strategy),對更具體的細(xì)節(jié)感興趣的,可以閱讀 掃雷游戲有些什么技巧嗎??-?張砷鎵的回答?-?知乎(https://www.zhihu.com/question/19730159/answer/15836781)
[4]?Minesweeper and logical circuits (http://www.formauri.es/personal/pgimeno/compurec/Minesweeper.php)
[5]?要成為掃雷高手,先練好邏輯吧 - Albert_JIAO,果殼 (https://www.guokr.com/article/47846/)
[6]?Quad-Core Redstone Computer - YouTube(https://www.youtube.com/watch?v=SPaI5BJxs5M)
[7]?什么是P問題、NP問題和NPC問題(http://www.matrix67.com/blog/archives/105),以及怎么理解?P?問題和?NP?問題?-?知乎
[8]?布爾可滿足性條件 - 維基百科 (https://en.wikipedia.org/wiki/Boolean_satisfiability_problem)
[9]?Circuits, Minesweeper, and NP Completeness - Richard Carini (59.80.44.49/web.math.ucsb.edu/%7Epadraic/ucsb_2014_15/ccs_problem_solving_w2015/NP3.pdf)
[10]?S?R?Broadbent?and?J?M?Hammersly,Percolation?processes.?Proceedings?of?the?Cambridge?Philosophical,1957,53?:629-641.
[11]?Percolation - wikipedia (https://en.wikipedia.org/wiki/Percolation)
[12]?Minesweeper as a Constraint Satisfaction Problem - Chris Studholme (http://www.cs.utoronto.ca/%7Ecvs/minesweeper/minesweeper.pdf)
[13]?The?Minesweeper?game:?Percolation?and?Complexity?-?Elchanan?Mossel (https://pdfs.semanticscholar.org/0032/6ba639bf3895e90df80342658225c0b40991.pdf)
[14]?emoji - minesweeper - muan, github (https://github.com/muan/emoji-minesweeper)
[15]?看B站學(xué)物理:掃雷里的相變?-?梁昊,知乎(https://zhuanlan.zhihu.com/p/25488265)

>>熱門文章推薦<<




