2048理论上最高能玩到多少分?
這篇文章也是基于知乎的一個答案。因為前天蛋疼寫了個99行蛋疼版2048,所以一時興起在知乎上搜了搜2048,結果發現了這個問題。看了看,票數最高的兩個答案都是錯的,所以自己推導了一下。2048的玩法就不贅述了,先來看看相關的規則,因為是Gabriele Cirulli讓這個游戲火起來的,以他的源代碼為準(Gabriele Cirulli的版本的地址:2048)。
記分規則:在https://github.com/gabrielecirulli/2048/blob/master/js/game_manager.js中的167行:
self.score += merged.value;
分數就是累加游戲過程中新合成方塊的數值。
新方塊出現的規則:在https://github.com/gabrielecirulli/2048/blob/master/js/game_manager.js的71行:
var value = Math.random() < 0.9 ? 2 : 4;
新方塊的取值集為{2, 4},其中4出現的概率是0.1。
熟悉了規則,先來看一個比較普遍的問題:一般情況下,合成一個不太大的數值,能得到的最高分是多少?
不妨以2048為例子,2048肯定是由兩個1024合成的,所以如前所述,在合成2048的這一步,積分是2048,同樣1024也是由合成得到的,所以在得到兩個1024的這兩步,積分是1024*2=2048,以此類推,在>4的情況下,每一步分解的逆過程都會積2048分。因為我們探討的是理論最高分,當然希望盡可能多的合成新方塊,所以不希望4是直接生成的,應該都是由2合成。假設運氣足夠好,玩的過程中出現的新方塊都是2,那么基于以上推導,從2一路合成到2048,理論上的最高分為:
[2048 imes left( {{log }_{2}}left( 2048 ight)-{{log }_{2}}left( 2 ight) ight)={{2}^{11}} imes left( 11-1 ight)= ext{20480}]
對于任意從2開始合成的({{2}^{N}})這個公式可以推廣為:
[{{2}^{N}} imes left( N-1 ight)]
有了一般情況的得分計算為基礎,來看極限情況:理論上最高分是多少?
要回答這個問題首先要來看2048理論上能達到最終布局是怎么樣的,假設能達到的最大的數值為({{2}^{N}}),那么在最后一步合成({{2}^{N}})時一定是占兩格的兩個({{2}^{N-1}}),那么對這兩個({{2}^{N-1}})做最小的展開,也就是保持一個不變,另一個展開為兩個({{2}^{N-2}})……如下所示:
[{{2}^{N}}xleftarrow{ ext{merge}}{{2}^{N-1}},{{2}^{N-1}}xleftarrow{ ext{merge}}{{2}^{N-1}},{{2}^{N-2}},{{2}^{N-2}}xleftarrow{ ext{merge}}cdots xleftarrow{ ext{merge}}{{2}^{N-1}},{{2}^{N-2}},cdots 16,8,4,4]
所以依次類推如果要合成({{2}^{N}}),則需要一直展開一個相鄰的方塊序列直到游戲能產生的方塊值,其中序列長度由要展開的級數的初始值決定,比如要展開到({{2}^{N-M}}),則需要的序列長度是(M+1),因為游戲一共16個格子,所以(M+1=16),則(M=15)。考慮到需要最大值,所以認為在這樣一個序列中,游戲產生的方塊是兩個4,那么({{2}^{N-M}}={{2}^{N-15}}={{2}^{2}}=4),則(N=17),所以游戲能達到的方塊最大值是({{2}^{17}}= ext{131072})。同樣道理,當一個131072已經產生之后,還剩下15個格子,那么這種情況下能產生的最大值為65536,依此類推,14個格子能合成的最大值是32768,……所以理論上最大值的情況一定是前15個格子的值依次為({{2}^{17}},{{2}^{16}},{{2}^{15}},cdots ,{{2}^{4}},{{2}^{3}}),也就是(131072,65536,32768,cdots ,16,8)。
而最后一個格子是2或者4都無所謂,因為不計分。這種布局的一個例子如下(圖用我自己寫的蛋疼99行代碼Python版2048畫的):
因為最后一個4或者2是游戲產生的,所以不計入積分,所以所有的積分都來源于從8到131072的15個數字。回想在第一問里得到的從2開始合成({{2}^{N}})的公式,那么似乎最高分應該是N=3,4,5,...,16,17對應的積分的總和,也就是
[sumlimits_{K=3}^{17}{{{2}^{K}} imes left( K-1 ight)}= ext{3932160}]
然而,答案并非如此,原因就是上面我關于合成數值的最小格子數占用的分析,當65536合成之后,從2開始合成一個數值需要的最少格子數超過了可用格子數了。比如我們考慮要合成兩個65536的情況,也就是第一次合成出131072的情況,如下圖:
這是合成出131072必經的一步,注意最左上角的4,這個4顯然不可能是由2合成的,而是游戲直接生成,因為對于131072,從4開始合成最少需要的格子數是16,所以只有在需要合成的值是65536或者以下時,我們才有可能從2開始合成出所有的數值,也就是說對于2048這個游戲,只有當(Nle 16)時({{2}^{N}} imes left( N-1 ight))才成立。所以當131072出現時和出現后,計算最終分數的關鍵就在于算出最少必須產生多少個值為4的方塊,那么最后就得從3932160的分數里減去多少個4。
那么什么時候需要游戲必須產生4呢,我們再回到前面關于產生一個數值需要序列長度的推導:前面得出的結論是要展開到({{2}^{N-M}}),則需要的序列長度是(M+1),因為我們希望合成次數盡量最大化,所以要展開到({{2}^{N-M}}=2={{2}^{1}}),則需要的格子數目為(M+1=N),所以在({{2}^{17}}=131072)出現前,任何數字都不會需要16個以上的格子,所以也就不需要4的出現。而當需要合成131072時,需要17個格子,而整個游戲只有16個,所以就不能從2開始合成了,于是這是第一次需要4的情況。當131072已經出現后,可用格子的最大數目是15了,這時候合成({{2}^{16}}=65536)也需要一次4了。當65536合成之后,可用格子最大數目變為14,這時候32768的合成也需要產生一個值為4的方塊了……于是依次類推,當16合成之后(也用到了新產生的值為4的方塊),為了合成8,最后一次由游戲產生了4,也就是下圖:
所以從8到131072,一共15個數字在最后合成的過程中需要4的出現,也就是說理論上能達到的最高分數是:
[ ext{3932160-4} imes ext{15=3932100}]
當然了,這個畢竟是理論最高分,實際操作起來,幾乎是無法達到的,通過不斷的悔棋和堅強的毅力達到我前面提過的最終局面也許并不難,但是2和4出現的比率是9:1這點是無法通過悔棋改變。不妨大概估算一下,對于({{2}^{N}})可以算出需要({{2}^{N-1}})個值為2的方塊,那么對于最終局面,如果不考慮格子數目對生成4的限制,則一共需要:
[sumlimits_{K=3}^{17}{{{2}^{K-1}}}={{2}^{17}}-{{2}^{2}}= ext{131068}]
這么多值為2的方塊,減去最后15個必須的值為4的方塊,并考慮由于10%的4會生成,并且一個4等價于2個2,所以實際游戲當中玩到最終局面平均生成的方塊數目為:
[left( 131068-15 imes 2 ight)div 1.1approx ext{119125}]
則值為4的方塊平均數目約為11915,所以少產生的分數為:
[ ext{11912} ext{.5} imes 4approx ext{47650}]
也就是說如果玩到了理論上方塊值最大的情況,平均分大約會是
[3932100-47650= ext{3884450}]
考慮到4出現的過程服從泊松分布,而在數目這么大的情況下可以用高斯分布來近似,如果很不嚴格地忽略掉4出現得漲落對總方塊數目的影響,則有
[sigma {{N}_{4}}approx sqrt{11915}approx ext{109}]
所以大部分分數會落在以下范圍:
[3884450pm 3 imes 109 imes 4=3884450pm 1308]
我大概在網上搜了一下,發現玩到最終局面的大都分為兩種情況,一種是和我預測的一致在3884450左右的分數,還有一種是在386????附近,是因為Practice mode積分方法不同?版本不同?還是什么別的原因,就不太清楚了。
總結
以上是生活随笔為你收集整理的2048理论上最高能玩到多少分?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: collision weaknesses
- 下一篇: 知识点复习