【漢諾塔】漢諾塔最小步數(shù)問題的推理過程及實踐
前文
因為原神的琺露珊邀約才知道了這個小游戲,當(dāng)時就花了一點時間進行數(shù)學(xué)推理,感覺有點意思就做了一個類似于攻略的東西出來。可能已經(jīng)有人做過更好更易懂的攻略了,不過以下內(nèi)容是我在游玩過程中自己的思考,所以我還是決定把它寫下來。
如果不想看那么長的文字過程可以直接跳轉(zhuǎn)到下方紅字處看結(jié)論。玩法和演示過程就放在視頻里了,感興趣的可以點擊下方鏈接跳轉(zhuǎn)觀看(記得看視頻簡介)↓
【原神/堆棧塔】琺露珊邀約7層漢諾塔最少步數(shù)解法演示(附9層塔)
數(shù)學(xué)推理過程
假設(shè)有n個圓環(huán),將n個圓環(huán)移動到另一根柱子的最少步數(shù)為a?。圓環(huán)從上到下依次編號,記為1、2、3……n-1、n;三根柱子從左到右分別記為A、B、C。
這邊我們默認圓環(huán)初始的位置在A柱,圓環(huán)移動后的最終位置為B柱(這邊為了方便討論就以上述條件為基準,實際選擇不同的標(biāo)定物對推理并沒有影響)
接下來我們進行分類討論:
①當(dāng)n=1時
將1個圓環(huán)移動到另一根柱子(B柱)的步數(shù)為1,即a?=1
②當(dāng)n≥2時
由于n號圓環(huán)(最大)下方不可能有其它圓環(huán),所以整個流程中我們只需要移動一次即可。首先我們構(gòu)想一個場景,在我們移動的過程中,若想把處于A柱上的n號圓環(huán)移動到B柱,就需要保證1~n-1號圓環(huán)依次從上到下處于C柱才能實現(xiàn)(此時B柱上無圓環(huán))。
有了這個前提,將n個圓環(huán)移動的過程就可以拆分成三個階段:
Ⅰ:將1~n-1號圓環(huán)從A柱移動到C柱
Ⅱ:將n號圓環(huán)從A柱移動到B柱
Ⅲ:將1~n-1號圓環(huán)從C柱移動到B柱
這里我們也可以看出Ⅰ、Ⅲ階段的本質(zhì)就是將1~n-1號圓環(huán)從一根柱子移動到另一根柱子上,其需要的最小步數(shù)皆為a???,共計2a???步。
因此可得a?=2a???+1
等式左右兩邊+1可得
a?+1=2a???+2=2(a???+1)
(a?+1)/(a???+1)=2
由此可知數(shù)列{a?+1}是以2為首項以2為公比的等比數(shù)列,所以a?+1=2?,a?=2?-1
從而我們得出移動n個圓環(huán)組成的塔所需的最少步數(shù)滿足a?=2?-1這個關(guān)系式。
實踐操作
了解了移動原理之后我們要做的就是實現(xiàn)如何用最少的步數(shù)完成移動。
我們假設(shè)正在進行n層塔的移動(n>1),移動n層塔被我們拆分成了三個階段:
Ⅰ:將1~n-1號圓環(huán)從A柱移動到C柱
Ⅱ:將n號圓環(huán)從A柱移動到B柱
Ⅲ:將1~n-1號圓環(huán)從C柱移動到B柱
我們首先要完成Ⅰ階段,這時底部的n號圓環(huán)就不需要移動,我們可以將其忽略不計,問題就轉(zhuǎn)化為將n-1層塔移動到另一根柱子,那么Ⅰ階段就可以繼續(xù)拆分成三個新的階段:
Ⅰ:將1~n-2號圓環(huán)從A柱移動到B柱
Ⅱ:將n-1號圓環(huán)從A柱移動到C柱
Ⅲ:將1~n-2號圓環(huán)從B柱移動到C柱
我們按照這個思路再單獨取出新的Ⅰ階段進行拆分可得:
Ⅰ:將1~n-3號圓環(huán)從A柱移動到C柱
Ⅱ:將n-2號圓環(huán)從A柱移動到B柱
Ⅲ:將1~n-3號圓環(huán)從C柱移動到B柱
按照這個思路不斷拆分至第一層可得第1層圓環(huán)的擺放位置,也就是第一步移動的擺放位置
PS:這里確定第一層的擺放位置是因為我們已經(jīng)選定了B柱為目標(biāo)柱(移動后的結(jié)果),此基礎(chǔ)下塔總層數(shù)為奇數(shù)或偶數(shù)會導(dǎo)致無法實現(xiàn)最少步數(shù)移動。實際情況中目標(biāo)柱可憑玩家喜好而定,故不用考慮這個。
同理,我們將Ⅲ階段不斷拆分后即可得到實現(xiàn)最少步數(shù)的每一步,再把各階段加起來就是一份完整的“參考答案”了。理論上來講,這種方法可以計算出每一步的移動方向并精確說明。
而拆分過程中可以得出一個規(guī)律:
當(dāng)我們移動第x層圓環(huán)時
①x為奇數(shù),則需要將該圓環(huán)放在偶數(shù)層圓環(huán)的上面,倘若無偶數(shù)層圓環(huán)則放在空柱(沒有任何圓環(huán)的柱子)上。
②x為偶數(shù),則需要將該圓環(huán)放在奇數(shù)層圓環(huán)的上面,倘若沒有層級大于x的奇數(shù)層圓環(huán),則放在空柱上。
此規(guī)律可用于確認當(dāng)前的移動進度(任何時候都適用),可避免層數(shù)或步驟太多導(dǎo)致大腦無法處理信息的情況。
PS:此規(guī)律為個人概括,并不具有權(quán)威性,不過我概括完多次嘗試后也沒找出什么明顯的問題,如果有誤后續(xù)會糾正的。
總結(jié)
本來我想把詳細而完整的推理過程給寫下來的,但是表達能力實在有限,所以證明這個規(guī)律的過程沒有詳寫,而且寫了的內(nèi)容也可能比較抽象(對不起?。T诿靼滓苿拥脑砗?,更多依靠的還是自己的經(jīng)驗,熟練度上來后游戲的規(guī)律和技巧可能就在潛移默化中得到了理解。游戲上手難度本身并不大,哪怕不看這些也沒有任何影響,寫這些也只是因為我想用文字將抽象的東西化為具體的問題來解釋說明,而不是憑借著感覺和經(jīng)驗來完成它。當(dāng)然寫完后我才感覺有點多此一舉了,不過這時候后悔也沒什么用了(哭)。Ⅲ階段的拆分過程沒有寫是因為我實在是寫不下去了了,浪費時間又浪費精力,反正方法跟Ⅰ階段一模一樣,我想應(yīng)該是能夠理解的吧×。
草草地寫完了這篇文章,若有什么錯誤的地方還請各位指出。感謝觀看。