主要討論三個比較常見的博弈遊戲
bash game,nim game和wythoff game,較為領人驚嘆的是,他們最後都是通過數論或者自然數性質完美解決:
bash game:同餘理論
nim game:異或理論
wythoff game:**分割
(1)bash game:一堆n個物品,兩人輪流取,每次取1至m個,最後取完者勝
比如10個物品,每次只能取1到5個,則先手方必贏
1.面對[1...m]個局面,必勝
2.面對m+1個局面,必輸
3.如果可以使對手面臨必輸局面,那麼是必贏局面
4.如果不能使對手面臨必輸局面,那麼是必輸局面
基礎:1 , 2, ..., m是必贏局面, m+1是必輸局面
遞推:m+2,m+3, ... ,2m+1是必贏局面,2m+2是必輸局面
...k(m+1)是必輸局面,應該允許k=0,因為0顯然也是必輸局面
在必輸局和必贏局中,贏的一方的策略是: 拿掉部分物品,使對方面臨k(m+1)的局面
例如上例中10個物品,只能拿1到5個,先手方拿4個即可,對手無論拿多少個,你下次總能拿完
從另乙個角度思考這個問題,如果物品數量隨機,那麼先手一方勝利的概率是m/(m+1),後手方勝利的概率是1/(m+1)
(2)nim game: m堆n個物品,兩人輪流取,每次取某堆中不少於1個,最後取完者勝
詳細分析見:poj-2234:matches game
所有物品數目二進位制異或 為0,則先手必輸
所有物品數目二進位制異或不為0,則後手必輸
從另乙個角度思考這個問題,如果物品數量隨機,那麼每個數目的每一位上1或0概率相同,
如果有奇數個堆,那麼1的個數為偶數或者奇數的概率相同,
如果有偶數個堆,那麼1的個數為偶數的概率略大1/(m+1),
也就是說異或結果的每一位為0或1的概率幾乎差不多,而先手必輸要求異或結果每一位都為0,其實輸的概率很小
(3)wythoff game:兩堆(ak,bk)(ak<=bk)個物品,兩人輪流取,每次從一堆中取k個或者從2堆中同時取k個,最後面對(0,0)局面的輸(設ak<=bk是為了忽略順序的影響)
1.面對(0,0)局面必輸
2.面對(1,1)(2,2)...(n,n)局面必贏
(0,1)(0,2)...(0,n)局面必贏
3.如果可以使對手面臨必輸局面,那麼是必贏局面
4.如果不能使對手面臨必輸局面,那麼是必輸局面
基礎:(0,0)是必輸局面;(0,1)(0 ,2)...(0,n)是必贏局面,
遞推:(1,2)是必輸局面;(1,1)是必贏局面
(1,3)(1 ,4)...(1,n)是必贏局面
(2,2),(2,3)...(2,n)是必贏局面
(3,5)是必輸局面;(3,3)(3,4)是必贏局面
(3,6)(3,7)...(3,n)是必贏局面
(5,5)(5,6)...(5,n)是必贏局面
(4,7)是必輸局面;(4,4)(4,5)(4,6)是必贏局面
(4,8)(4,8)(4,9)...(4,n)是必贏局面
(7,7)(7,8)(7,9)...(7,n)是必贏局面
(6,10)是必輸局面;(6,6)(6,7)(6,8)(6,9)是必贏局面
(6,11)(6,12)(6,13)...(6,n)是必贏局面
(10,10)(10,11)(10,12)...(10,n)是必贏局面
首先發現規律:(必輸局面的規律比較容易找到)
ak是前面必輸局未出現的數中最小者,
bk=ak+k( k=0,1,2,3,...n)
下面介紹必輸局(奇異局)的最重要性質:
1,2,...,n中每乙個自然數,出現且只出現在乙個奇異局中。
推導:1.由於ak總是選擇未出現的數,所以每個數總能出現在奇異局中
且ak不會選擇到重複的數
2.bk=ak+k,所以bk總是比前面所有奇異局出現的數都大,
所以bk不會選擇到重複的數
必贏一方的策略是:始終讓對手面對必輸局(奇異局)
給定任意局勢(a,b),判定(a,b)是否為必輸局的方法是:
k=0,1...n 記**比例是φ=1.618033
ak=[k*φ],bk=ak+k=[k*φ*φ]
如k=0,ak=0,bk=0
k=1,ak=1,bk=2
k=2,ak=3,bk=5 k=3,ak=4,bk=7
更好的一種判斷策略是 k = bk-ak ,如ak=k*φ時,當前局勢為奇異局
從勝負概率角度,如果堆中數量隨機,先手一方優勢很大
(相應經典題目是poj-1067)
三個十分相似的遊戲,但局勢的判斷和必勝策略差異卻很大,但卻又都來自數的性質,這不得不說是一件讓人驚奇的事情。
三個博弈論演算法分析
主要討論三個比較常見的博弈遊戲 bash game,nim game和wythoff game,較為領人驚嘆的是,他們最後都是通過數論或者自然數性質完美解決 bash game 同餘理論 nim game 異或理論 wythoff game 分割 1 bash game 一堆n個物品,兩人輪流取,每...
博弈論演算法
複習 兩個頂尖聰明的人在玩遊戲,有一堆n個石子,每次每個人能取 1,m 個石子,不能拿的人輸,請問先手與後手誰必敗?結論 通過上面的分析可以得出結論 當n能整除m 1時先手必敗,否則先手必勝。兩個頂尖聰明的人在玩遊戲,有nn堆石子,第ii堆有aiai個,每人每次能從一堆石子中取任意多個石子但不能不取...
博弈論 演算法
博弈論主要研究公式化了的激勵結構間的相互作用,是研究具有鬥爭或競爭性質現象的數學理論和方法。博弈論考慮遊戲中的個體的 行為和實際行為,並研究它們的優化策略。如囚徒困境 鏈結 在演算法競賽 現的博弈論題目通常是icg 公平組合遊戲 的,有如下特徵 1.有兩名選手。2.兩名選手交替操作,每次一步,每步都...