Biorąc tablicę lub obiekt za pomocą n kluczy, muszę znaleźć wszystkie kombinacje o długości x
.
Podana X
jest zmienna. binomial_coefficient(n,x)
.Efektywny algorytm uzyskiwania kombinacji wszystkich obiektów w obiekcie
Obecnie używam to:
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"]);
Wyjście jest:
["a", "ab", "abc", "abcd", "abd", "ac", "acd", "ad", "b", "bc", "bcd", "bd", "c", "cd", "d"]
Więc jeśli chcę Symbol Newtona x=3
z n=4
wybiorę wszystkie ciągi o długości równej trzem. {abc, abd, acd, bcd}.
Robię to w dwóch etapach.
Czy istnieje skuteczniejszy algorytm o mniejszej złożoności?
Link:.Solution performance (JSPerf)
Dziękuję wszystkim. Stworzyłem test jsperf ze wszystkimi odpowiedziami [tutaj] (https://jsperf.com/binomial-selection), po przetestowaniu kilku wartości w różnych przeglądarkach i na komputerach Myślę, że David ma najszybsze rozwiązanie –