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

            單鏈DNA

            換了個地址:http://www.cnblogs.com/vizhen/

             

            ACM競賽學習菜鳥入門指南(二):掌握遞歸

              
                學習要求:    1.掌握遞歸的編程技巧
                                      2.掌握遞歸與迭代的轉換
                                      3.理解遞歸的優缺點

                學習內容:
                                  1.實現漢諾伊塔的遞歸算法,并以此為例理解遞歸程序運行的細節(可用單步調試分析遞歸)。

                                  2.編程實現階乘,斐波那契數列的遞歸的程序和迭代的程序,分析遞歸和迭代算法空間和算法時間上的區別。

                                  3.實現和分析全排列產生器的遞歸程序,掌握這種形式的遞歸。

                       所謂的全排列產生器是指:給定n(n>=1)個元素的集合,要求輸出該集合的所有可能的排列。列如,如果該集合為{abc},那么排列的集合為{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a)}.
                               
            可以很容易看出,給定n個元素,有n!個不同的排列。通過察看具有四個元素的集合(a,b,c,d),可以得到一個簡單的算法,答案通過下面的方式得到:

                     1.a加上(b,c,d)的所有排列

                     2.b加上(a,c,d)的所有排列

                     3.c加上(a,b,d)的所有排列

                     4.d加上(a,b,c)的所有排列

                    “加上所有的排列”已具有遞歸的思想!意味著我們解決具有n-1個元素的問題,也可以用來解決n個元素的問題。下面的程序就是一個遞歸解決的全排列產生器(c++)

                   
                    //Type 排列集合中元素的類型,n為集合元素的個數

                    //k為當前選擇的元素k

                    void perm(Type a[],int k,int n)
                   {

                     if(k==n)
                     {

                       for(int i=0;i<n;i++)

                           cout<<a[i]<<" "; //輸出元素

                           cout<<endl;

                      }

                     else 

                     for(int i=k;i<n;i++)

                    { 

                         Type t=a[k];a[k]=a[i];a[i]=t;

                         perm(a,k+1,n);

                         t=a[k];a[k]=a[i];a[i]=t;

                     }

                 } 

                  調用perm(a,0,n)就可以輸出所有排列。
                  實現和分析該算法,并要理解算法中每一步的運行(可以單步調試觀察),深刻理解遞歸的堆棧與出棧!    

                

                  4.編寫一個集合的冪集的遞歸程序。描述如下:如果S具有n個元素的集合,S的 冪集 為S所有可能子集的集合。列如,如果S=(a,b,c),那么powerset(S)={(),(a),(b),(c),(a,b),(a,c),(b,c),(a,b,c)}。編寫一個計算powerset(S)的遞歸程序。

                 
                完成時間:一周

                參考資料:全排列產生器算法--《計算機算法(C++版)》 機械工業出版  
                          
                          冪集的遞歸程序--http://www.cnblogs.com/yxin1322/archive/2008/03/08/1096685.html
             

            posted on 2009-11-20 22:35 Geek.tan 閱讀(680) 評論(0)  編輯 收藏 引用

            導航

            統計

            公告

            coding是我的寂寞,我是誰的寂寞

            隨筆分類(40)

            隨筆檔案(48)

            搜索

            積分與排名

            最新評論

            評論排行榜

            亚洲色大成网站WWW久久九九| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲中文字幕伊人久久无码| 久久精品国产第一区二区| 国産精品久久久久久久| 欧美久久久久久午夜精品| 日本福利片国产午夜久久| 欧美性大战久久久久久| 亚洲午夜久久久影院| 久久综合久久综合久久综合| 久久无码人妻精品一区二区三区| 午夜精品久久久久久久| 亚洲精品tv久久久久久久久久| 久久夜色精品国产欧美乱| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 亚洲国产香蕉人人爽成AV片久久 | 一本色道久久88综合日韩精品| 日产精品久久久一区二区| 精品久久久久久无码国产| 欧洲精品久久久av无码电影| 欧美与黑人午夜性猛交久久久 | 亚洲人成网站999久久久综合| 色诱久久久久综合网ywww| 欧美亚洲日本久久精品| 伊人久久大香线蕉影院95| 久久国产精品久久精品国产| 久久久久亚洲精品天堂| 久久综合给久久狠狠97色| 久久久亚洲精品蜜桃臀| 久久久久免费精品国产| 久久久久高潮毛片免费全部播放| 天天做夜夜做久久做狠狠| 国产精品免费久久久久影院| 久久激情亚洲精品无码?V| 久久精品视频免费| 久久精品无码专区免费东京热| 亚洲乱码精品久久久久..| 久久国产欧美日韩精品免费| 精品免费tv久久久久久久| 嫩草伊人久久精品少妇AV| 久久婷婷五月综合97色一本一本|