這裡的博弈,即兩個人輪流進行決策的非合作博弈,並且兩人都使用最優策略來獲取勝利,遵循相同的規則且均不會出現失誤, 博弈的次數是有限的。
1.巴什博弈(bash game)
只有一堆n塊石子,兩個人輪流取石子,規定每次最少取1個,最多取m個,最終先取完者獲勝。通常來想,如果n=m+1,那麼無論先取者拿走多少個,後取者都能一次拿走剩餘的物品,後取者勝利。
(1). 如果n = (m+1) * r,(r為任意正整數),先取者拿走k塊石子,無論k為多少,後取者只要取(m+1-k),則後取者必勝。
(2). 如果n = (m+1) * r + s,(r為任意正整數,s<=m), 先取者拿走s塊石子【給對手留下了(m+1)的倍數,相當於交換了先後順序】後取者拿走k塊,先取者拿走(m+1-k)塊,那麼剩下 (m+1)*(r-1) 塊,故和(1)類似,則先取者必勝。
偽**:if(n%(m+1)!=0) 先取者必勝; else 後取者必勝;
2.威佐夫博奕(wythoff game)
有兩堆石子,兩人輪流從其中一堆至少取一塊石子,最多不限,或從兩堆中同時取相同件物品,規定先取完者獲勝。
可以用兩個數(a[k],b[k])(a[k]≤b[k])表示兩堆石子的數量。 如果說先手遇到了(0,0)這樣的局勢,那麼先手就輸了,被稱為
奇異局勢。
前幾個奇異局勢如下:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)···
首先要明確先手不能把任意一堆取完,如果取完了很明顯後手會取完另外一堆那麼先手必輸。
eg1.遇到(1,2),先手必輸。
4種取法:
1)取 1 中的乙個,那麼後手取第二堆中兩個。
2)取 2 中乙個,那麼後手在兩堆中各取乙個。
3)在 2 中取兩個,那麼後手在第一堆中取乙個。
4)兩堆中各取乙個,那麼後手在第二堆中取乙個。
遇到(3,5),先手必輸。
eg2.遇到(3,5),先手必輸。
考慮先看在一堆中取,取1個,後手在第2堆取4個,就變成(1,2)了;取2個,後手取3。考慮在第二堆裡取,同理...
規律:他們的差值是0,1,2,3..,n遞增的;還發現局面中第乙個值為前面局面中沒有出現過的第乙個值;發現第乙個值 = 差值 * 1.618 ;而1.618 = (sqrt(5)+ 1) / 2 。
0.618是**分割率。而威佐夫博弈正好是1.618!
3.尼姆博弈(nimm game)可以引申為多堆物品,
有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝。
(a,b,c)表示某種局勢,(0,0,0)顯然是必敗態;第二種必敗態是(0,n,n),先手在某一堆拿走k(k ≤ n)個物品,對方只要在另一堆拿走k個物品,都將面臨(0,0,0)的局勢。(1,2,3)也是必敗態,無論自己如何拿,接下來對手都可以把局勢變為(0,n,n)。【異或
也叫半加運算,其運算法則不帶進製的二進位制加法:二進位制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進製。異或簡稱為xor、eor、ex-or。】
看(1,2,3)的按位模2加的結果:
1 = 二進位制01
2 = 二進位制10
3 = 二進位制11 xor
——————————
0 = 二進位制00 (注意不進製)
對於奇異局勢(0,n,n),異或結果也是0。
任何奇異局勢(a,b,c)都有a^b^c = 0。
面對非必敗態(a,b,c),如何變為必敗態呢?
假設 a < b < c,我們只要將 c 變為a^b,即可。因為:a^b ^(a^b)=(a^a) xor (b^b)=0^0 =0
所以說:要將c 變為a xor b,只要對在c中取走 c-(a^b)這麼多即可。
4.fibonacci博弈
有一堆個數為n的石子,遊戲雙方輪流取石子,規定:
1)先手不能在第一次把所有的石子取完;
2)之後每次可以取的石子數介於1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)。
約定取走最後乙個石子的人為贏家,求必敗態。
當n為斐波那契數的時候,必敗。
f[n]:1,2,3,5,8,13,21,34,55,89,…
證明:根據「zeckendorf定理」(齊肯多夫定理):任何正整數可以表示為若干個不連續的fibonacci數之和。
如n=83 = 55+21+5+2 :假如先手取2顆,那麼後手無法取5顆或更多,而5是乙個fibonacci數,那麼一定是先手取走這5顆石子中的最後一顆,同理,接下去先手取走接下來的後21顆中的最後一顆,再取走後55顆中的最後一顆,那麼先手贏。
反證:如果n是fibonacci數,如n=89:記先手一開始所取的石子數為y
(1)若y>=34顆(也就是89的向前兩項),那麼一定後手贏,因為89-34=55=34+21<2*34。
(2)y<34時剩下的石子數x介於55到89之間,它一定不是乙個fibonacci數,把x分解成fibonacci數:x=55+f[i]+…+f[j],若,如果f[j]<=2y,那麼對b就是面臨x局面的先手,所以根據之前的分析,後手只要先取f[j]個即可,以後再按之前的分析就可保證必勝。
也可參考這個部落格:
ps. 關於p(previous)n(next)
必敗點(p點) :前乙個選手
(previous)將取勝的位置稱為必敗點。
必勝點(n點) :下乙個選手
(next)將取勝的位置稱為必勝點
。1.無法進行任何移動的局面是p-position。
2.可以移動到p-position的局面是n-position;
即如果當前的局面你如果可以勝利,那麼必然意味著你能創造乙個必輸的局面給對方
3.所有移動都導致n-position的局面是p-position。
即如果你是必輸的局面,那麼意味著不管比賽有沒有分出最後的結果,你的所有移動得到的結果都是對方勝利的局面,或者說都是對方又可以把你置為必輸的局面的位置
基礎博弈問題
time limit 1000 ms memory limit 65536 kib submit statistic problem description guns和roses是兩個好朋友,這一天他們比賽吃葡萄。假定他們有ans顆葡萄。在比賽之前他們會首先確定每次吃葡萄的數量的最大值為s,和ans...
基礎經典博弈
1.巴什博弈 題目一般是兩人輪流每次在n個物品中拿取不超過m個且至少拿乙個,拿光者勝出。我們可以將n個物品寫成k m 1 b b 0 所以先手先拿掉b個物品,後手只能拿x個物品 1 x m 這時先手再拿m 1 x個物品,迴圈往復可以保證先手的人最後拿完物品,先手就必勝。當b 0時無論先手怎麼拿,後手...
博弈基礎小結
巴什博弈 一堆n個物品,兩個人輪流取1 m個,最後乙個取光的人勝利 if n m 1 return false else return true wythoff博弈 兩堆各若干個物品,兩人輪流從一堆中取走至少乙個,或者從兩堆中取走相同數量的物品,最後乙個取光的人勝利 差值 分割比 最小值時後手贏,否...