組合遊戲

遊戲規則

1.回答問題時,可能可以為自己的小隊加分

2.提出不懂的問題也可能會幫小隊加分

3.得到最多分的小隊可以獲得奇怪禮物

一三遊戲

小試身手

規則介紹

現在桌上有n個石頭,Alice和Bob輪流進行操作,由Alice先。每次一個人的操作是拿走一到三顆石頭。當輪到某方但其不能進行操作時,該方落敗,另一方獲勝。

 

n = 11

五分鐘玩玩看

戰略分享

先的人一定贏嗎?

先的人甚麼時候會贏?

先的人要怎麼贏?

(如果他能贏)

為什麼?

狀態圖(n = 11)

11

10

9

8

7

6

5

4

3

2

1

0

簡單名詞介紹

組合遊戲

常指全知且不含機率成分的二人序列遊戲(有先後手之分),且在有限步之內會出現唯一贏家

EX:圍棋、象棋(若排除和局)

無偏遊戲

指目前可行的走法只跟局勢有關,而跟輪到哪一方無關

EX:圍棋、象棋都不是

(因為不共用棋子)

今天的主題就是無偏組合遊戲!

先手必勝

先手存在一個策略使得後手無論如何行動,先手皆可獲勝

後手必勝

先手不存在一個策略使得後手無論如何行動,先手皆可獲勝

狀態圖上

後手必勝:該狀態只能走到先手必勝的狀態(或結束狀態)

先手必勝:該狀態存在一種以上(包含)的方法走到後手必勝的狀態

 

剛剛的狀態圖(n = 11)

11

10

9

8

7

6

5

4

3

2

1

0

一三遊戲v.2

剛剛只有一堆石頭,現在假設有兩堆石頭,每次玩家可以選一堆拿走一到三顆石頭

先先必先?

1      1

先先必後?

1      2

我們無法僅靠兩邊的先後手必勝狀態來判定誰必勝

狀態圖(n = 11)

11

10

9

8

7

6

5

4

3

2

1

0

0 1 2 3
0
1
2
3

為什麼?

「狀態的維持」很重要

  • 只有一堆    

維持四的倍數

維持兩堆等量

  • 有兩堆        

如果有超多堆,我們要維持甚麼?

多堆一三遊戲:https://omeletwithoutegg.github.io/1-3-nim/

謝謝林秉軒!

show time

二進位制

想不到吧!

解讀二進位

 

1  1  0  1

..................

1101(二進位) => 13(十進位)

轉換二進位

從大的開始減

目前 23 7 7 3 1
位數 16 8 4 2 1
二進位 1 0 1 1 1

23(十進位) => 10111(二進位)

練習製造完美(轉成十進位)

  • 101

  • 10101

  • 100011

  • 110010110

練習製造完美(轉成二進位)

  • 7

  • 21

  • 72

  • 103

xor

互斥或

一種運算符號

a xor b

a\( \oplus \)b

EX: 19 \( \oplus \) 23

第一步:轉換二進位

19 => 10011

23 => 10111

第二步:直式加法除二去餘數

1 0 0 1 1
1 0 1 1 1
2 0 1 2 2
0 0 1 0 0

第三步:轉回十進位

00100 => 4

 

 

所以19\( \oplus \)23 = 4

練習製造完美(xor計算)

  • 7\( \oplus \)5

  • 13\( \oplus \)9

  • 35\( \oplus \)62

xor 小性質

  • a\( \oplus \)0 = a

  • a\( \oplus \)a = 0

  • a\( \oplus \)b = b\( \oplus \)a

  • a\( \oplus \)(b\( \oplus \)c) = (a\( \oplus \)b)\( \oplus \)c

別急!!!

SG值

SG值:對於每個遊戲中的狀態,我們給它一個數字表示

這個狀態是結束狀態則SG值為零

否則它的SG值是未出現在它下一步能走到的狀態的SG值中的最小非負整數

0

1

2

0

1

0:後手必勝

其他:先手必勝

狀態圖(n = 11)

11

10

9

8

7

6

5

4

3

2

1

0

狀態圖(n = 11)

11(3)

10(2)

9(1)

8(0)

7(3)

6(2)

5(1)

4(0)

3(3)

2(2)

1(1)

0(0)

有啥用?

SG定理

很多獨立的遊戲:在其中一個遊戲進行操作不會影響到其他遊戲的狀態。

結論:若一個遊戲可以分成很多各自獨立的子遊戲,則該遊戲中某個狀態的SG值就是所有子遊戲的SG值xor起來

結論:若多堆一三遊戲可以分成很多各自獨立的單堆一三遊戲,則多堆一三遊戲中某個狀態的SG值就是所有單堆一三遊戲的除以四的餘數xor起來

過程重現

換你們玩玩看!

3 2 1

5 9 7 2 8

稍微提一下簡單的證明

*以下用的nim number

即指整個遊戲的SG值

我們要證:

1. 如果目前的nim number是\(b\),且\(b > 0\),一定有辦法透過進行一次操作到達nim number 為\(a\)(對於所有\(0\leq a<b\))的情況。

以下用\(a_1, a_2,a_3, \cdots , a_n\)表示各堆遊戲的SG值

必存在一個\( a_i\),使得\( a \oplus b \oplus a_i < a_i\)

且因為\( a_i\)是SG值,故把SG值為\( a_i\)的的那個遊戲的遊戲透過一次操作使該遊戲SG值為\( a \oplus b\) ,則nim number 為\( a_1 \oplus a_2 \oplus ... \oplus a_{i-1} \oplus (a\oplus b\oplus a_i)\oplus a_{i+1}\oplus ... \oplus a_n = b \oplus b \oplus a = a\)

必存在一個\( a_i\),使得\( a \oplus b \oplus a_i < a_i\)

為甚麼?

令\(c = a \oplus b\),且\(c\)轉成二進位的最高位為\(k\),則\(b\)的第\(k\)位也為 1,否則\(a < b\)

又必存在一個\(a_i\)的第\(k\)位為一(否則\(b\)的第\(k\)位不為一)

此\(a_i\)符合\(a_i \oplus c < a_i\)

我們要證:

2. 如果目前的nim number是\(b\),則經過一次操作之後,nim number不可能是\(b\)。

\(a_1 \oplus a_2 \oplus a_3 \oplus... \oplus a_n = b\)

假設我們把\(a_i\)改成t

則新的 nim number是\(b\oplus ai\oplus t\),

且\(ai\oplus t  != 0\)(因為\(t != a_i\))

故\(b\oplus (ai\oplus t) != b\)

 

YEE!

NIM

給你N堆石頭,每堆石頭有\(a_i\)顆,每次你可以從一堆石頭拿任意顆,沒得拿的人輸,問你誰會贏?

Play Play See!

怎麼做?

一樣考慮單堆的SG值

石頭數 0 1 2 3 4
SG值

0

1

2

3

4

再全部xor起來!

(因為每堆是獨立遊戲!)

練習製造完美(誰會贏?)

1 2 3

3 4 7

5 6 7 8 9

尼姆在哪裡?

接下來的問題交給大家

(也可以玩玩看!)

一排格字上有很多石頭,每次可以選一顆石頭,往左移任意格(也可移出遊戲),不能操作者輸

有一排硬幣,有些正面朝上,有些背面朝上,每次操作可以把一個正面朝上的硬幣翻面,並可以選擇要不要將另一個位於該硬幣左側的任意硬幣翻面。

給你一個\(N\times M\)的蛋糕,在第\(x\)行\(y\)列有一顆草莓,每次可以切橫的一刀或直的一刀(切出之矩形邊常須為整數),並把沒有草莓的部分吃掉,誰不能切就輸了。

拿到最後一個石頭的人輸的NIM

一次可以從任意K(常數)堆石頭拿任意顆的NIM

SG之外

回到初衷:打表觀察

有一堆石頭,每次可以拿\(2^k(k \geq 0)\)顆石頭,不能拿的人輸

其他巧思

有一個\(N\times M\)的白色方格紙,每次可以選一個白色格子,把它右上角(包含它)的格子都塗成黑色,選到最左下角那格的人輸。

考慮一個規則一模一樣的遊戲,但最右上那格不能選。

謝謝大家!

deck

By Zi-Hong Xiao

deck

  • 597