翻硬幣游戲


【轉】博弈-翻硬幣游戲

翻硬幣游戲

    一般的翻硬幣游戲的規則是這樣的:

      N 枚硬幣排成一排,有的正面朝上,有的反面朝上。我們從左開始對硬幣按1 N 編號。

第一,游戲者根據某些約束翻硬幣,但他所翻動的硬幣中,最右邊那個硬幣的必須是從正面翻到反面。例如,只能翻3個硬幣的情況,那么第三個硬幣必須是從正面翻到反面。如果局面是正正反,那就不能翻硬幣了,因為第三個是反的。

第二,誰不能翻誰輸。

    有這樣的結論:局面的SG 值為局面中每個正面朝上的棋子單一存在時的SG 值的異或和。即一個有k個硬幣朝上,朝上硬幣位置分布在的翻硬幣游戲中,SG值是等於k個獨立的開始時只有一個硬幣朝上的翻硬幣游戲的SG值異或和。比如THHTTH這個游戲中,2號、3號、6號位是朝上的,它等價於THTTHTTTTTH三個游戲和,即sg[THHTTH]=sg[TH]^sg[TTH]^sg[TTTTTH].我們的重點就可以放在單個硬幣朝上時的SG值的求法。

 

 

約束條件一:每次只能翻一個硬幣。

    一般規則中,所翻硬幣的最右邊必須是從正面翻到反面,因為這題是只能翻一個硬幣,那么這個硬幣就是最右邊的硬幣,所以,每次操作是挑選一個正面的硬幣翻成背面。

    對於任意一個正面的硬幣,SG值為1

    有奇數個正面硬幣,局面的SG==1,先手必勝,有偶數個正面硬幣,局面的SG==0,先手必敗。

   

 

 約束條件二:每次能翻轉一個或兩個硬幣。(不用連續)

    每個硬幣的SG值為它的編號,初始編號為0,與NIM游戲是一樣的。

    如果對於一個局面,把正面硬幣的SG值異或起來不等於0,既a1^a2^a3^^an==x,對於an來說一定有an'=an^x<an

    如果an'==0,意思就是說,把an這個值從式子中去掉就可以了。對應游戲,就是把編號為an的正面硬幣翻成背面就可以了。因為an^x==0,而a1^a2^a3^^an==x,即an^a1^a2^a3^^an==0,即a1^a2^a3^^an-1==0,只要在原來的x里面去掉an就可以了。

    如果an'!=0,意思就是說,把an這個值從式子中去掉后再在式子中加上an'an'<an。對應游戲,去掉an就是把編號為an的正面硬幣翻成背面,加上an',如果編號為an'的硬幣是正面,我們就把它翻成背面,是背面就翻成正面,總之,就是翻轉編號為an'的硬幣。因為an^x!=0,所以an^a1^a2^a3^^an!=0,即a1^a2^a3^^an-1!=0,而這里的

an'=a1^a2^a3^^an-1,所以在x中去掉an后,要對an'進行異或,也就是翻轉,正轉反,反轉正。

 

約束條件三:每次必須連續翻轉k個硬幣。

我們以k==3為例。

我們計算的是個數為N的硬幣中,其中最后一個硬幣為正面朝上,sg值。

N==1時,硬幣為:正,先手必輸,所以sg[1]=0

N==2時,硬幣為:反正,先手必輸,所以sg[2]=0

N==3時,硬幣為:反反正,先手必勝,所以sg[3]=1

N==4時,硬幣為:反反反正,先手操作后為:反正正反,子狀態局面的SG=0^1=1,那么sg[4]=0

N==5時,硬幣為:反反反反正,先手操作后為:反反正正反,子狀態局面的SG=1^0=1,那么sg[5]=0

N==6時,硬幣為:反反反反反正,先手操作后為:反反反正正反,子狀態局面的SG=0^0=0,那么sg[6]=1

根據觀察,可以知道,從編號為1開始,sg值為:001 001 001 001……

根據觀察,可以知道,sg的形式為00001 00001,其中一小段0的個數為k-1

 

 

約束條件4:每次翻動一個硬幣后,必須翻動其左側最近三個硬幣中的一個,即翻動第x個硬幣后,必須選擇x-1x-2x-3中的其中一個硬幣進行翻動,除非x是小於等於3的。(Subtraction Games

N==1時,硬幣為:正,先手必贏,所以sg[1]=1

N==2時,硬幣為:反正,先手必贏,因為先手可以翻成反反或正反,可能性為2,所以sg[2]==2

N==3時,硬幣為:反反正,先手操作后可以為:反正

位置x1  2  3  4  5  6  7  8  9  10  11  12  13  14...

sg[x]  1  2  3  0  1  2  3  0  1   2     3     0    1     2…

這個與每次最多只能取3個石子的取石子游戲的SG分布一樣,同樣還有相似的這類游戲,約束條件5也是一樣。

 

約束條件5:每次必須翻動兩個硬幣,而且這兩個硬幣的距離要在可行集S={1,2,3}中,硬幣序號從0開始。(Twins游戲)

N==1時,硬幣為:正,先手必輸,所以sg[0]=0

N==2時,硬幣為:反正,先手必贏,所以sg[1]=1

N==3時,硬幣為:反反正,先手必贏,所以sg[2]=2

N==4時,硬幣為:反反反正,先手必贏,所以sg[3]=3

N==5時,硬幣為:反反反反正,先手必輸,所以sg[4]=0

位置x0  1  2  3  4  5  6  7  8  9  10  11  12  13  14...

sg[x]  0  1  2  3  0  1  2  3  0  1   2     3     0    1     2…

 

約束條件6:每次可以翻動一個、二個或三個硬幣。(Mock Turtles游戲)

初始編號從0開始。

N==1時,硬幣為:正,先手必勝,所以sg[0]=1.

N==2時,硬幣為:反正,先手必贏,先手操作后可能為:反反或正反,方案數為2,所以sg[1]=2

N==3時,硬幣為:反反正,先手必贏,先手操作后可能為:反反反、反正反、正反正、正正反,方案數為4,所以sg[2]=4

位置x0  1  2  3  4   5    6   7    8     9  10  11  12  13  14...

sg[x]  1  2  4  7  8  11 13 14  16  19  21  22  25  26  28…

看上去sg值為2x或者2x+1。我們稱一個非負整數為odious,當且僅當該數的二進制形式的1出現的次數是奇數,否則稱作evil。所以1247odious因為它們的二進制形式是1,10,100,111.0,3,5,6evil,因為它們的二進制形式是0,11,101,110。而上面那個表中,貌似sg值都是odious數。所以當2xodious時,sg值是2x,當2xevil時,sg值是2x+1.

這樣怎么證明呢?我們會發現發現,

                                                      evil^evil=odious^odious=evil

                                                      evil^odious=odious^evil=odious

假設剛才的假說是成立的,我們想證明下一個sg值為下一個odious數。注意到我們總能夠在第x位置翻轉硬幣到達sg0的情況;通過翻轉第x位置的硬幣和兩個其它硬幣,我們可以移動到所有較小的evil數,因為每個非零的evil數都可以由兩個odious數異或得到;但是我們不能移動到下一個odious數,因為任何兩個odious數的異或都是evil數。

 

假設在一個Mock Turtles游戲中的首正硬幣位置x1,x2,…,xn是個P局面,即sg[x1]^^sg[xn]=0.那么無可置疑的是n必定是偶數,因為奇數個odious數的異或是odious數,不可能等於0。而由上面可知sg[x]2x或者2x+1sg[x]又是偶數個,那么x1^x2^^xn=0。相反,如果x1^x2^^xn=0n是偶數,那么sg[x1]^^sg[xn]=0。這個如果不太理解的話,我們可以先這么看下。2x在二進制當中相當於把x全部左移一位,然后補零,比如說2的二進制是10,那么4的二進制就是100。而2x+1在二進制當中相當於把x全部左移一位,然后補1,比如說2的二進制是105的二進制是101。現在看下sg[x1]^^sg[xn]=0,因為sg[x]2x或者2x+1,所以式子中的2x+1必須是偶數個(因為2x的最后一位都是0,2x+1的最后一位都是1,要最后異或為0,2x+1必須出現偶數次)。實際上的情況可能是這樣的:

博弈-翻硬幣游戲

MT游戲當中的P局面是擁有偶數堆石子的Nim游戲的P局面。

 

 

約束條件7:每次可以連續翻動任意個硬幣,至少翻一個。(Ruler游戲)

初始編號從1開始。

那么這個游戲的SG函數是g(n)=mex{0,g(n-1),g(n-1)^g(n-2),,g(n-1)^^g(1)}

根據SG函數可以得到SG值表如下。

位置x1  2  3  4  5  6  7  8  9  10  11  12  13  14  15   16...

g(x):       1  2  1  4  1  2  1  8  1    2    1     4    1    2     1   16…

所以sg值為x的因數當中2的能達到的最大次冪。比如14=2*7,最大1次冪,即216=2*2*2*2,最大4次冪,即16

這個游戲成為尺子游戲是因為SG函數很像尺子上的刻度。

 

約束條件8:每次必須翻轉4個對稱的硬幣,最左與最右的硬幣都必須是從正翻到反。(開始的時候兩端都是正面)(Grunt游戲)

這是Grundy游戲的變種,初始編號從0開始。

當首正硬幣位置為0,1,2時是terminal局面,即 終結局面,sg值都是0。當首正硬幣位置n大於等於3的時候的局面可以通過翻0,x,n-x,n四個位置得到(其中x<n/2可保證勝利)

這就像是把一堆石子分成兩堆不同大小石子的游戲,也就是Grundy游戲。

 

附注:

參考資料http://blog.sina.com.cn/s/blog_51cea4040100h3wl.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM