高效遍歷乙個陣列的所有排列組合情況

2022-10-05 05:30:13 字數 2183 閱讀 2023

1

public

static

class

iterator29

10private

static

void rotateright(ilistsequence, int

count)

1116

17private

static ienumerable> combinations(ilistsequence, int start, int count, int

choose)

1822

else

27rotateleft(sequence, start, count);28}

29}30}

3132

///33

///迭代從sequence中取出choose個元素的所有組合情況

34///

即c(n,m),n為sequence.count,m為choose

35///

36///

37///

38///

39///

注意返回的list的長度沒有縮短成choose,使用者可以只遍歷list的前choose個元素即可,或者呼叫take(choose)取出前choose個元素

40public

static ienumerable> combinations(this ilistsequence, int

choose)

4144

45private

static ienumerable> permutations(ilistsequence, int

count)

4650

else

55rotateright(sequence, count);56}

57}58}

5960

///61

///迭代sequence所有的排列情況

62///

63///

64///

65///

66public

static ienumerable> permutations(this ilistsequence)

6770

71///

72///

返回從字串s中取出count個字母的所有組合情況

73///

74///

75///

76///

77public

static ienumerable combinations(this

string s, int

count)

7882}83

84///

85///

返回字串s的所有排列情況

86///

87///

88///

89public

static ienumerable permutations(this

string

s)9094}

95 }

1

foreach (var s in

"abcdef

".combinations(3

)) "

, s);3}

45 console.writeline("

---------------------");

67foreach (var s in

"abc

".permutations())

", s);

9 }

上面會輸出

abc     abd     abe     abf     acd     ace     acf     ade     adf     aef     bcd     bce     bcf     bde     bdf     bef     cde     cdf     cef     def

---------------------abc bac cab acb bca cba

這個演算法完全不需要分配額外空間,直接在原空間裡進行遍歷,所以對記憶體比較友好。但由於遍歷過程會直接修改原陣列,如果你不能接受這種情況,可以考慮在遍歷前拷貝乙份,對拷貝的那個陣列進行遍歷即可。

排列組合(包含所有組合可能和指定元素個數的組合)

當元素個數少時.元素組合方式 f 1 a a f 2 a,b b ba a f 3 a,b,c c cb cba ca b ba a f 4 a,b,c,d d dc dcb dcba dca db dba da c cb cba ca b ba a f n 由上表可以得出,n 個元素的所有組合方式...

遞迴用法 乙個排列組合的例子

abc的全排列 a開頭 abc acb b開頭 bca bac c開頭 cab cba 分析 遞迴過程 示例 includeusing namespace std int c1 0 統計遞迴次數 int c2 0 void show char p,int m void perm char a,con...

乙個排列組合演算法 裂變演算法

2009年1月15日 瀋陽 晴 為解決1月7日遇到的排列組合的難題,進行了以下題目的研究,並用c 實現了乙個非遞迴的演算法。有乙個list,list中存有n個物件,要求做出這n個物件所有無序組。數學公式 組合數 c n,1 c n,2 c n,n c 的演算法實現 一 組合生成器 二 測試程式 三 ...