Mam listę elementów {a, b, c, d} i muszę wygenerować wszystkie możliwe kombinacje, kiedywygenerować wszystkie możliwe kombinacje - Java
- można wybrać dowolną liczbę przedmiotów
- kolejność nie jest ważna (ab = ba)
- zbiór pusty nie jest uważany
Jeżeli weźmiemy pod uwagę możliwości, powinno być,
n=4, number of items
total #of combinations = 4C4 + 4C3 + 4C2 + 4C1 = 15
użyłem następującej metody rekurencyjnej:
private void countAllCombinations (String input,int idx, String[] options) {
for(int i = idx ; i < options.length; i++) {
String output = input + "_" + options[i];
System.out.println(output);
countAllCombinations(output,++idx, options);
}
}
public static void main(String[] args) {
String arr[] = {"A","B","C","D"};
for (int i=0;i<arr.length;i++) {
countAllCombinations(arr[i], i, arr);
}
}
Czy jest bardziej efektywny sposób to zrobić, gdy rozmiar tablicy jest duża?
Jest to algorytm wykładniczy, więc dla * dużych * tablic nadal będzie wolny, nieważne co. – Kayaman
Możesz obejrzeć http://stackoverflow.com/questions/20935315/java-generate-tower-set-of-a-given-list i http://stackoverflow.com/questions/15498281/generating-power -set-rekursywnie-bez-jakichkolwiek-pętli? s = 4 | 0.0000 – Tunaki
tak, są bardziej efektywne sposoby. istnieją gotowe rozwiązania (tutaj na stosie) do generowania podzbiorów o rozmiarze M z listy wielkości N i dla permutacji podzbiorów. kombinacja ich zrobi to, co chcesz. – AdamSkywalker