統計

          留言簿(1)

          DB

          Others

          QA

          Tech Website

          閱讀排行榜

          評論排行榜

          打印全排列

          在《組合數學》里面全排列是一個常見的問題。
          描述如下:有x1,x2,x3,...xn,共n個元素,打印出它的全排列。
          如:1 , 2 , 3
          有6種排列: 123, 132, 213, 231, 312, 321
          思路: 元素的全排列,其實就是遍列全部元素組成的一個排列樹,用回溯法可以得到比較好的效率,特別是空間上,,由于遍列整棵樹,時間復雜度為O(n!)

           1 /** 
           2  *  打印出list[k,m]的全排列 
           3  * @param list 
           4  * @param k  beginning index 
           5  * @param m  finishing index 
           6  */  
           7 static void getPerm(Object[] list, int k , int m){  
           8     if( k == m){  
           9         for(int i = 0; i <= m; i++)  
          10             System.out.print(list[i]);  
          11         System.out.println();  
          12     }else  
          13         forint i = k; i <= m; i++){  
          14         MyMath.swap(list, i, k);  
          15         getPerm(list, k+1, m);  
          16         MyMath.swap(list, i, k);  
          17           
          18     }  
          19 }  


           引申:類似此種算法的還有就是打印字符串(如:ABC)的真子集,其核心算法還是一樣的

           

          posted on 2010-11-21 00:27 XXXXXX 閱讀(509) 評論(0)  編輯  收藏 所屬分類: Algorithm

          主站蜘蛛池模板: 东乡族自治县| 诏安县| 丰都县| 建平县| 孟村| 宣化县| 丁青县| 信阳市| 扎兰屯市| 洛川县| 通城县| 黎平县| 轮台县| 怀仁县| 凌海市| 东海县| 衡阳市| 龙山县| 广宁县| 灵宝市| 上饶县| 曲周县| 塔城市| 姚安县| 吉首市| 三河市| 买车| 万山特区| 安吉县| 大同市| 荆门市| 乌兰县| 新郑市| 景谷| 锡林郭勒盟| 莎车县| 高平市| 巴林右旗| 廉江市| 南川市| 普兰县|