給定一個數組或具有n個鍵的對象,我需要找到長度爲x
的所有組合。
鑑於X
是可變的。 binomial_coefficient(n,x)
。有效的算法來獲得對象中所有項目的組合
目前我使用的是這樣的:
function combine(items) {
var result = [];
var f = function(prefix, items) {
for (var i = 0; i < items.length; i++) {
result.push(prefix + items[i]);
f(prefix + items[i], items.slice(i + 1));
}
}
f('', items);
return result;
}
var combinations = combine(["a", "b", "c", "d"]);
輸出是:
["a", "ab", "abc", "abcd", "abd", "ac", "acd", "ad", "b", "bc", "bcd", "bd", "c", "cd", "d"]
所以,如果我想從n=4
二項式係數x=3
我選擇所有長度等於三個字符串。 {abc,abd,acd,bcd}。
所以我分兩步做。
有更復雜的更有效的算法嗎?
鏈接:Solution performance (JSPerf)
謝謝大家。我在所有答案[這裏](https://jsperf.com/binomial-selection)中創建了一個jsperf測試,在不同的瀏覽器和PC上測試了幾個值後,我認爲David有最快的解決方案 –