組合遊戲
遊戲規則
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
- 664