青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

雁過無痕

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::

《編程之美》讀書筆記061.13 NIM(3)兩堆石頭的游戲

 

問題:

假設有兩堆石子,兩人輪流取石子,每次可以從一堆取任意個石子,或者從兩堆取相等數量的任意個石子,但不能不取。

若先把石子取光的一方為勝方,先取者有什么必勝策略?

若先把石子取光的一方為輸方,先取者的策略要進行怎樣調整?

 

記得初中時在學校門口的書店,買到一本《智力游戲中的數學方法》,當時如獲至寶。書中提到一個“皇后登山”游戲,就是在空的圍棋棋盤上放一個棋子,該棋子每次只能向上或向右或沿對角線向右上方向移動(和國際象棋中的皇后移動相似),可以移動任意格,但不能不移動,兩人輪流移動棋子,先將棋子移動到右上角者贏,問先移棋者的必勝策略。書中還提到這個撿石子游戲,并說明這兩個游戲是“同構”,必勝策略是相同的。

 

NIM游戲的“必勝策略”可以概括為:找出最終獲勝局面具有的某種性質,對具有該性質的局面的一次操作得到的新局面必然不具有這種性質,而對不具有該性質的局面,總可以通過一次操作,得到一個具有該性質的新局面。假設游戲雙方分別為AB,只要A方能到達具有該性質的某個局面,則B方一定不能到達具有該性質的任意一個局面,從而不能到達獲勝局面,因而B方必敗,即A方必勝。這種性質可以是對稱性(1.11的策略)、每堆數二進制表示各個位的和的奇偶性(1.12的策略)、屬于某個集合(1.13的策略)。

 

對于1.13NIM游戲,就是尋找這樣的一系列關鍵局面(包括最終獲勝局面),總可以通過一次操作將一個非關鍵局面轉為關鍵局面,而一次操作必將一個關鍵局面轉為非關鍵局面。因此,從一個關鍵局面到另一個關鍵局面至少要(并且能只要)兩次操作(“兩次操作原則”)

 

<a, b> (a<=b)表示兩堆的石子數分別為ab的局面。對所有的關鍵局面<x, y>,按x值大小升序排列,最終可用<Fn, Gn >(其中 Fn <= Gnn>=0)來表示第n個關鍵局面Mn, 并記<F0, G0 >為最終獲勝局面M0(對拿到最后一個獲勝的,M0=<0,0>,而對拿到最后一個輸的,M0=<0,1>),定義Tn=Gn-Fn >=0。每次取石子的操作規則為:從某一堆取任意個石子,或從兩堆同時取任意個相同的石子。從M0開始利用這個規則去除不合的局面。根據規則,顯然在已知M0 M1 … Mn 情況下,Mn+1 應該滿足:Fn+1不與任意一個FiGi0<=i<=n)相同,Tn+1也不與任意一個Ti0<=i<=n)相等。因而,可以假設:Fn+1是不與任意一個FiGi0<=i<=n)相同的最小非負整數,Tn+1是不與任意一個Ti相等的最小非負整數(0<=i<=n。由該假設得到的<Fn, Gn >即為關鍵局面,符合“必勝策略”。

 

(證:由假設,顯然有Fi >= Ti (i>=1)

 對關鍵局面<Fn, Gn >,設石子較少的那堆為X,較多的那堆為Y

  A方若在X堆,或在兩堆同時取k個石子,則由假設可知,X堆剩余的石子數必然與某個i或某個Gi0<=i<n)相等,B方可在Y堆取石子,到達另一個關鍵局面< Fi, Gi >)。

⑵ A方若在Y堆取走k個石子:

  k <= Tn,由假設必然可找到i,使得Ti=Tn-k0<=i<n),B方只要在兩堆同時取Fn-Fi個石子,即可到達關鍵局面< Fi, Gi >)。

⒉ 若k > Tn,則B堆剩余石子小于Fn,必然與某個i或某個Gi0<=i<n)相等。

A 若與某個Gi相等,則A堆只要再取Fn-Fi個石子,即可到達關鍵局面< Fi, Gi >

B  若與某個Fi相等:

如果Fn>Gi則在則A堆只要再取Fn-Gi個石子,即可到達關鍵局面< Fi, Gi >

如果Fn<Gi,必然可以找到j0<=j<i)使得Tj=Fn-Fi,兩堆同時取Fi-Fj個石子到達關鍵局面< Fj, Gj >

 對非關鍵局面<a, b>,由假設可知,a必與某個i或某個Gi0<=i<n)相等,因而,可以從另一堆取石子數,到達關鍵局面< Fi, Gi >;或從關鍵局面< Fi, Gi >某堆取石子到達非關鍵局面<a, b>,而由上面的證明可知,可以再通過一次操作,到達某個關鍵局面< Fj, Gj >。因此,總可以一次操作從非關鍵局面到達關鍵局面。

總之,由假設得到的關鍵局面符合“必勝策略”。)

 

拿最后一個贏:

n

0

1

2

3

4

T

0

1

2

3

4

F

0

1

3

4

6

G

0

2

5

7

10

由于T0=0,根據Tn的定義可得Tn=n,剛好是beatty序列,可由beatty序列的通項公式求得Fn的通項公式

 

拿最后一個輸:

n

0

1

2

3

4

T

1

0

2

3

4

F

0

2

3

4

6

G

1

2

5

7

10

n>=2時,關鍵局面與拿最后一贏的相同。

 

勝利條件為拿最后一個贏時,要找出所有關鍵局面(即書中的不安全點),最快的辦法就是得用通項公式,雖然通項公式有無理數,轉成浮點數,引起的誤差對結果沒多大影響(只有當N極大時,才會使結果不對)。對浮點計算十分昂貴的平臺,還是用篩選法,利用“在兩個GiGj間的數必然是某個Fk值”,篩選過程只須保留一部分Gn就可以計算出新的Fn

另外,對關鍵點<Fn, Gn=Fn+n>,當n>1時,從1FnFn個數,有nFi,還有Fn-n個在Gj。因而0<Fn-n<n,即有:n< Fn<2*n (n>1),在判斷<x,y>y>=x)是否是關鍵點,先判斷是否滿足這個不等式,如果滿足,才生成第y-xF值再進行判斷。由通項公式可知,

Fnint(1.618*n),可以強化邊界條件為:int(n*3/2)int(n*7/4)

 

(書上給出的定理是beatty定理。該定理的證明相當簡單,有興趣的可以google下。另外,上個世紀五六十年代,我國數學家曾在《數學通論》(有網絡版)發表過證明,好像還用到了Fibonacci的通項公式。)


void nim(int num) //print all the unsafe points
{
  assert(num
>0);
  vector
<int> g(num+3);
  
int n=2;            // f[2] is between [ g[1]+1 , g[2]-1 ]
  g[1]=2; g[2]=99;   //  g[2] should be initialized with a value above g[1]+1=3.
  int fn=g[1];
  
int *low=&g[2];
  
int *high=&g[n];
  
for( ; n <= num; ++n){
    
if++fn == *low){
      
++low;
      
++fn;
    }

    
*high++ = fn + n;      //f(n)=fn, g(n)=f(n)+n
  }


  
for(int i=1;i<=num;++i) {
    
//const double SS=(1.0+sqrt(5))/2.0+1.0;
    
//if ( (int)(i*SS) != g[i] )   cout<<"Error: " << i<< "\n";
    cout<< g[i]-i<< ","<<g[i]<<"  ";
  }

  cout
<<endl;

}




bool nim(int x, int y)     //whether win the game
{
  assert(x
>=0);
  assert(y
>=0);
  assert( 
!(x==0 && y==0));
  
int ff=x, gg=y, num;
  
if (x > y) ff=y, gg=x;   
  num
=gg-ff;            
  
if ( ff < num || ff > ( num << 1) ) return true;  //win the game

  vector
<int> g(num+3);
  g[
1]=2; g[2]=99;
  
int n=2, fn=g[1];
  
int *low=&g[2];
  
int *high=&g[n];
  
  
for( ; n <= num; ++n){
    
if ( ++fn == *low) ++low; ++fn;}
    
*high++ = fn + n;
  }
  

 
if (*--high == gg) return false;
 
else return true;
}



posted on 2010-08-15 23:58 flyinghearts 閱讀(2060) 評論(0)  編輯 收藏 引用 所屬分類: 編程之美
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲男人第一网站| 欧美人与性动交cc0o| 美女主播精品视频一二三四| 久久成人精品| 麻豆国产va免费精品高清在线| 午夜精品久久久久久久久久久久久| 一本色道久久88综合亚洲精品ⅰ | 午夜久久电影网| 亚洲男女自偷自拍图片另类| 香蕉久久a毛片| 久久精品国产久精国产一老狼| 久久精品国语| 欧美国产精品专区| 亚洲精品欧美一区二区三区| 99视频精品全部免费在线| 中文在线一区| 久久久久久久91| 欧美久久电影| 国产欧美综合在线| 在线视频成人| 宅男噜噜噜66国产日韩在线观看| 亚洲欧美一区二区激情| 久久精品日产第一区二区| 免费人成网站在线观看欧美高清| 亚洲精品社区| 午夜精品免费视频| 美女精品一区| 国产精品免费区二区三区观看| 国内成人在线| 宅男在线国产精品| 蜜桃av综合| 亚洲午夜视频| 日韩一级片网址| 一区二区高清在线观看| 久久精品电影| 欧美日韩亚洲精品内裤| 国产一区二区三区在线播放免费观看| 亚洲国产精品一区二区www在线| 亚洲一区二区精品在线观看| 麻豆精品91| 亚洲男人的天堂在线| 欧美高清在线一区二区| 国产一区二区三区在线免费观看| 一本色道久久88精品综合| 美女爽到呻吟久久久久| 亚洲欧美电影在线观看| 欧美精品一区二区三区四区 | 国产女人精品视频| 一本色道久久综合| 欧美14一18处毛片| 午夜在线电影亚洲一区| 国产精品成人在线观看| 亚洲卡通欧美制服中文| 另类酷文…触手系列精品集v1小说| 9国产精品视频| 欧美精品 日韩| 亚洲第一主播视频| 老司机精品视频网站| 羞羞答答国产精品www一本| 国产精品家庭影院| 亚洲婷婷综合久久一本伊一区| 亚洲高清不卡在线| 久久久久88色偷偷免费| 国产午夜精品福利| 久久国产日韩欧美| 午夜精品久久久久久久 | 亚洲精品国产拍免费91在线| 狼人社综合社区| 久久国产精品一区二区三区| 国产亚洲欧洲| 久久久久免费| 久久久久免费视频| 亚洲国产精品久久久久秋霞影院 | 欧美日韩精品一区二区三区四区 | 久久精品国产免费看久久精品| 亚洲一区二区在线看| 国产精品成av人在线视午夜片| 亚洲视频成人| 亚洲一区二区成人| 国产一区二区福利| 女人香蕉久久**毛片精品| 久久综合色天天久久综合图片| 亚洲国产精品久久久久秋霞影院| 欧美精品一区在线播放| 欧美日韩ab片| 亚洲制服av| 亚洲第一精品电影| 欧美视频日韩| 久久综合激情| 亚洲一区三区电影在线观看| 小嫩嫩精品导航| 国外成人在线视频| 久久视频在线视频| 亚洲国产精品精华液2区45| 国产在线拍揄自揄视频不卡99| 99精品国产在热久久下载| 亚洲日本欧美| 欧美激情91| 欧美国产日韩一区二区三区| 欧美性大战久久久久久久蜜臀| 欧美高清在线一区| 亚洲国产日韩精品| 欧美一区二区三区四区在线观看地址 | 亚洲一区二区三区四区在线观看 | 国产精品hd| 亚洲自拍偷拍麻豆| 欧美jizzhd精品欧美巨大免费| 精品白丝av| 欧美另类专区| 欧美一区二区三区视频免费播放| ●精品国产综合乱码久久久久| 好看的亚洲午夜视频在线| 国产精品一区二区在线观看| 欧美成人中文字幕| 久久久噜噜噜久久| 99日韩精品| 欧美激情中文字幕一区二区| 亚洲免费高清| 黄色成人在线观看| 亚洲电影免费观看高清| 亚洲国产日韩欧美| 亚洲激情电影在线| 亚洲欧洲一区二区在线观看| 国产一区二区欧美日韩| 国产精品二区二区三区| 欧美日本一区二区三区| 欧美成年人视频网站| 欧美日韩中文字幕在线| 欧美日韩高清不卡| 欧美日韩一二三区| 欧美sm重口味系列视频在线观看| 亚洲国产婷婷| 亚洲国产精品久久人人爱蜜臀 | 欧美国产日韩在线观看| 久久亚洲春色中文字幕| 国产精品xxxav免费视频| 国产精品欧美激情| 国产午夜精品视频免费不卡69堂| 国产精品区一区二区三区| 国产亚洲观看| 国产日产欧美精品| 一卡二卡3卡四卡高清精品视频| 精品999在线播放| 亚洲精品免费一区二区三区| 亚洲乱码精品一二三四区日韩在线 | 亚洲一区免费观看| 久久综合一区二区| 免费观看欧美在线视频的网站| 新狼窝色av性久久久久久| 久久日韩精品| 欧美一区二区三区在线观看视频 | 麻豆成人91精品二区三区| 亚洲免费久久| 欧美日韩国产999| 最新亚洲激情| 亚洲国产精品成人综合色在线婷婷| 一区二区三区国产在线观看| 欧美xxxx在线观看| 亚洲国产婷婷香蕉久久久久久| 久久久国产一区二区| 久久精品99无色码中文字幕| 国产亚洲欧美日韩精品| 美女亚洲精品| 久久久999精品视频| 久久精品综合网| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 亚洲免费观看高清完整版在线观看| 久久婷婷av| 亚洲国产精品电影在线观看| 国产精品视频成人| **欧美日韩vr在线| 影音先锋亚洲视频| 免费在线成人| 亚洲欧美成人网| 国产人久久人人人人爽| 亚洲欧美色一区| 欧美一区日韩一区| 亚洲激精日韩激精欧美精品| 蜜臀久久99精品久久久久久9 | 女人香蕉久久**毛片精品| 老色鬼久久亚洲一区二区| 国产精品一区=区| 欧美大色视频| 国产精品超碰97尤物18| 久久久久久97三级| 欧美大片在线观看| 亚洲欧美激情视频在线观看一区二区三区| 久久国产88| 欧美日韩亚洲一区二区三区在线观看| 欧美一区亚洲| 久久综合国产精品台湾中文娱乐网| 亚洲大片免费看| 久久久久久夜| 久久成人久久爱| 欧美www在线| 欧美凹凸一区二区三区视频| 欧美日韩喷水| 欧美一区午夜视频在线观看| 国产精品高清免费在线观看| 日韩视频免费在线观看|