算法學習之博弈論(一)

巴什博弈:

只有一堆N個石子,每次最多取M個最少取1個最後取光者勝

判斷先手勝負的條件:

1.當N=M+1時,先手顯然必敗

2.當N=(M+1)*k+r 時,先手先取r個石子,若後手取x個石子,則先手再取(m+1-x)個石子,始終然後手面對N=(M+1)*k 個石子,如此重複後手必敗

所以當N%(M+1)==0 時,後手勝,反之先手勝

例如N=7,M=3

先手取3個  7---->4  後手最多取3個,所以後手不論取多少,先手都可以在下一次獲得勝利

例如N=8,M=3

無論先手取多少,後手總可使剩餘的石子數爲4,先手敗

威佐夫博奕:

有兩堆石子,兩個人輪流從一堆或同時從兩堆中取同樣多的石子(從一堆中取時取多個,若從兩堆中取多個則必須是取相同的個數),至少一個多者不限,最後取光者勝

方法一:

f(a,b) 表示兩堆數量分別爲a,b時的狀態,則f(a,b)=f(a,b-k) or f(a-k,b) or f(a-k,b-k)     時間複雜度爲O(n^3)

改進:

若爲f(a,a)  則必勝(同時從兩堆中取a個)

若爲f(a,b)==f(b,a),兩種狀態相同

若f(a,b) 爲必敗態時對於任意的c!=b f(a,c)爲必勝態,如(1,2)爲必敗態,先手無論怎麼取,都可以使後手獲得勝利,(1,n)則先手可以使後手面對(1,2)這種狀態

所以,如果面對(0,0)這種狀態是先手已經敗了,我們把這種狀態稱爲奇異形態

前幾種奇異形態爲(0,0),(1,2),(3,5),(4,7),(6,10)   有規律:1=2-1   2=5-3  3=7-4  4=10-6    設狀態爲(ak,bk)(0<=k<=n)  ak是前面狀態中沒有出現的最小自然數,bk=ak+k

有個公式  ak=k*(sqrt(5)+1)/2  bk=ak+k 或者  bk=k*(sqrt(5)+3)/2

Nim 博弈:

有N堆石子,每堆有Pi個石子,從任意一堆中取走至少個石子,也可以整堆拿走,但不能從多堆中同時拿,無法取者爲輸(取走最後一個者勝)

舉個例子:

假設有3堆石子,每堆分別爲a=1,b=2,c=3,若你先拿怎麼拿

1). 拿走第一堆的唯一一個石子,那麼情況變成(0,2,3),在這種情況下對手只需要在第三堆中拿走一個石子,變成(0,2,2),你就輸了,因爲完後無論你怎麼拿,對手只需要在另一堆中採取相同的策略,所以對手不會出現無法取火柴的情況

2).完全拿走第二堆變成(1,0,3)或者(1,2,0),這樣做的方法跟1)是一樣的,對手可以採取策略使兩堆的石子數變成(1,0,1)或(1,1,0),敗

3).對於(1,1,3),(1,2,2),(1,2,1),對手總可以使情況變成(1,1,0),(0,2,2),(1,0,1),敗

所以(1,2,3)是一個先手必敗的條件,簡稱必敗態

1.對於必敗態當且僅當其後繼狀態都是必勝態

2.對於必勝態當且僅當其後繼至少有一個是必敗態

3.沒有後繼的狀態是必敗態

Nim遊戲的解法:

對於狀態(a,b,c)當且僅當a or b or c == 0 時(a,b,c)爲必敗態,即每堆石子的數目全部放在一起求異或,當且僅當結果爲0時狀態是先手必敗

1).對於必勝態,一定有一個後繼狀態是必敗的

2).對於必敗狀態,其後繼都是必勝態


關於Nim遊戲的拓展:

一:

有N堆石子,其中第i堆有Pi個石子,每次每個人最多從某一堆中取M個石子,最後不能取得的人輸

結論:若每堆石子數分別爲p1,p2,p3,p4.....  對M+1取餘得到r1,r2,r3,r4.....   然後  r1 or r2 or r3 or r4....  若爲0 則爲必敗態,反之必勝態

分析: 對每堆石子進行分解,得到兩部分,每部分都還是N堆石子,第一部分是M+1的倍數,由Nim博弈知識得到這一部分是必敗態,所以整個遊戲的勝負可以由另一堆決定,即由余數決定爲0則爲必敗態,反之必勝態


二:(NimK問題)

有N堆石子,每堆有Pi個石子,每次最多從K堆中取出若干石子,不能不取,最後不能取者輸

結論:對於K>1 的情況,把p1,p2,p3,p4.....轉成2進制,然後每位相加,最後結果%(M+1)  若爲0則爲必敗態,反之必勝態


三:Misere Nim

規則同Nim遊戲的規則相同,但是勝負條件發生變換,誰去走最後一個誰輸(誰不能取誰贏)

結論:

1).若每堆都是隻含有1個石子,且共有偶數堆,則先手勝     

2).如果只有1堆石子的個數大於1,若總堆數爲偶數,則先手把這堆的石子取完,若總堆數爲奇數,則先手把這堆的數目取成1,使之成爲有奇數堆只含有1個石子的石子堆(其中總起來說就是讓先手面對 1) 這種狀態)

3)如果至少有兩堆的石子數大於1,考慮異或值,若爲0,則必敗,反之必勝

發佈了95 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章