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

雁過(guò)無(wú)痕

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

 

問(wèn)題:

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

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

若先把石子取光的一方為輸方,先取者的策略要進(jìn)行怎樣調(diào)整?

 

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

 

NIM游戲的“必勝策略”可以概括為:找出最終獲勝局面具有的某種性質(zhì),對(duì)具有該性質(zhì)的局面的一次操作得到的新局面必然不具有這種性質(zhì),而對(duì)不具有該性質(zhì)的局面,總可以通過(guò)一次操作,得到一個(gè)具有該性質(zhì)的新局面。假設(shè)游戲雙方分別為AB,只要A方能到達(dá)具有該性質(zhì)的某個(gè)局面,則B方一定不能到達(dá)具有該性質(zhì)的任意一個(gè)局面,從而不能到達(dá)獲勝局面,因而B方必?cái)。?span lang=EN-US>A方必勝。這種性質(zhì)可以是對(duì)稱性(1.11的策略)、每堆數(shù)二進(jìn)制表示各個(gè)位的和的奇偶性(1.12的策略)、屬于某個(gè)集合(1.13的策略)。

 

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

 

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

 

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

 對(duì)關(guān)鍵局面<Fn, Gn >,設(shè)石子較少的那堆為X,較多的那堆為Y

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

⑵ A方若在Y堆取走k個(gè)石子:

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

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

A 若與某個(gè)Gi相等,則A堆只要再取Fn-Fi個(gè)石子,即可到達(dá)關(guān)鍵局面< Fi, Gi >。

B  若與某個(gè)Fi相等:

如果Fn>Gi則在則A堆只要再取Fn-Gi個(gè)石子,即可到達(dá)關(guān)鍵局面< Fi, Gi >

如果Fn<Gi,必然可以找到j0<=j<i)使得Tj=Fn-Fi,兩堆同時(shí)取Fi-Fj個(gè)石子到達(dá)關(guān)鍵局面< Fj, Gj >

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

總之,由假設(shè)得到的關(guān)鍵局面符合“必勝策略”。)

 

拿最后一個(gè)贏:

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,根據(jù)Tn的定義可得Tn=n,剛好是beatty序列,可由beatty序列的通項(xiàng)公式求得Fn的通項(xiàng)公式。

 

拿最后一個(gè)輸:

n

0

1

2

3

4

T

1

0

2

3

4

F

0

2

3

4

6

G

1

2

5

7

10

當(dāng)n>=2時(shí),關(guān)鍵局面與拿最后一贏的相同。

 

勝利條件為拿最后一個(gè)贏時(shí),要找出所有關(guān)鍵局面(即書中的不安全點(diǎn)),最快的辦法就是得用通項(xiàng)公式,雖然通項(xiàng)公式有無(wú)理數(shù),轉(zhuǎn)成浮點(diǎn)數(shù),引起的誤差對(duì)結(jié)果沒(méi)多大影響(只有當(dāng)N極大時(shí),才會(huì)使結(jié)果不對(duì))。對(duì)浮點(diǎn)計(jì)算十分昂貴的平臺(tái),還是用篩選法,利用“在兩個(gè)Gi、Gj間的數(shù)必然是某個(gè)Fk值”,篩選過(guò)程只須保留一部分Gn就可以計(jì)算出新的Fn

另外,對(duì)關(guān)鍵點(diǎn)<Fn, Gn=Fn+n>,當(dāng)n>1時(shí),從1FnFn個(gè)數(shù),有n個(gè)Fi,還有Fn-n個(gè)在Gj。因而0<Fn-n<n,即有:n< Fn<2*n (n>1時(shí)),在判斷<x,y>y>=x)是否是關(guān)鍵點(diǎn),先判斷是否滿足這個(gè)不等式,如果滿足,才生成第y-x個(gè)F值再進(jìn)行判斷。由通項(xiàng)公式可知,

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

 

(書上給出的定理是beatty定理。該定理的證明相當(dāng)簡(jiǎn)單,有興趣的可以google下。另外,上個(gè)世紀(jì)五六十年代,我國(guó)數(shù)學(xué)家曾在《數(shù)學(xué)通論》(有網(wǎng)絡(luò)版)發(fā)表過(guò)證明,好像還用到了Fibonacci的通項(xiàng)公式。)


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) 評(píng)論(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>
            91久久线看在观草草青青| 久久精品主播| 亚洲第一精品在线| 午夜天堂精品久久久久| 日韩午夜精品视频| 99re6这里只有精品| 在线观看福利一区| 精品成人一区| 亚洲视频国产视频| 亚洲一区二区三| 欧美一区中文字幕| 久久漫画官网| 欧美日韩国产专区| 国产精品婷婷| 一区二区在线观看视频| 亚洲精品久久久久久久久久久久久| 亚洲欧洲午夜| 亚洲免费视频在线观看| 欧美尤物巨大精品爽| 久久综合五月| 亚洲精品影院在线观看| 亚洲女人av| 欧美成年人视频网站| 国产精品v欧美精品v日韩精品| 国内精品伊人久久久久av一坑| 亚洲欧洲中文日韩久久av乱码| 亚洲欧美日韩一区在线观看| 欧美激情精品久久久久久变态| 一区二区福利| 欧美1级日本1级| 国产一区二区精品久久91| 日韩视频免费观看| 鲁大师成人一区二区三区| 一区二区三区欧美日韩| 老司机凹凸av亚洲导航| 亚洲精品永久免费| 午夜亚洲伦理| 欧美日韩国产区一| 亚洲黄色在线观看| 久久精品久久综合| 亚洲视频免费| 欧美日韩免费网站| 亚洲精品久久久久久久久| 久久精品成人| 亚洲欧美激情在线视频| 欧美日韩国产丝袜另类| 亚洲国产精品va在线看黑人动漫 | 亚洲国产成人在线播放| 亚洲天堂网站在线观看视频| 免费亚洲电影在线| 激情久久久久久久| 久久久久免费视频| 午夜在线a亚洲v天堂网2018| 国产精品v欧美精品v日本精品动漫| 亚洲黄色成人久久久| 美女图片一区二区| 亚洲久久一区| 在线亚洲精品福利网址导航| 欧美成人免费网| 欧美在线视频a| 国产视频久久久久久久| 欧美一区二区成人| 亚洲欧美日韩国产综合精品二区| 欧美香蕉视频| 亚洲淫片在线视频| 亚洲私人影院| 欧美日韩在线播放一区二区| 一个色综合导航| 99在线热播精品免费99热| 欧美先锋影音| 亚洲欧美制服另类日韩| 亚洲综合999| 国语自产精品视频在线看8查询8| 久久不射网站| 久久国产主播精品| 亚洲激情另类| 亚洲美女黄色| 国产精品一区二区三区观看| 久久久国产午夜精品| 久久久免费精品| 亚洲精品日日夜夜| 99精品久久免费看蜜臀剧情介绍| 国产精品久久久久免费a∨| 久久riav二区三区| 免费成人小视频| 一区二区三区福利| 香蕉久久久久久久av网站| 亚洲国产高清高潮精品美女| 亚洲毛片一区| 国内揄拍国内精品少妇国语| 亚洲福利在线观看| 国产精品区一区二区三区| 老**午夜毛片一区二区三区| 欧美激情综合亚洲一二区| 欧美中日韩免费视频| 老司机精品视频一区二区三区| 国产精品99久久久久久有的能看| 午夜综合激情| 在线视频免费在线观看一区二区| 亚洲欧美日韩一区二区| 最近看过的日韩成人| 亚洲欧美第一页| 亚洲精品欧美激情| 久久精品国产99精品国产亚洲性色 | 亚洲福利免费| 国产精品久久国产愉拍 | 亚洲区免费影片| 亚洲一区二区精品在线| 亚洲精品久久视频| 欧美专区在线观看一区| 亚洲一区二区三区视频播放| 噜噜噜躁狠狠躁狠狠精品视频 | 一区二区三区国产盗摄| 国产精品theporn88| 免费精品视频| 国产伦精品一区二区三区在线观看 | 欧美一区二区在线看| aa级大片欧美| 久久久免费精品| 欧美在线观看一二区| 欧美午夜精品久久久久免费视 | 欧美午夜a级限制福利片| 欧美国产日韩a欧美在线观看| 国产欧美精品一区二区三区介绍 | 久久精品一区二区三区不卡牛牛| 亚洲深夜影院| 欧美国产激情| 欧美激情精品久久久久久免费印度 | 亚洲午夜精品一区二区| 欧美激情视频一区二区三区免费 | 久久久久综合网| 久久久久成人精品免费播放动漫| 国产精品美女999| 一本久道久久综合婷婷鲸鱼| 日韩亚洲成人av在线| 欧美精品日韩www.p站| 亚洲欧洲精品成人久久奇米网| 亚洲日本欧美| 欧美xart系列高清| 91久久精品久久国产性色也91| 亚洲人体偷拍| 亚洲国产老妈| 亚洲精品黄网在线观看| 欧美顶级艳妇交换群宴| 亚洲人成亚洲人成在线观看| 日韩视频在线观看一区二区| 欧美成人免费全部| 日韩五码在线| 午夜视频精品| 狠狠色综合色综合网络| 美女视频黄a大片欧美| 91久久久久久国产精品| 亚洲视频在线免费观看| 国产美女一区二区| 久久国产天堂福利天堂| 欧美激情一级片一区二区| 亚洲免费高清视频| 国产精品高清在线| 欧美专区在线| 亚洲精品老司机| 亚洲欧美在线一区二区| 国产亚洲高清视频| 亚洲高清av| 欧美日韩三级一区二区| 亚洲夜间福利| 蜜桃av噜噜一区| 亚洲少妇自拍| 狠狠爱www人成狠狠爱综合网| 蜜桃久久av| 最新国产成人av网站网址麻豆 | 韩日欧美一区| 久久高清免费观看| 另类尿喷潮videofree| 亚洲二区视频在线| 欧美~级网站不卡| 亚洲日韩视频| 亚洲视频精选| 国产日韩三区| 久久久久久久一区| 欧美成人午夜影院| 一本久久综合亚洲鲁鲁| 国产精品国产三级国产普通话三级| 在线视频你懂得一区| 久久久99精品免费观看不卡| 一区二区亚洲精品| 欧美久久久久免费| 亚洲永久免费观看| 欧美18av| 一本一道久久综合狠狠老精东影业| 欧美日韩国产首页| 亚洲视频精品在线| 久久综合久久美利坚合众国| 亚洲精品免费网站| 一区精品久久| 国产视频一区在线| 国产精品激情av在线播放| 欧美精品一区二区三区蜜桃 | 国产欧美日韩不卡| 亚洲人成精品久久久久| 欲色影视综合吧|