關於SG函數的一些演算

問題

在一個有n堆石子的取石子游戲中,雙方玩家根據既定規則,依次輪流從n堆石子中取走石子,且每人每次只能從單一的堆中取出石子.當某個玩家無法按照既定規則取出石子時,該玩家落敗,同時另一名玩家獲勝.

現在,給定n堆石子,問先手玩家是否可以獲勝.

定義

將第i堆石子記爲hi,用元組(h1,h2,…,hn)表示由這n堆石子組成的局面S,記爲:

S=(h1,h2,…,hn)

特別地,當n=1時,記爲S=(h1)S=h1.這樣,hi除了可以表示一堆石子外,還可以表示一個只有一堆石子的局面.

局面的後繼:若局面S經歷一次取出後變爲局面T,則稱T是S的後繼.
結束局面:若玩家無法按照既定規則從S中取出石子,則稱S爲”結束局面”,結束局面沒有後繼.

mex函數

定義非負整數冪集上的函數mex:

mex(A)=min({x|x∈N-A})

直觀上,可將mex理解爲”集外最小序數”.

f函數

定義堆集合上的函數f:

f(h)= mex({f(i)|i是h的後繼})

特別地,若h是一個結束局面,則f(h)=0.

現在,將f的定義域擴展到n維:

f(h1,h2,…,hn) = f(h1)⊕f(h2)⊕…⊕f(hn)

再次擴展f,使其可以作用於局面.即對於任意局面:

S=(h1,h2,…,hn)
T=(i1,i2,…,im)

定義:

f(S)=f(h1,h2,…,hn)
f(S,T)=f(h1,…,hn,i1,i2,…,im)

結論

f具有下列性質:

  • S是結束局面,則f(S)=0
  • f(S)=0,則f(T)!=0
  • f(S)!=0,則存在T,f(T)=0

進一步:

  • f(S)=0,則先手玩家必敗
  • f(S)!=0,則先手玩家必勝

證明

不加證明地給出關於異或(⊕)運算的下列性質:

  • 性質1: a⊕b=0當且僅當a=b
  • 性質2: 若a⊕b=c,則a⊕c=b
  • 性質3: 若a=a1⊕a2⊕…⊕an,則存在ai(1≤i≤n)滿足:ai⊕a<ai

同時給出關於f的下列性質:

  • f(h1,h2,…,hn)=f(h1,…,hi)⊕f(hi+1,…,hn), 1<i<n

證明:若S是結束局面,則f(S)=0

S只包含一個堆,f(S)=mex(∅)=0.
S=(h1, h2, …, hn),
顯然對於∀i(1≤i≤n),hi是結束局面.
所以 f(S)=f(h1)⊕f(h2)⊕…⊕f(hn)=0

證明:若f(S)=0,則∀T,若TS的後繼則f(T)≠0

S=(h1, h2, …, hn),
因爲 f(S)=0
所以 f(h1)⊕f(h2)⊕…⊕f(hn)=0
所以 f(h1)=f(h2)⊕…⊕f(hn)(的性質1)

不妨設T是玩家從h1中取走石子後生成的局面.
T=(h1*, h2, …, hn)
所以 f(T)= f(h1)⊕f(h2)⊕…⊕f(hn)=f(h1)⊕f(h1*)

注意到h1*h1的後繼,由f的定義易知:
f(h1*)≠f(h1)
所以 f(h1*)⊕f(h1)≠0(的性質1)
所以 f(T)≠0

證明:若f(S)≠0,則∃T,TS的後繼且f(T)=0

S=(h1, h2, …, hn),f(S)=a>0,
不妨設h1⊕a=b<h1
又設T=(h1*, h2, …, hn),
易知:f(T)=a⊕f(h1)⊕f(h1*),
即:f(T)=b*f(h1*),
另一方面,由mex的定義可知,對∀0≤x<a, ∃i st. f(i)=x ih1的後繼,
所以必存在: h1*=b
即必有T st. f(T) = 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章