• <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>

            The Fourth Dimension Space

            枯葉北風寒,忽然年以殘,念往昔,語默心酸。二十光陰無一物,韶光賤,寐難安; 不畏形影單,道途阻且慢,哪曲折,如渡飛湍。斬浪劈波酬壯志,同把酒,共言歡! -如夢令

            #

            集訓專題訓練1::搜索 福州大學全國邀請賽 Divisibility by Thirty-six 狀態(tài)空間搜索

                 摘要: 和整除45差不多,枚舉后兩位。復雜度應該是25*1000 ,但很奇怪跑了390MS...可能中間計算常數(shù)時間比較大。再說幾句,這題輸出相當惡心啊,我挑了1個小時才大致理出輸出的邏輯順序,也許還不一定完全正確呢。這題還有優(yōu)化的可能。請各路神牛指點 #include<iostream>#include<algorithm>#include<cmath>#inclu...  閱讀全文

            posted @ 2010-07-03 17:30 abilitytao 閱讀(1550) | 評論 (1)編輯 收藏

            集訓專題訓練1::搜索 福大校賽 G 整除45問題,狀態(tài)空間搜索

                 摘要: 五月份做的吧 那個時候用了dp 死活過不了 后來聽人說dp是可行的 但我還是不會,囧。。。這題用了比較快的廣搜算法,用v[i][j][k]存儲余數(shù)從i->j,去掉數(shù)字為k的情況,由于狀態(tài)空間<1000,所以窮搜狀態(tài)空間是可行的。這題具體來說可以分成三種情況:1.字符串中既沒有5也沒有0,那么可以直接impossble掉2.如果字符串中有5但是沒有0,可以先去掉一個5,然后在窮搜,最后在...  閱讀全文

            posted @ 2010-07-03 10:58 abilitytao 閱讀(1561) | 評論 (0)編輯 收藏

            觀心,省身

                    水陸草木之花,可愛者甚蕃。晉陶淵明獨愛菊;自李唐來,世人甚愛牡丹;予獨愛蓮之出淤泥而不染,濯清漣而不妖,中通外直,不蔓不枝,香遠益清,亭亭凈植,可遠觀而不可褻玩焉。
              予謂菊,花之隱逸者也;牡丹,花之富貴者也;蓮,花之君子者也。噫!菊之愛,陶后鮮有聞。蓮之愛,同予者何人?牡丹之愛,宜乎眾矣!

            posted @ 2010-06-29 18:50 abilitytao 閱讀(199) | 評論 (0)編輯 收藏

            O(log n)求Fibonacci數(shù)列(非矩陣法)

            《編程之美》讀書筆記:2.9 Fibonacci序列

             

            計算Fibonacci序列最直接的方法就是利用遞推公式 F(n+2)=F(n+1)+F(n)。而用通項公式來求解是錯誤的,用浮點數(shù)表示無理數(shù)本來就有誤差,經(jīng)過n次方后,當n相當大時,誤差能足夠大到影響浮點數(shù)轉為整數(shù)時的精度,得到的結果根本不準。

            用矩陣來計算,雖然時間復雜度降到O(log n),但要用到矩陣類,相當麻煩。觀察:

            F(n+2)=F(n)+F(n-1)2*F(n-1)+F(n-2)=3*F(n-2)+2*F(n-4)

            用歸納法很容易證明 F(n) = F(k)*F(n+1-k) + F(k-1)*F(n-k),利用該遞推公式和原遞推公式,要計算F(n),只要計算F([n/2])F([n/2]+1),時間復雜度為 O(lg n)如:要計算F(58),由 58 -> 29,30 -> 14,15 -> 7,8 -> 3,4 -> 1,2 可知只要算5次。可以用一個棧保存要計算的數(shù),實際上,將n的最高位1(假設在第k位)左邊的0去除掉后,第m次要計算的數(shù)是第k位到第k-m+1位這m個位組成的值t(m),則第m-1次要計算的數(shù)為t(m-1),且

            t(m)=2*t(m-1)+(k-m+1位是否為1)

            若第m-1次計算得到了f(k)f(k+1),則第m次計算:

             

            k-m+1

            已計算

            待計算

            1

            f(k)

            f(k+1)

            f(2*k+1),f(2*k+2)

            0

            f(2*k),f(2*k+1)

             

            具體公式見下面代碼。

            下面是計算F(n)最后四位數(shù)(某道ACM題)的代碼。


             

            /*   Fibonacci數(shù)列第N個數(shù)的最后4位數(shù)
                注意,當 N>93 時 第N個數(shù)的值超過64位無符號整數(shù)可表示的范圍。
            F(n+2)=F(n)+F(n-1) F(0)=0 F(1)=1  F(2)=1        ==>
            F(n)=F(k)*F(n+1-k) + F(k-1)*F(n-k)              ==>
            F(2*n)=F(n+1)*F(n)+F(n)*F(n-1)=(F(n+1)+F(n-1))*F(n)=(F(n+1)*2-F(n))*F(n)
            F(2*n+1)=F(n+1)*F(n+1)+F(n)*F(n)
            F(2*n+2)=F(n+2)*F(n+1)+F(n+1)*F(n)=(F(n+2)+F(n))*F(n+1)=(F(n+1)+F(n)*2)*F(n+1)
             
            */

            unsigned fib_last4( unsigned num)
            {
              
            if ( num == 0 ) return 0;
              
            const unsigned M=10000;
              unsigned ret
            =1,next=1,ret_=ret;
              unsigned flag
            =1, tt=num;
              
            while ( tt >>= 1) flag <<= 1;
              
            while ( flag >>= 1 ){
                
            if ( num & flag ){
                  ret_ 
            = ret * ret + next * next;
                  next 
            = (ret + ret + next) * next;
                } 
            else {
                  
            //多加一個M,避免 2*next-ret是負數(shù),造成結果不對
                  ret_ = (next + next + M - ret) * ret;
                  next 
            = ret * ret + next * next;
                }
                ret 
            = ret_ % M;
                next 
            = next % M;
              }
              
            return ret;
            }
            轉自:http://www.shnenglu.com/flyinghearts/archive/2010/06/23/118593.html

            posted @ 2010-06-26 12:48 abilitytao 閱讀(580) | 評論 (0)編輯 收藏

            GRE general test

            果然是最變態(tài)的考試,只能看人品了^_^

            posted @ 2010-06-12 17:56 abilitytao 閱讀(225) | 評論 (0)編輯 收藏

            關于最近的幾件事情

            看來不學居正哥搞個考成簿是不行了,最近事情實在太多,東忘西忘,還是要總結一下。
            1.6月12號的GRE考試,數(shù)學爭取拿滿分吧,語文部分,你懂的。。。
            2.6 月13號網(wǎng)易有道難題在線賽。
            3.6月15號去南大.
            4. 葉慶生的課程設計,這個真的有點變態(tài)。下周三答辯,考完GRE以后要全力做這個。
            5.打印各門課的課件,重點是操作系統(tǒng),大學化學(操作系統(tǒng)是重中之重,大學化學是很無奈。。。)。
            6.然后就是網(wǎng)絡安全,操作系統(tǒng),算法設計與分析幾門課,對了 別忘了大學化學,一定要開始看了。雖然課剩下的不是太多,但是稍微放松就完了,所以一定要提早看。
            現(xiàn)在是15周周二 晚

            posted @ 2010-06-09 00:14 abilitytao 閱讀(238) | 評論 (0)編輯 收藏

            Face Recognition - April 2009

            The resulting database contained 142 institutions. Ranked by three separate measures Citations, Papers, and Citations Per Paper. Source dates: 1998-December 31, 2008 (sixth bimonthly period 2008).

            Citations
            Rank       Institution Citations Papers Citations
            Per Paper
            1 MIT 2429 114 21.31
            2 Michigan State Univ 1467 43 34.12
            3 UNIV CALIF SAN DIEGO 1404 50 28.08
            4 UNIV ILLINOIS 906 121 7.49
            5 Carnegie Mellon Univ 904 158 5.72
            6 US ARMY 896 41 21.85
            7 DELFT UNIV TECHNOL 722 15 48.13
            8 Ohio State Univ 702 37 18.97
            9 UNIV AMSTERDAM 697 32 21.78
            10 UNIV BRITISH COLUMBIA 662 29 22.83
            11 NATL INST STAND & TECHNOL 645 22 29.32
            12 IBM Corp 608 23 26.43
            13 Max Planck Society 584 22 26.55
            14 AT&T 574 11 52.18
            15 Univ Connecticut 561 51 11.00
            16 HONG KONG POLYTECH UNIV 553 129 4.29
            17 GEORGE MASON UNIV 508 32 15.88
            18 CUNY 476 17 28.00
            19 Univ Calif Berkeley 461 35 13.17
            20 NANJING UNIV SCI & TECHNOL 430 64 6.72

              

            Papers
            (  10 papers published between
            1998-December 31, 2008 [sixth bimonthly period 2008])
            Rank       Institution Citations Papers Citations
            Per Paper
            1 CHINESE ACAD SCI 345 231 1.49
            2 Carnegie Mellon Univ 904 158 5.72
            3 TSING HUA UNIV 55 140 0.39
            4 HONG KONG POLYTECH UNIV 553 129 4.29
            5 HARBIN INST TECHNOL 90 123 0.73
            6 UNIV ILLINOIS 906 121 7.49
            7 MIT 2429 114 21.31
            8 UNIV MARYLAND 381 93 4.10
            9 NANYANG TECHNOL UNIV 380 92 4.13
            10 CHINESE UNIV HONG KONG 166 78 2.13
            11 Shanghai Jiao Tong Univ 35 73 0.48
            12 Univ Surrey 163 73 2.23
            13 NANJING UNIV SCI & TECHNOL 430 64 6.72
            14 UNIV TORONTO 361 62 5.82
            15 KOREA ADV INST SCI & TECHNOL 106 61 1.74
            16 Inha Univ 18 53 0.34
            17 YONSEI UNIV 34 52 0.65
            18 Hong Kong Baptist Univ 217 51 4.25
            19 INDIAN INST TECHNOL 45 51 0.88
            20 Univ Connecticut 561 51 11.00

               

            Citations Per Paper
            (  43 papers published between
            1998-December 31, 2008 [sixth bimonthly period 2008])
            Rank       Institution Citations Papers Citations
            Per Paper
            1 Michigan State Univ 1467 43 34.12
            2 UNIV CALIF SAN DIEGO 1404 50 28.08
            3 MIT 2429 114 21.31
            4 Univ Connecticut 561 51 11.00
            5 UNIV ILLINOIS 906 121 7.49
            6 NANJING UNIV SCI & TECHNOL 430 64 6.72
            7 Natl Univ Singapore 328 50 6.56
            8 UNIV TORONTO 361 62 5.82
            9 Carnegie Mellon Univ 904 158 5.72
            10 INRIA 213 43 4.95
            11 ARISTOTELIAN UNIV SALONIKA 219 47 4.66
            12 Univ So Calif 190 43 4.42
            13 HONG KONG POLYTECH UNIV 553 129 4.29
            14 Hong Kong Baptist Univ 217 51 4.25
            15 NANYANG TECHNOL UNIV 380 92 4.13
            16 UNIV MARYLAND 381 93 4.10
            17 Univ Surrey 163 73 2.23
            18 CHINESE UNIV HONG KONG 166 78 2.13
            19 Univ Calif Riverside 88 46 1.91
            20 UNIV YORK 91 49 1.86
            轉自:http://sciencewatch.com/ana/st/face/institution/

            posted @ 2010-06-08 17:27 abilitytao 閱讀(232) | 評論 (0)編輯 收藏

            POJ 1179 多邊形游戲 區(qū)間動規(guī)

            實際上就是枚舉所有區(qū)間,求出所有區(qū)間可以獲得的最大值和最小值,區(qū)間L的的結果可以由區(qū)間L-1的結果組合得到。
            這題有一個小技巧很好用,就是求第i個結點順時針向后的第t個結點如果是node(i,t)的話,那么node (i,t+1)的標號可以由
            ((i+t)%n )+1得到,實際上lebel[node(i,t)]=((i+t-1)%n )+1;所以這題結點從1開始存似乎更加便于計算。
            //coded by abilitytao
            //2010年6月1日17:25:38
            #include <iostream>
            #include
            <algorithm>
            #include
            <cmath>
            using namespace std;
            const int maxn=100;

            int n;
            int fmax[maxn][maxn];
            int fmin[maxn][maxn];
            int v[maxn];
            int op[maxn];
            void init()//初始化
            {

                
            for(int i=1;i<=n;i++)
                    
            for(int j=1;j<=n;j++)
                    
            {
                        fmax[i][j]
            =-999999999;
                        fmin[i][j]
            =999999999;
                    }

                    
            for(int i=1;i<=n;i++)
                        fmax[i][
            0]=fmin[i][0]=v[i];
            }


            void input()
            {

                scanf(
            "%d",&n);
                cin.ignore();
                
            int i;
                
            for(i=1;i<=n;i++)
                
            {
                    
            char tem[10];
                    scanf(
            "%s",tem);
                    
            if(tem[0]=='t')
                        op[i]
            =0;//0代表+號
                    else
                        op[i]
            =1;//1代表乘號
                    scanf("%d",&v[i]);
                }

            }



            void solve()//DP過程
            {
                
            int mm=-999999999;
                
            int i,t,L;
                
            for(L=1;L<=n-1;L++)
                
            {
                    
            for(i=1;i<=n;i++)
                    
            {
                        
            for(t=0;t<=L-1;t++)
                        
            {

                            
            if(op[(i+t)%n+1]==0)
                            
            {
                                fmin[i][L]
            =min(fmin[i][L],fmin[i][t]+fmin[(i+t)%n+1][L-t-1]);
                                fmax[i][L]
            =max(fmax[i][L],fmax[i][t]+fmax[(i+t)%n+1][L-t-1]);
                            }

                            
            else
                            
            {
                                fmin[i][L]
            =min(fmin[i][L],fmin[i][t]*fmin[(i+t)%n+1][L-t-1]);
                                fmin[i][L]
            =min(fmin[i][L],fmin[i][t]*fmax[(i+t)%n+1][L-t-1]);
                                fmin[i][L]
            =min(fmin[i][L],fmax[i][t]*fmin[(i+t)%n+1][L-t-1]);
                                fmin[i][L]
            =min(fmin[i][L],fmax[i][t]*fmax[(i+t)%n+1][L-t-1]);

                                fmax[i][L]
            =max(fmax[i][L],fmin[i][t]*fmin[(i+t)%n+1][L-t-1]);
                                fmax[i][L]
            =max(fmax[i][L],fmin[i][t]*fmax[(i+t)%n+1][L-t-1]);
                                fmax[i][L]
            =max(fmax[i][L],fmax[i][t]*fmin[(i+t)%n+1][L-t-1]);
                                fmax[i][L]
            =max(fmax[i][L],fmax[i][t]*fmax[(i+t)%n+1][L-t-1]);
                            }

                        }

                    }

                }

                
            for(i=1;i<=n;i++)
                    
            if(fmax[i][n-1]>mm)
                        mm
            =fmax[i][n-1];
                printf(
            "%d\n",mm);
                
            for(i=1;i<=n;i++)
                    
            if(fmax[i][n-1]==mm)
                        printf(
            "%d ",i);
                printf(
            "\n");
            }


            int main()
            {
                input();
                init();
                solve();
                
            return 0;
            }

            posted @ 2010-06-01 17:26 abilitytao 閱讀(2089) | 評論 (0)編輯 收藏

            再看floyd

             

            #include<iostream>
            #include
            <cstdio>
            using namespace std;

            #define numVertices 500
            #define MAXNUM 999999999
            double weight[numVertices][numVertices];
            double a[numVertices][numVertices];
            int path[numVertices][numVertices];

            void  floyd() 

                
            int i,j,k;
                
            for   (i     =   0;   i   <   numVertices;   i++)  
                

                    
            for   (j   =   0;   j   <   numVertices;   j++
                    

                        a[i][j]   
            =   weight[i][j]; 
                        
            if   (i   !=   j   &&   a[i][j]   <   MAXNUM)  
                        

                            path[i][j]   
            =   i; 
                        }
             
                        
            else 
                        

                            path[i][j]   
            =   -1
                        }
             
                    }
             
                }
             

                
            for   (k   =   0;   k   <   numVertices;   k++)  
                

                    
            for   (i   =   0;   i   <   numVertices;   i++
                    

                        
            for   (j   =   0;   j   <   numVertices;   j++)  
                        

                            
            if   (a[i][k]   +   a[k][j]   <   a[i][j])
                            

                                a[i][j]   
            =   a[i][k]   +   a[k][j]; 
                                path[i][j]   
            =   path[k][j]; 
                            }
             
                        }
             
                    }
             
                }
             
            }



            int p;
            int ans[500];
            int f;
            void getpath(int i,int j)
            {
                p
            =0;
                f
            =0;
                
            int k;
                k
            =path[i][j];
                
            while(true)
                
            {
                    
                    
            if(k==-1)
                    
            {
                        f
            =1;
                        printf(
            "No answer\n");
                        
            return ;
                    }

                    
            else if(k==i)
                    
            {
                        printf(
            "最短路徑長度為: %lf ",a[i][j]);
                        printf(
            "路線為:");

                        ans[
            ++p]=k;
                        
            for(int ll=p;ll>=1;ll--)
                            printf(
            "%d ",ans[ll]+1);
                        printf(
            "%d\n",j+1);
                        


                        
            return ;
                    }

                    
            else
                    
            {
                        ans[
            ++p]=k;
                        k
            =path[i][k];
                    
                    }

                }

            }







            int main()
            {
                
            int n;
                
            int i,j,k;
                
            int a,b;
                scanf(
            "%d",&n);

                
            for(j=0;j< numVertices ;j++)
                    
            for(k=0;k< numVertices ;k++)
                        weight[j][k]
            =weight[k][j]=MAXNUM;

                
            for(i=1;i<=n;i++)
                
            {
                    
            double c;
                    cin
            >>a>>b>>c;
                    weight[a
            -1][b-1]=weight[b-1][a-1]=c;
                }

                floyd();
                
            int q;
                cin
            >>q;
                
            for(j=1;j<=q;j++)
                
            {
                    cin
            >>a>>b;
                    getpath(a
            -1,b-1);
                }

                
                
            return 0;
            }

            posted @ 2010-05-30 17:09 abilitytao 閱讀(213) | 評論 (0)編輯 收藏

            組合游戲總結——基本博弈問題

            【概述】
              最近的幾次比賽,博弈的題目一直不少,而且博弈問題是一塊比較復雜、龐大的內(nèi)容,因此在這里小結一下,希望能夠幫自己理清一些思路,爭取也多來幾個系列,呵呵。

            競賽中出現(xiàn)的組合游戲問題一般都滿足以下特征:
                1. 二人博弈游戲,每個人都采用對自己最有利的策略,并且是兩個人輪流做出決策
                2. 在游戲中的任意時刻,每個玩家可選擇的狀態(tài)是固定的,沒有隨機成分
                3. 游戲在有限步數(shù)內(nèi)結束,沒有平局出現(xiàn)
              大部分的題目都滿足上述條件,因此這里只討論在上述條件范疇內(nèi)的博弈問題。這類博弈問題,通常還有若干分類。一種是規(guī)定移動最后一步的游戲者獲勝,這種規(guī)則叫做Normal Play Rule;另一種是規(guī)定移動最后一步的游戲者輸,這種規(guī)則叫做Misere Play Rule,也稱為Anti-SG游戲。此外,對于游戲的雙方,如果二者博弈的規(guī)則相同,那么稱為這類游戲是對等(impartial games)的;否則稱為不平等游戲(partizan games )。當初WHU的那場比賽就是由于對于這個概念不是很清晰,導致看完題目之后就用SG定理來做,浪費了很多機時。實際上,解決不平等博弈問題的方法和普通的博弈問題(SG游戲)是有區(qū)別的,一般會采用動態(tài)規(guī)劃或者surreal number。

            【博弈基礎知識】
              在SG游戲中,最為人熟知的是必勝必敗態(tài),也叫NP態(tài)理論。注意的是,P態(tài)對應的是先手必敗態(tài),N態(tài)對應的是先手必勝態(tài)。必勝必敗態(tài)理論是:
              1. All terminal positions are P-positions
              2. From every N-position, there is at least one move to a P-position
              3. From every P-position, every move is to an N-position
              英文的表述非常簡潔清晰,而且這個理論也很好理解,如果在當前狀態(tài)的下一步可以走到必敗態(tài),那么當前玩家就可以走到那個狀態(tài),把必敗態(tài)推給另一方;如果所有可達狀態(tài)都是必勝態(tài),那么當前玩家無論如何走,都會把必勝態(tài)讓給對方。根據(jù)必勝必敗態(tài)理論,我們可以遞歸的求出每個狀態(tài)是N態(tài)還是P態(tài)。必勝必敗態(tài)理論其實已經(jīng)把博弈問題轉化成了一個有向圖,借助圖這個模型來分析問題,使得問題變得形象了許多。需要注意的是,這種SG游戲對應的有向圖是無環(huán)的,因為如果有環(huán),那么游戲雙方就可能在環(huán)上不停的轉換狀態(tài),游戲不能在有限步終止,這樣就不滿足組合游戲的特征3了。
              然而在很多時候僅僅知道某個狀態(tài)是必勝還是必敗是不夠的,因為如果存在多個組合游戲(比如經(jīng)典的Nim),對應的狀態(tài)集合非常大,無法直接利用必勝必敗態(tài)理論求解,因此需要用到博弈論中一個很重要的工具:SG函數(shù)。
              某個狀態(tài)的SG函數(shù)值定義為當前狀態(tài)所有不可達的狀態(tài)編號中最小的編號,其中終止態(tài)的SG函數(shù)值是0。有了這個工具,就引入一個非常強大的定理——SG分解定理:

              多個組合游戲的SG函數(shù)值是每個組合游戲的函數(shù)值的和。(這里的和定義為異或操作)
              
              SG分解定理的證明不是很難,其實和Nim的證明很像。根據(jù)這個定理,我們就知道為什么Nim的解法是異或所有的石子個數(shù)了,因為每堆石子的SG值就是石子的個數(shù)。SG分解定理告訴我們?nèi)魏蜸G游戲都可以轉化成Nim游戲來做。
              Nim中的一個變形就是拿走最后一塊石子的人算輸。通過修改SG的計算規(guī)則,可以得出相同的結論(因為當石子個數(shù)是1的時候SG值為0,因此要單獨處理);當然也可以利用一個叫做SJ定理的方法來做,依然是要處理當所有堆的SG值不大于1的情況。

            【博弈基本模型】
              除了Nim模型,很多模型都看似復雜,最后都劃歸到了Nim模型上,然后利用SG分解來做的。在證明兩種模型等價的時候,可以通過計算SG值判斷是否相同,或者通過判斷必勝策略的走法將其轉化為Nim。許多模型非常的神奇,其獲勝策略又千差萬別,因此無法一一列舉,但是掌握一些經(jīng)典模型是必須的,這樣通過模型的轉化可以簡化問題的難度。
              經(jīng)典模型1:Nim變種。包括:
                (1) 樓梯Nim。把奇數(shù)臺階的石子作為Nim,二者等價,因為必勝的策略是相同的。
                (2) 每次可以取k堆,這個是經(jīng)典的Moore Nim。它是泛化的Nim游戲。
                (3) 兩堆石子,每次可以取一堆或兩堆,從兩堆取得時候個數(shù)必須相同,誰先取完獲勝。這個是著名的威佐夫博弈,跟黃金分割數(shù)有關,具體證明不是很清楚,但是用SG值打表可以找出規(guī)律。代碼如下:
            #include <cstdio>
            #include 
            <cmath>
            #include 
            <algorithm>
            using namespace std;

            int main()
            {
                
            const double k = (sqrt(5.0+ 1/ 2.0;
                
            int a, b, t;

                
            while (scanf("%d %d"&a, &b) == 2)
                {
                    
            if (a > b)
                        swap(a, b);
                    t 
            = b - a;
                    
            if (a == (int)(t * k))
                        puts(
            "0");
                    
            else
                        puts(
            "1");
                }

                
            return 0;
            }

                (4) Subtraction Games。一種通用的Nim游戲,每次從可用狀態(tài)集合中選擇下一步的狀態(tài),有很多變形,核心思想還是計算SG函數(shù)值。
                (5) Take-and-Break Game。每次把局面分成多個Nim子游戲,利用SG分解定理求出對應的SG值。
              經(jīng)典模型2:翻硬幣游戲(Coin Turning Game)
                (1) 一維的翻硬幣游戲,每次可以翻1個或兩個。通過單獨考慮每個可以翻的硬幣發(fā)現(xiàn),Coin Turning Game的SG值和Nim等價,因此兩個模型等價。需要注意的是,許多翻硬幣游戲根據(jù)題目的要求,一般編號從0開始。
                (2) 一維的翻硬幣游戲,每次可以翻1個或兩個,限定了翻第二枚硬幣的范圍,那么就和Subtraction Game等價了。
                (3) 一維的翻硬幣游戲,每次可以翻1個、2個或3個,這個游戲叫做Mock Turtles,有一個神奇的規(guī)律,是Odious Number序列。
                (4) 高維的翻硬幣游戲,需要用到Nim積和Tartan定理。
              翻硬幣模型的變化更多,很多模型都有一些奇妙的規(guī)律,需要打表才能發(fā)現(xiàn)。
              經(jīng)典模型3:刪邊游戲(Green Hackenbush)
                (1) 樹的刪邊游戲:Colon原理證明這種模型和Nim依然是等價的,多個叉的SG值異或就是對應根節(jié)點的SG值。
                (2) 無向圖刪邊游戲:利用Fursion定理收縮圈,然后就轉換成樹的刪邊游戲了,不過這個定理還不會證。

            轉自:http://www.shnenglu.com/sdfond/archive/2010/02/06/107364.aspx



            PS:最近做了好多博弈問題,但是總覺得還處在做一題,只會一題的狀態(tài),我想是時候系統(tǒng)的學習一下了。

            posted @ 2010-05-27 11:10 abilitytao 閱讀(404) | 評論 (0)編輯 收藏

            僅列出標題
            共42頁: First 9 10 11 12 13 14 15 16 17 Last 
            国产综合精品久久亚洲| 亚洲AⅤ优女AV综合久久久| 免费精品久久天干天干| 精品水蜜桃久久久久久久| 91久久九九无码成人网站| 久久九九青青国产精品| 久久久精品午夜免费不卡| 久久精品人人做人人爽电影| 99久久精品国产高清一区二区 | 18岁日韩内射颜射午夜久久成人 | 伊人久久一区二区三区无码| 久久精品国产精品亚洲人人| 久久99精品久久久久久秒播| 久久综合视频网站| 久久久一本精品99久久精品88| 久久久久久久免费视频| 国内精品人妻无码久久久影院导航| 久久精品一区二区三区AV| 久久亚洲美女精品国产精品| 久久99精品久久久久子伦| 久久91精品久久91综合| 久久久91人妻无码精品蜜桃HD| 久久青青草原亚洲av无码| 久久这里只精品99re66| 久久久亚洲欧洲日产国码二区| 久久久久亚洲AV无码网站| 亚洲国产成人久久综合一| 狠狠精品久久久无码中文字幕| 热综合一本伊人久久精品| 婷婷久久香蕉五月综合加勒比| 91精品国产91久久久久福利| 精品无码人妻久久久久久| 97视频久久久| 久久精品中文字幕久久| 国内精品久久久久影院亚洲| 久久久久免费看成人影片| 久久se精品一区精品二区国产| 久久久久久国产精品无码下载 | 久久AⅤ人妻少妇嫩草影院| 国产成人精品综合久久久| 青青热久久综合网伊人|