博弈论讲解(二)
文章目錄
- 斐波那契博弈
- 問題:
- 結論
- 證明:
- 尼姆博奕(Nimm Game)
- 問題:
- 結論:
- 證明:
- 代碼:
- 公平組合博弈(Impartial Combinatori Games)
理論知識
(1)、若面臨末狀態者為獲勝則末狀態為勝態否則末狀態為必敗態。
(2)、一個局面是勝態的充要條件是該局面進行某種決策后會成為必敗態。
(3)、一個局面是必敗態的充要條件是該局面無論進行何種決策均會成為勝態
斐波那契博弈
問題:
有一堆數量為n的石子,游戲雙方輪流取石子,滿足:
(1)先手不能在第一次把所有的石子取完;
(2)之后每次可以取的石子數介于1到對手剛取的石子數的2倍之間(包含1和對手剛取的石子數的2倍)。
約定取走最后一個石子的人為贏家。
求必敗態
結論
當n為斐波那契數時,先手必敗。
證明:
齊肯多夫(zeckendorf)定理:
任何正整數都可以表示成若干個不連續的斐波那契數(不包括第一個斐波那契數)之和
比如n=54,
n還可以寫成:n=2+5+13+34
先手A取兩個,后手B取的范圍是1~4,也就是5之后取不了,那第五個肯定被A拿了(因為至少拿一個),也就是拿走了5的最后一顆,接下來,A也能拿走13的最后一顆,拿走34的最后一顆,這樣A就贏了。
反之如果n是斐波那契數,A就輸了
尼姆博奕(Nimm Game)
問題:
有三堆各若干個物品,數量分別是(a,b,c),兩個人輪流從某一堆取任意多的物品,規定每次至少取一個,多者不限,最后取光者得勝。
結論:
如果每堆物品數全部異或起來,得到的值時0則先手必敗,反之先手則贏
(a,b,c)的必敗態等于a ^ b ^ c =0
如果石頭有n堆,如果每堆數目進行異或后為0,則是必敗態
證明:
略。。
代碼:
for(int i=1;i<=n;i++) { cin>>ans; sum^=ans; } if(sum==0) cout<<"后手必勝"<<endl; else cout<<"先手必勝"<<endl;公平組合博弈(Impartial Combinatori Games)
這個第一次見,還沒搞懂
總結
- 上一篇: 过年拜年简短祝福语
- 下一篇: 风在吼马在叫黄河在咆哮歌词 完整的风在吼