在演算法設計與分析裡,組合排列(或者表面像排列組合)的問題很好的解決方法主要是回溯法,廣度優先遍曆法。
這裡提供關於組合問題一種巧妙的解決辦法。比如我們要從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...