• <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)  編輯 收藏 引用 所屬分類: 作業算法相關雜項
            亚洲级αV无码毛片久久精品| 日日狠狠久久偷偷色综合0| 四虎国产精品成人免费久久| 综合久久一区二区三区| 亚洲精品无码久久久久| 99国内精品久久久久久久| 久久免费看黄a级毛片| 国产精品久久久久久福利漫画 | 色婷婷综合久久久中文字幕| 久久99免费视频| 超级97碰碰碰碰久久久久最新| 91久久精一区二区三区大全| 久久精品国产72国产精福利| 久久精品中文闷骚内射| 国内精品欧美久久精品| 久久久久无码精品国产不卡| 久久久久女教师免费一区| 久久久久亚洲AV无码永不| 思思久久好好热精品国产| 97久久天天综合色天天综合色hd| 色综合合久久天天给综看| 久久综合九色综合久99| 久久夜色精品国产噜噜麻豆| 亚洲国产精品综合久久网络 | 国产成人精品综合久久久久| 久久99久久成人免费播放| 国产V综合V亚洲欧美久久| 亚洲精品无码专区久久久| 久久人人爽人人爽人人片AV高清| 欧美大战日韩91综合一区婷婷久久青草| 久久66热人妻偷产精品9| 狠狠色狠狠色综合久久| 少妇无套内谢久久久久| 久久91精品国产91| 久久久久久久波多野结衣高潮| 三级韩国一区久久二区综合| 久久一区二区三区免费| 久久久这里只有精品加勒比| 欧美激情一区二区久久久| 狠狠色婷婷久久综合频道日韩| 久久天天躁狠狠躁夜夜不卡|