日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

初学博弈论

發布時間:2025/3/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 初学博弈论 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、巴什博奕(Bash Game)

基本描述:

只有一堆n個石子,兩個人輪流從這堆石子中取石子,規定每次至少取一個,最多取m個,最后取完的人獲勝。

分析:

  • 當n <= m的時候,顯然先手獲勝,因為一次就能取完。
  • 當n = m+1 的時候,由于先手最多取走m個,無論其取走多少個,剩下的后手均可以一次取完,顯然后手勝。
  • 根據以上分析,我們可以將n寫成 n = (m+1) * r + s 的形式。對于先手玩家,我們可以取走s個,給對方造成剩下(m+1) 整數倍的情形。此時無論對手取走多少個,假設對手取走k個, 我們一定可以做到取走 (m+1-k)個,此時剩下(m+1) * (r-1)個,那么留給對方又是(m+1)的整數倍,如此就可以保證 先手 取勝。
  • 結論:

  • 當 n <=m 時,先手必勝。
  • 當 n % (m+1) = 0時,后手必勝。
  • 當 n % (m+1) != 0時,先手必勝。
  • 其中上述的情況1和3可以合并,故:

  • 當 n % (m+1) = 0時,后手必勝。
  • 當 n % (m+1) != 0時,先手必勝。
  • 注意:

  • 變形玩法:兩個人輪流報數,每次至少1個數,最多報10個數字,誰先報到100取勝。
  • 練習:

  • HDU 1846
  • HDU 2149
  • HDU 2188
  • HDU 4764
  • 二、PN點分析

    什么是PN點

  • P點,即必敗點。前一個選手(Previous player)將取勝的位置稱為必敗點。
  • N點,即必勝點。下一個選手(Next player)將取勝的位置稱為必勝點。
  • PN點的屬性

  • 所有終結點均為必敗點(P點);
  • 從任何必勝點(N點)操作,至少有一種方法可以進入必敗點(P點);
  • 無論如何操作,必敗點(P點)都只能進入必勝點(N點)。
  • 分析步驟

  • 將所有終結位置標記為必敗點(P點);
  • 將所有一步能進入必敗點(P點)的位置標記為必勝點(N點);
  • 如果從某個點開始的所有一步操作都只能進入必勝點(N點),則將該位置標記為必敗點(P點);
  • 如果在步驟3中未能找到新的必敗點(P點),算法終止,否則返回步驟2.
  • 結論

  • 當行列都是奇數的時候,一定是必敗點;
  • 否則為必勝點。
  • 注意

  • 至于結論怎么推出來的,大家畫一下3 * 4, 4 * 4, 3 * 3的PN分析圖就知道了。
  • 練習

  • HDU 2147
  • 三、斐波那契博弈

    基本描述

    有一堆個數為n的石子,游戲雙方輪流取石子,滿足:

  • 先手不能再第一次把所有石子取完;
  • 之后每次可以取的石子數介于1到對手剛取的石子數的2倍之間,包括1和對手取的石子數的2倍。
    取最后石子的人為贏家。
  • 結論

    先說結論:
    當且僅當n不是Fibonacci數時,先手必勝。換句話說,先手必敗構成Fibonacci數列。

    分析

    證明需要前置技能,“Zeckendorf定理”(齊肯多夫定理),其表述為:任何正整數可以表示為若干個不連續的Fibonacci數之和。

    具體證明在這篇博文中給出,有興趣的讀者可以自行學習。

    練習

  • HDU 2516
  • 四、威佐夫博弈

    基本描述

    有兩堆各若干個石子,兩個人輪流從某一堆或者兩堆中取同樣多的物品,規定每次至少取一個,多著不限,最后取完石子的人獲勝。

    分析

    設這兩堆石子分別有(A,B)個,并且A<=B。我們先來看一下先手必敗的局勢。

  • (0,0) 先手必敗,很明顯他沒得取了。
  • (1,2) 先手必敗。具體分析一下,先手有以下幾種取法:
    取第一堆的1個,后手取走第二堆的2個獲勝。
    從第一堆第二堆各取1個,后手取走第二堆剩下的1個獲勝。
    取第二堆的1個,后手從第一堆第二堆各取1個獲勝。
    取第二堆的2個,后手取走第一堆的1和獲勝。
    綜上所述,先手必敗。
  • (3,5) 先手必敗。 首先可以明確的一點是,先手不能把任意一堆取完,如果取完顯然必敗。
    先討論先手從第一堆中取的情況
    先手可以從第一堆中取1個,后手從第二堆中取4個,轉化為(1,2),先手必敗。
    先手可以從第一堆中取2個,后手從第二堆中取3個,轉化為(1,2),先手必敗。
    再討論先手從第二堆中取的情況
    先手可以從第二堆中取1個,后手從兩堆中各取2個,轉化為(1,2),先手必敗。
    先手可以從第二堆中取2個,后手從兩堆中各取3個,轉化為(0,0),先手必敗。
    先手可以從第二堆中取3個,后手從兩堆中各取1個,轉化為(1,2),先手必敗。
    先手可以從第二堆中取4個,后手從第一堆中取2個,轉化為(1,2),先手必敗。
    接著討論先手從兩堆中取的情況
    先手可以從兩堆中各取1個,轉化為(2,4),此時情況較多
    后手足夠聰明,他從第二堆中取了1個,轉化為(2,3),先手也足夠聰明,他為了不直接輸掉,從第一堆中取了1個(其他取法直接輸掉了),轉化為(1,3),此時后手從第二堆中取1個,轉化為(1,2),先手必敗。
    先手可以從兩堆中各取2個,后手從第二堆中取一個,轉化為(1,2),先手必敗。
    綜上所述,先手必敗。
  • 其他的先手必敗局勢
    (4,7),(6,10),(8,13),(9,15),(11,18).

  • 我們將先手必敗局勢的集合,稱為奇異局勢。

  • 奇異局勢的性質

  • 任何自然數都包含在一個且僅有一個奇異局勢中。
  • 任意操作都可將奇異局勢變為非奇異局勢。
  • 采用適當的方法,可以將非奇異局勢變為奇異局勢。
  • Betty定理

    我們可以發現,將所有奇異局勢按照第一堆的石子的數目從小到大排列,每個奇異局勢的差值是自然數列
    進一步觀察發現,對于一個奇異局勢(A,B), A = 下取整[ (B-A) * 1.618 ],更準確的說,1.618 = (sqrt(5) + 1) / 2.

    為什么會是這樣的? 具體的證明涉及到Betty的定理,有興趣的讀者可以百度,這里不再贅述。

    常見的幾類問題

  • 給出一個局面,判斷先手輸贏。
    檢查是否是奇異局勢。
  • 給出局面,判斷先手輸贏,若贏,求出首步取法。
    由于差值是固定的,根據差值計算。
  • 練習

  • POJ 1067
  • HDU 1527
  • 51NOD 1072
  • HDU 2177
  • NYOJ 161
  • 五、尼姆博弈

    基本描述

    有三堆石子, 每堆有若干個,兩個人輪流從某一堆中任取石子,每次至少取一個,多者不限,最后取完者獲勝。

    分析

    用(A,B,C)來表示某一特定局勢,同時規定A<=B<=C。奇異局勢表示先手必敗。

  • 顯然(0,0,0)是奇異局勢。
  • (0,n,n)是奇異局勢,當先手拿走s個石子時,我們對應拿走s個石子,最終轉化為(0,0,0)。
  • (1,2,3)也是奇異局勢,無論先手如何取,我們都可以轉化為(0,n,n)的局勢。
  • 對于一個奇異局勢(A,B,C),我們可以發現,A(XOR)B(XOR)C = 0。
    下面一條需要的前置技能
    設有數字a,b,a(XOR)b(XOR)(a(XOR)b) = (a(XOR)a)(XOR)(b(XOR)b) = 0
    對于一個非奇異局勢(A,B,C),我們只需要將C轉化為(A(XOR)B)即可,而將C轉化為(A(XOR)B)的操作為,C = C-(A(XOR)B)即可。

    注:

  • 異或在C語言中的符號為^。
  • 對于此情景來說,可以推廣到N堆石子,奇異局勢的條件為A1(XOR)A2(XOR)A3(XOR)……AN(XOR) = 0。
  • A(XOR)B(XOR)B = A,可推廣到N個變量,A1(XOR)A2(XOR)A3(XOR)……(XOR)AN(XOR)AN(XOR)AN-1(XOR)……(XOR)A3(XOR)A2 = A1;
  • 練習

  • HDU 1850
  • 六、SG函數

    基本描述

    SG函數為計算博弈狀態的函數,當SG[X] = 0時,說明先手必敗。
    為了求解SG函數,首先定義mex(minimal excludant)運算,這是施加于一個集合的運算,表示最小的不屬于這個集合的非負整數。例如mex{0,1,2,4}=3、mex{2,3,5}=0、mex{}=0。
    對于任意狀態 x , 定義 SG(x) = mex(S),其中 S 是 x 后繼狀態的SG函數值的集合。如 x 有三個后繼狀態分別為 SG(a),SG(b),SG(c),那么SG(x) = mex{SG(a),SG(b),SG(c)}。
    這樣 集合S 的終態必然是空集,所以SG函數的終態為 SG(x) = 0,當且僅當 x 為必敗點P時。

    說起來很抽象,舉一個具體的例子來說明一下。

    實例:取石子游戲

    游戲規則:

    有1堆n個的石子,每次只能取{ 1, 3, 4 }個石子,先取完石子者勝利,那么各個數的SG值為多少?

    SG分析

    SG[0] = 0(顯然沒有石子可取時必敗);
    f[] = {1,3,4}(表示每次取有3中方案,取1個,取3個,取4個);

    當石子x = 1時,可以取走1-f{1}個石子,SG[1] = mex(SG[1-1]) = mex(0) = 1;
    當石子x = 2時,可以取走2-f{1}個石子,SG[2] = mex(SG[2-1]) = mex(1) = 0;
    當石子x = 3時,可以取走3-f{1,3}個石子,SG[3] = mex(SG[3-1],SG[3-3]) = mex(0,0) = 1;
    當石子x = 4時,可以取走4-f{1,3,4}個石子,SG[4] = mex(SG[4-1],SG[4-3],SG[4-4]) = mex(1,1,0) = 2;

    以此類推…

    我們可以打出SG函數的表,根據表來判斷是先手必勝還是先手必敗。

    練習

  • HDU 1847
  • HDU 1848
  • 七、更多的練習

  • POJ 2234
  • HDU 4388
  • POJ 2975
  • HDU 1367
  • POJ 2505
  • ZOJ 3057
  • POJ 2484
  • POJ 2425
  • POJ 2960
  • POJ 1740
  • POJ 1704
  • POJ 2068
  • POJ 3480
  • POJ 2348
  • HDU 2645
  • POJ 3710
  • POJ 3533
  • 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的初学博弈论的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。