關於組合問題的一種巧妙方法

2021-06-13 13:36:55 字數 646 閱讀 6433

在演算法設計與分析裡,組合排列(或者表面像排列組合)的問題很好的解決方法主要是回溯法,廣度優先遍曆法。

這裡提供關於組合問題一種巧妙的解決辦法。比如我們要從m個元素裡取n個元素的所有組合。

我們用乙個m位二進位制數代表m個元素(一位代表乙個元素)。取n個元素可以看做是這個m位二進位制數中有n位的值為1.

乙個m位二進位制數可以代表2的m次方個值,(代表m個元素所有組合的情況)

/*** 從m個數里取n個數的組合的個數,這裡i並不是乙個m位數,只是使用了i最右邊的m位數

* 思路:

* @param m

* @param n

* @return

*/public static int getcombinations(int m,int n)

if(count>n)

}if(count==n)

}return total;

}/*  取組合方法

*     引數: list ---- 原始集合

*     返回:  包含所有組合的集合

*/public static list> getcombinations(listlist)

result.add(combine);

}return result;

一種排列組合問題

問題描述 從含有n個元素的序列a aa中選取元素組成含有m個元素的序列b bb。例如可以組成多少個8位數。列舉從任意多的n種元素中選出m個組成新的排列 m n 例如 include include define row 6561 行 3 8 6561 define col 8 列 define nu...

一種巧妙的刪除程式自己的方法

wsprintf szcmdline,text s d s szpathclone,hprocessorig,szpat horig startupinfo si zeromemory si,sizeof si si.cb sizeof si process information pi creat...

一種快速求組合數的方法

介紹一種快速求 dbinom 的方法。其實就是根據定義來做的做法 我們知道 dbinom mod 1e9 7 frac mod 1e9 7 為方便表達,我們設 x n times n 1 times dots times n m 1 即右邊的分子 y 1 times 2 times dots tim...