排列組合

Permunation Combination

全排列是把集合中的元素,按照一定的順序排列起來,使用P(n, n) = n!表示n個元素全排列的個數。例如:{ 1, 2, 3}的全排列為:即3!=321=6。 123 132 213 231 312 321

【演算法】

生成當前列表的下一個相鄰的字典序列表,裡面的元素只能交換位置,數值不能改變。

123的下一個字典序是132,因為132比123大,但是又比其他的序列小。

演算法是:

(1) 從右向左,找出第一個比右邊數字小的數字A。

(2) 從右向左,找出第一個比A大的數字B。

(3) 交換A和B。

(4) 將A後面的串(不包括A)反轉。

就完成了。


組合:01交換法

使用0或1表示集合中的元素是否出現在選出的集合中,因此一個0/1列表即可表示選出哪些元素。

例如:[1 2 3 4 5],選出的元素是[1 2 3]那麼列表就是[1 1 1 0 0]。