組合遊戲
遊戲規則
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⊕b
EX: 19 ⊕ 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⊕23 = 4
練習製造完美(xor計算)
-
7⊕5
-
13⊕9
-
35⊕62
xor 小性質
-
a⊕0 = a
-
a⊕a = 0
-
a⊕b = b⊕a
-
a⊕(b⊕c) = (a⊕b)⊕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≤a<b)的情況。
以下用a1,a2,a3,⋯,an表示各堆遊戲的SG值
必存在一個ai,使得a⊕b⊕ai<ai
且因為ai是SG值,故把SG值為ai的的那個遊戲的遊戲透過一次操作使該遊戲SG值為a⊕b ,則nim number 為a1⊕a2⊕...⊕ai−1⊕(a⊕b⊕ai)⊕ai+1⊕...⊕an=b⊕b⊕a=a
必存在一個ai,使得a⊕b⊕ai<ai
為甚麼?
令c=a⊕b,且c轉成二進位的最高位為k,則b的第k位也為 1,否則a<b
又必存在一個ai的第k位為一(否則b的第k位不為一)
此ai符合ai⊕c<ai
我們要證:
2. 如果目前的nim number是b,則經過一次操作之後,nim number不可能是b。
a1⊕a2⊕a3⊕...⊕an=b
假設我們把ai改成t
則新的 nim number是b⊕ai⊕t,
且ai⊕t !=0(因為t!=ai)
故b⊕(ai⊕t)!=b
YEE!
NIM
給你N堆石頭,每堆石頭有ai顆,每次你可以從一堆石頭拿任意顆,沒得拿的人輸,問你誰會贏?
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×M的蛋糕,在第x行y列有一顆草莓,每次可以切橫的一刀或直的一刀(切出之矩形邊常須為整數),並把沒有草莓的部分吃掉,誰不能切就輸了。
拿到最後一個石頭的人輸的NIM
一次可以從任意K(常數)堆石頭拿任意顆的NIM
SG之外
回到初衷:打表觀察
有一堆石頭,每次可以拿2k(k≥0)顆石頭,不能拿的人輸
其他巧思
有一個N×M的白色方格紙,每次可以選一個白色格子,把它右上角(包含它)的格子都塗成黑色,選到最左下角那格的人輸。
考慮一個規則一模一樣的遊戲,但最右上那格不能選。
謝謝大家!
組合遊戲
deck
By Zi-Hong Xiao
deck
- 705