排列組合算法

 

全排列
 /*
     分析:設R= {r1,r2,r3,……,rn}是要進行排列的n個元素,Ri=R-{ri}。集合X中的元素的全排列記爲perm(X).(ri)perm(X)表示在全排列perm(X)的每一個排列前加上前綴ri得到的排列,R的全排列可歸納定義如下:
       當n=1,perm(R) = (r) ,其中r是集合R中唯一的元素。
       當n>1,perm(R)由(r1)perm(R1),(r2)perm(R2),……,(rn)perm(Rn)構成。
*/
 
組合算法   
  思路是開一個數組,其下標表示1到m個數,數組元素的值爲1表示其下標   
  代表的數被選中,爲0則沒選中。     
  首先初始化,將數組前n個元素置1,表示第一個組合爲前n個數。     
  然後從左到右掃描數組元素值的“10”組合,找到第一個“10”組合後將其變爲   
  “01”組合,同時將其左邊的所有“1”全部移動到數組的最左端。     
  當第一個“1”移動到數組的m-n的位置,即n個“1”全部移動到最右端時,就得   
  到了最後一個組合。     
  例如求5中選3的組合:     
  1   1   1   0   0   //1,2,3     
  1   1   0   1   0   //1,2,4     
  1   0   1   1   0   //1,3,4     
  0   1   1   1   0   //2,3,4     
  1   1   0   0   1   //1,2,5     
  1   0   1   0   1   //1,3,5     
  0   1   1   0   1   //2,3,5     
  1   0   0   1   1   //1,4,5     
  0   1   0   1   1   //2,4,5     
  0   0   1   1   1   //3,4,5  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章