日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

经典数学问题:Nim游戏

發(fā)布時(shí)間:2024/5/6 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典数学问题:Nim游戏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Nim游戲的數(shù)學(xué)理論論述

Nim游戲是博弈論中最經(jīng)典的模型,是組合游戲(Combinatorial Games)的一種,屬于“Impartial Combinatorial Games”(以下簡(jiǎn)稱ICG)。

滿足以下條件的游戲是ICG:
1、有兩名選手;
2、兩名選手交替對(duì)游戲進(jìn)行移動(dòng)(move),每次一步,選手可以在(一般而言)有限的合法移動(dòng)集合中任選一種進(jìn)行移動(dòng);
3、對(duì)于游戲的任何一種可能的局面,合法的移動(dòng)集合只取決于這個(gè)局面本身,不取決于輪到哪名選手操作、以前的任何操作、骰子的點(diǎn)數(shù)或者其它什么因素;
4、如果輪到某名選手移動(dòng),且這個(gè)局面的合法的移動(dòng)集合為空(也就是說此時(shí)無法進(jìn)行移動(dòng)),則這名選手負(fù)。

通常的Nim游戲的定義是這樣的:有若干堆石子,每堆石子的數(shù)量都是有限的,合法的移動(dòng)是“選擇一堆石子并拿走若干顆(不能不拿)”,如果輪到某個(gè)人時(shí)所有的石子堆都已經(jīng)被拿空了,則判負(fù)(因?yàn)樗丝虥]有任何合法的移動(dòng))。

分析

從簡(jiǎn)單情況開始研究

如果輪到你的時(shí)候,只剩下一堆石子,那么此時(shí)的必勝策略肯定是把這堆石子全部拿完一顆也不給對(duì)手剩,然后對(duì)手就輸了。

如果剩下兩堆不相等的石子,必勝策略是通過取多的一堆的石子將兩堆石子變得相等,以后如果對(duì)手在某一堆里拿若干顆,你就可以在另一堆中拿同樣多的顆數(shù),直至勝利。

如果你面對(duì)的是兩堆相等的石子,那么此時(shí)你是沒有任何必勝策略的,反而對(duì)手可以遵循上面的策略保證必勝。

深入研究

定義P-position和N-position,其中P代表Previous,N代表Next。

直觀的說,上一次move的人有必勝策略的局面是P-position,也就是“后手可保證必勝”或者“先手必?cái) ?#xff0c;現(xiàn)在輪到move的人有必勝策略的局面是N-position,也就是“先手可保證必勝”。

更嚴(yán)謹(jǐn)?shù)亩x是:
1.無法進(jìn)行任何移動(dòng)的局面(也就是terminal position)是P-position;
2.可以移動(dòng)到P-position的局面是N-position;
3.所有移動(dòng)都導(dǎo)致N-position的局面是P-position。

按照這個(gè)定義,如果局面不可能重現(xiàn),或者說positions的集合可以進(jìn)行拓?fù)渑判?#xff0c;那么每個(gè)position或者是P-position或者是N-position,而且可以通過定義計(jì)算出來。

比如剛才說的當(dāng)只有兩堆石子且兩堆石子數(shù)量相等時(shí)后手有必勝策略,也就是這是一個(gè)P-position,下面依靠定義證明一下(3,3)P-position。

首先(3,3)的子局面有(0,3)(1,3)(2,3),只需要計(jì)算出這三種局面的性質(zhì)就可以了。

(0,3)的子局面有(0,0)、(0,1)、(0,2),其中(0,0)顯然是P-position,所以(0,3)是N-position(只要找到一個(gè)是P-position的子局面就能說明是N-position)。
(1,3)的后繼中(1,1)是P-position(因?yàn)?1,1)的唯一子局面(0,1)是N-position),所以(1,3)也是N-position。
同樣可以證明(2,3)是N-position。
所以(3,3)的所有子局面都是N-position,它就是P-position。
通過一點(diǎn)簡(jiǎn)單的數(shù)學(xué)歸納,可以嚴(yán)格的證明“有兩堆石子時(shí)的局面是P-position當(dāng)且僅當(dāng)這兩堆石子的數(shù)目相等”。

根據(jù)上面這個(gè)過程,可以得到一個(gè)遞歸的算法——對(duì)于當(dāng)前的局面,遞歸計(jì)算它的所有子局面的性質(zhì),如果存在某個(gè)子局面是P-position,那么向這個(gè)子局面的移動(dòng)就是必勝策略。

當(dāng)然,有大量的重疊子問題,所以可以用DP或者記憶化搜索的方法以提高效率。

但問題是,利用這個(gè)算法,對(duì)于某個(gè)Nim游戲的局面(a1,a2,…,an)來說,要想判斷它的性質(zhì)以及找出必勝策略,需要計(jì)算O(a1a2…*an)個(gè)局面的性質(zhì),不管怎樣記憶化都無法降低這個(gè)時(shí)間復(fù)雜度。

所以我們需要更高效的判斷Nim游戲的局面的性質(zhì)的方法。

(Bouton’s Theorem):對(duì)于一個(gè)Nim游戲的局面(a1,a2,…,an),它是P-position當(dāng)且僅當(dāng)a1a2an=0,其中表示異或(xor)運(yùn)算。

證明

證明一種判斷position的性質(zhì)的方法的正確性,只需證明三個(gè)命題:
1、這個(gè)判斷將所有terminal position判為P-position;
2、根據(jù)這個(gè)判斷被判為N-position的局面一定可以移動(dòng)到某個(gè)P-position;
3、根據(jù)這個(gè)判斷被判為P-position的局面無法移動(dòng)到某個(gè)P-position。

第一個(gè)命題顯然,terminal position只有一個(gè),就是全0,異或仍然是0。

第二個(gè)命題,對(duì)于某個(gè)局面(a1,a2,…,an),若a1^ a2^ …^ an!=0,一定存在某個(gè)合法的移動(dòng),將ai改變成ai’后滿足a1^ a2^ …^ ai’^ …^ an=0。不妨設(shè)a1^ a2^ …^ an=k,則一定存在某個(gè)ai,它的二進(jìn)制表示在k的最高位上是1(否則k的最高位那個(gè)1是怎么得到的)。這時(shí)ai^ k<ai一定成立。則我們可以將ai改變成ai’=ai^ k,此時(shí)a1^ a2^ …^ ai’^ …^ an=a1^ a2^ …^ an^ k=0。

第三個(gè)命題,對(duì)于某個(gè)局面(a1,a2,…,an),若a1^ a2^ …^ an=0,一定不存在某個(gè)合法的移動(dòng),將ai改變成ai’后滿足a1^ a2^ …^ ai’^ …^ an=0。因?yàn)楫惢蜻\(yùn)算滿足消去率,由a1^ a2^ …^ an=a1^ a2^ …^ ai’^ …^ an可以得到ai=ai’。所以將ai改變成ai’不是一個(gè)合法的移動(dòng)。證畢。

根據(jù)這個(gè)定理,我們可以在O(n)的時(shí)間內(nèi)判斷一個(gè)Nim的局面的性質(zhì),且如果它是N-position,也可以在O(n)的時(shí)間內(nèi)找到所有的必勝策略。Nim問題就這樣基本上完美的解決了。

Nim游戲的形象具體論述:

Nim取子游戲是由兩個(gè)人面對(duì)若干堆硬幣(或石子)進(jìn)行的游戲。
設(shè)有k>=1堆硬幣,各堆分別含有N1,N2,……NK枚硬幣。
游戲的目的就是選擇最后剩下的硬幣。
游戲法則如下:
1.兩個(gè)游戲人交替進(jìn)行游戲(游戲人I和游戲人II);
2.當(dāng)輪到每個(gè)游戲人取子時(shí),選擇這些堆中的一堆,并從所選的堆中取走至少一枚硬幣(游戲人可以取走他所選堆中的全部硬幣);
3.當(dāng)所有的堆都變成空堆時(shí),最后取子的游戲人即為勝者。
這個(gè)游戲中的變量是堆數(shù)k和各堆的硬幣數(shù)N1,N2,……Nk。對(duì)應(yīng)的組合問題是,確定游戲人I獲勝還是游戲人II獲勝以及兩個(gè)游戲人應(yīng)該如何取子才能保證自己獲勝(獲勝策略)。

思路

首選考查某些特殊情況。

如果游戲開始時(shí)只有一堆硬幣,游戲人I則通過取走所有的硬幣而獲勝。

現(xiàn)在設(shè)有2堆硬幣,且硬幣數(shù)量分別為N1和N2,游戲人取得勝利取決于它們是否相等。
設(shè)N1!=N2,游戲人I從大堆中取走的硬幣使得兩堆硬幣數(shù)量相等,于是,游戲人I以后每次取子的數(shù)量與游戲人II相等而最終獲勝。
但是如果N1= N2,則:游戲人II只要按著游戲人I取子的數(shù)量在另一堆中取相等數(shù)量的硬幣,最終獲勝者將會(huì)是游戲人II。
這樣,兩堆的取子獲勝策略就已經(jīng)找到了。

每個(gè)正整數(shù)都有對(duì)應(yīng)的一個(gè)二進(jìn)制數(shù),例如:57(10) =111001(2) ,即:57(10)=25+24+23+20
于是,我們可以認(rèn)為每一堆硬幣數(shù)由2的冪數(shù)的子堆組成。
這樣,含有57枚硬幣大堆就能看成是分別由數(shù)量為25、24、23、20的各個(gè)子堆組成。
現(xiàn)在考慮各大堆大小分別為N1,N2,……Nk的一般的Nim取子游戲。
將每一個(gè)數(shù)Ni表示為其二進(jìn)制數(shù)(數(shù)的位數(shù)相等,不等時(shí)在前面補(bǔ)0):
N1 = as…a1a0
N2 = bs…b1b0
……
Nk = ms…m1m0
如果每一種大小的子堆的個(gè)數(shù)都是偶數(shù),我們就稱Nim取子游戲是平衡的,而對(duì)應(yīng)位相加是偶數(shù)的稱為平衡位,否則稱為非平衡位。
因此,Nim取子游戲是平衡的,當(dāng)且僅當(dāng):
as + bs + … + ms 是偶數(shù)
……
a1 + b1 + … + m1 是偶數(shù)
a0 + b0 + … + m0是偶數(shù)

于是,我們就能得出獲勝策略:
游戲人I能夠在非平衡取子游戲中取勝,而游戲人II能夠在平衡的取子游戲中取勝。

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的经典数学问题:Nim游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。