• <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>
            我要啦免费统计

             

             

             

             

            分治法循環賽日程表

            算法分析與設計作業

             

             

             

             

             

             

             

             

             

            姓名:蔡東赟

            學號:3106007039

            班級:06軟件04

            組員:蔡東赟

            完成日期:2009-3-22


             

            分治法循環日程表... 1

            算法分析與設計作業... 1

            姓名:蔡東赟... 1

            學號:3106007039. 1

            班級:06軟件04... 1

            組員:蔡東赟... 1

            完成日期:2009-3-22. 1

            目錄:

            一、問題描述:單循環賽... 3

            二、算法分析:... 3

            1.    首先我要證明老師提供的問題,有錯誤。... 3

            2.    算法思路(N可能為奇數,也可能是偶數) 3

            總體思路:按分治策略,將所有分為兩半,n個選手可以通過n/2個選手設計的比賽日程表來決定。遞歸地用一分為二的略對選手進行分割,直到只剩下兩個選手。... 3

            存儲結構:... 3

            數組 a[i][j], a[i][j]表示運動員i在第j天所遇到的選手... 3

            詳細思路:... 4

            1)分治法,... 4

            2n為偶數的情況Copy()函數:A.將左上角遞歸計算出的小塊的所有數字按其相對位置抄到右下角,B.將右上角的小塊的所有數字加n/2后按其相對位置抄到左下角,將左下角的小塊中的所有數字按其相對位置抄到右上角    4

            3)一般性描述:n為偶數; n是奇數時增加一個虛擬選手n+1,將問題轉換為n是偶數的情形。    4

            4 判斷奇偶... 4

            5makecopy()與copy相似,并區分奇偶情況... 4

            (6)copyodd(n)實現n/2為奇數的時候的復制... 4

            三、時間效率:... 5

             


             

            一、問題描述:單循環賽

                     賽程問題:    N個運動員進行單循環賽,即每個運動員要和所有其他運動員進行一次比賽。

                     試用分治法為這N個運動員安排比賽日程。

                     要求每個運動員每天只進行一場比賽,

                     且整個賽程在N -1天內結束。

                     將運動員從1N編號。

            二、算法分析:

            1.     首先我要證明老師提供的問題,有錯誤。

            整個賽程,當N為偶數的時候,N-1天能夠結束,

            而當N為奇數的時候,只能在至少N天結束,、

            錯誤地方:原命題中“整個賽程在N-1天結束”,這在N為奇數下的情況不成立

             A. 因為,由已知 每個運動員要和所有其他運動員進行一次比賽” 每個運動員總共進行N-1場,又由每一場有兩個運動員參加,N個運動員就進行了[N*N-1]/2,設為C

               B.又因為已知“要求每個運動員每天只進行一場比賽”則沒人每天只能進行1

            場,所有運動員為N,每一場由兩個運動員參加,

             N為偶數的時候,每天只能出現的場數為N/2,推出==》至少的天數為C/(N/2)=N-1場,這與命題中“且整個賽程在N -1天內結束。”不矛盾

             N為奇數的時候,由于每個運動員每天只能進行一場,所以每天能進行的總場數最多只能為(N-1/2場,則整個賽程的天數最少需要 天數 C/[(N-1)/2]=N天,這與原命題“且整個賽程在N -1天內結束。”矛盾,

            比如N=3的時候,每場必須有兩個人,則每天只能有一場比賽,假設是12比賽,則3號運動員沒有對象比賽,所以一天最多一場比賽,這個比賽需要的比賽場數C=3場,則整個比賽需要的天數為C/1=3

             

            由此依照命題前部分要求得出,當N為偶數的情況 循環賽可以進行N-1天,當N為奇數的時候,循環賽至少要進行N天。

            2.     算法思路(N可能為奇數,也可能是偶數)

            總體思路:按分治策略,將所有分為兩半,n個選手可以通過n/2個選手設計的比賽日程表來決定。遞歸地用一分為二的略對選手進行分割,直到只剩下兩個選手。

            對于N為奇數的情況可以虛擬多一個選手,使其編程N+1個選手的日程表,最然后忽略虛擬運動員參與的比賽。對于分割時候N/2的情況也做特殊處理, n/2輪比賽空選手與下一個未參賽的選手進行比賽

             

             

            存儲結構:

            數組 a[i][j], a[i][j]表示運動員i在第j天所遇到的選手


             

             

            詳細思路:

            1)分治法,

                Tournan):

            If n==1  

                   a[1][1]=1;return;

             

            tourna(n/2);//遞歸分割

            copy(n); //填表

             

            2n為偶數的情況Copy()函數:A.將左上角遞歸計算出的小塊的所有數字按其相對位置抄到右下角,B.將右上角的小塊的所有數字加n/2后按其相對位置抄到左下角,將左下角的小塊中的所有數字按其相對位置抄到右上角

            Viod copy(int n){

               Int m=n/2;

               For i=1àm

                  For j=1--->m{

               a[i][j+m]=a[i][j]+m;// 小塊的數值抄到右下角

               a[i+m][j]=a[i][j+m];// 右上抄到左下

               a[i+m][j+m]=a[i][j];//   左下抄到右上

            }

                    

            }

            ----------------------------------------------------------------------------------------------------------------------

            3)一般性描述:n為偶數; n是奇數時增加一個虛擬選手n+1,將問題轉換為n是偶數的情形。

               tournamentn:

                   if n==1 : a[1][1]=1;return;//分割到最后

                   if n為奇數 tournamentn+1;return;//奇數的情況加上虛擬選手

                   tournamentn/2;//分割

                   makecopy(n);//這個函數copyn為偶數很n為奇數的情況

            4 判斷奇偶

            odd(n):

                  Return n&1;

            5makecopy()與copy相似,并區分奇偶情況

                 makecopy(n):

                    if n/2>1 &&add(n/2) copyodd(n);//n/2為奇數的情況的處理

                    else copy(n);//偶數的情況

             (6)copyodd(n)實現n/2為奇數的時候的復制

                n/2奇數的一種處理方法:前n/2輪比賽空選手與下一個未參賽的選手進行比賽


             

             

                Copyodd(n):

                   Int m=n/2

                   For i=1m

                     b[i]=m+i;b[m+i]=b[i];

                  

                   for i=1m

                     for j=1m+1{

                        if a[i][j]>m:

                             a[i][j]=b[i];a[m+i][j]=(b[i]+m)%n;

                        else

                           a[m+i][j]=a[i][j]+m;

                        for j=2m

                            a[i][m+j]=b[i+j-1];

                            a[b[i+j-1]][m+j]=i

             

                      }

            三、時間效率:

             T(n)=T(n/2)+f(n)

             f(n)copy的時間

            f(n)=(n/2)^2

            推出:T(n)=T(n/2)+(n/2)^2

            N規模的問題做logNf(n)

            T(n)屬于O(∑O((n/(2^k))^2) 1<=k<log(n) 也就是T(n)O(n^2)

            計算規模減少,但是時間復雜度一樣增長

            posted on 2009-04-01 15:21 閱讀(7992) 評論(0)  編輯 收藏 引用 所屬分類: 作業算法相關雜項
            蜜臀久久99精品久久久久久| 青青草国产精品久久| 77777亚洲午夜久久多喷| 亚洲精品美女久久久久99| 精品久久久久久无码专区不卡| 久久er国产精品免费观看2| 久久夜色撩人精品国产小说| 亚洲精品乱码久久久久久| 久久精品国产一区二区三区| 精品熟女少妇AV免费久久| 久久免费线看线看| 一本久久a久久精品vr综合| 韩国三级中文字幕hd久久精品| 久久精品国产男包| 精品视频久久久久| MM131亚洲国产美女久久| 中文字幕无码久久久| 久久伊人精品青青草原高清| 无码日韩人妻精品久久蜜桃 | 伊人伊成久久人综合网777| 久久精品国产亚洲精品2020| 日韩亚洲国产综合久久久| 久久精品国产91久久麻豆自制| 久久精品青青草原伊人| 亚洲国产成人精品久久久国产成人一区二区三区综 | 婷婷久久综合九色综合98| 99精品久久久久久久婷婷| 日韩欧美亚洲综合久久影院Ds| 伊人久久免费视频| 一本一道久久精品综合| 99久久精品国产一区二区蜜芽| 91精品国产综合久久久久久| 日产精品99久久久久久| 久久精品国产精品亚洲精品 | 久久精品国产精品亚洲毛片| 亚洲精品乱码久久久久久按摩 | 欧美一区二区久久精品| 亚洲欧美另类日本久久国产真实乱对白 | 青青青青久久精品国产h| 久久精品国产精品国产精品污| .精品久久久麻豆国产精品 |