博弈論 入門,持續更新

2022-03-30 20:43:20 字數 2649 閱讀 2658

本篇只對尼姆博弈和巴什博弈進行介紹(其餘博弈遇到了再加進去)

定義:博弈論,又稱為對策論(game theory)、賽局理論等,既是現代數學的乙個新分

支,也是運籌學的乙個重要學科。博弈論 是二人在平等的對局中各自利用對方的策略變換自己的

對抗策略,達到取勝的目的。

巴什博弈:只有一堆n個物品,兩個人輪流從這堆物品中取物, 規定每次至少取乙個,最多

取m個。最後取光者得勝。

顯然,如果n=m+1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都

能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則:如果n=(m+1)

r+s,(r為任意自然數,s≤m),那麼先取者要拿走s個物品,如果後取者拿走k(≤m)個,那麼先

取者再拿走m+1-k個,結果剩下(m+1)(r-1)個,以後保持這樣的取法,那麼先取者肯定獲

勝。總之,要保持給對手留下(m+1)的倍數,就能最後獲勝。這個遊戲還可以有一種變相的

玩法:兩個人輪流報數,每次至少報乙個,最多報十個,誰能報到100者勝。對於巴什博弈,

那麼我們規定,如果最後取光者輸,那麼又會如何呢?(n)%(m+1)==0則後手勝利

先手會重新決定策略,所以不是簡單的相反行的

例如n=15,m=3

後手 先手 剩餘

0 2 13

1 3 9

2 2 5

3 1 1

1 0 0

先手勝利 輸的人最後必定只抓走乙個,如果》1個,則必定會留乙個給對手

(m+1)==0的形式轉化為n=(m+1)r+s的形式,也就是把先手轉化為後手;原本後手變為先手;

例題:洛谷好像沒有巴什博弈的例題

從別的佬部落格裡搬運了幾道

hdu1847

hdu2147

hdu2149

hdu2188

hdu2897

有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,

最後取光者得勝。

這種情況最有意思,它與二進位制有密切關係,我們用(a,b,c)表示某種局勢,首先(0,0,

0)顯然是奇異局勢,無論誰面對奇異局勢,都必然失敗。第二種奇異局勢是(0,n,n),只要

與對手拿走一樣多的物品,最後都將導致(0,0,0)。仔細分析一下,(1,2,3)也是奇異局

勢,無論自己如何拿,接下來對手都可以將其變為(0,n,n)的情形。

計算機演算法裡面有一種叫做按位模2加,也叫做異或的運算,我們用符號⊕表示這種運算,先看

(1,2,3)的按位模2加的結果:

1 =二進位制01

2 =二進位制10

3 =二進位制11 ⊕

0 =二進位制00 (注意不進製)

對於奇異局勢(0,n,n)也一樣,結果也是0。

任何奇異局勢(a,b,c)都有a⊕b⊕c =0。

注意到異或運算的交換律和結合律,及a⊕a=0,:

a⊕b⊕(a⊕b)=(a⊕a)⊕(b⊕b)=0⊕0=0。

所以從乙個非奇異局勢向乙個奇異局勢轉換的方式可以是:

1)使 a = c⊕b

2)使 b = a⊕c

3)使 c = a⊕b

證明可以看一下下面這位佬的部落格 鏈結

以這道題為例洛谷 p4279 shoi2008小約翰的遊戲

#include#include#include#includeusing namespace std;

int t;

int a[1000];

int ans;

int n;

int sum;

int main()

ans=0;

sum=0;

for(int i=1;i<=n;i++)

if(sum==n){

puts(sum&1?"brother":"john");

// cout《我們考慮證明

分類討論再將相同情況合併

1 當每一堆的石子數都為1時,當堆數為奇數時先手輸,否則後手輸

2 當有且有一堆石子的個數》=2其餘均為單個石子時,我們可以通過調整使下一狀態下的全為單個石

子且數量可為奇數可為偶數,故,無論是誰,遇到這個狀態其必將勝利

3 當有至少2堆的石子數》=2

顯然石子必然要在減少的過程中由3狀態變為2狀態,

因為2狀態下存在大於等於2的那堆石子,所以可知2狀態下異或和一定大於0(存在較高位)

假設我們3狀態下異或和大於0,則我們可將下一狀態的異或和變為0或者仍然大於0(證明過程和尼姆

博弈的過程相同)

假設我們3狀態下異或和等於0,我們通過取石子,只能使下一狀態的異或和大於0,

我們已知2狀態下異或和大於0,所以當我們處於狀態3且異或和大於0時,我們可以通過調整使

下一狀態的異或和等於0,但下一狀態只能讓下下狀態的異或和大於0,所以當處於第三種情況時,

若異或和大於0,那麼先手一定勝利,等於0則先手失敗。

我們進行一下總結,由於第一種情況與後兩種情況無法進行合併,所以對第一種情況進行特判定

對2.3種情況進行合併,即大於0先手一定勝利。

證明完畢

完結撒花。

其實這只是博弈論很少一部分,本題好像由sj定理可以直接做?(但我不會)

sg函式也不會(sg函式的題很少),以後遇到再學吧.我還是太菜了(真);

博弈論入門

博弈論 是二人或多人在平等的對局中各自利用對方的策略變換自己的對抗策略,達到取勝目標的理論。博弈論是研究互動決策的理論。博弈可以分析自己與對手的利弊關係,從而確立自己在博弈中的優勢,因此有不少博弈理論,可以幫助對弈者分析局勢,從而採取相應策略,最終達到取勝的目的。一.bash博弈 問題 只有一堆n個...

博弈論入門

參考 三個簡單的博弈論問題 博弈 1066 bash遊戲 原題傳送 有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次最少拿1顆,最多拿k顆,拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n和k,問最後誰能贏得比賽。例如n 3,k 2。無論a如何拿,b都可以拿到最...

博弈論入門

什麼是博弈 通俗地講,博弈就是指遊戲中的一種選擇策略的研究。博弈的英文為 game 我們一般將它翻譯成 遊戲 而在英語中,game 的意義不同於漢語中的遊戲,它是人們遵循一定規則的活動,進行活動的人的目的是讓自己 贏 我們在和對手競賽或遊戲的時候怎樣使自己贏呢?這不但要考慮自己的策略,還要考慮其他人...