Generieren Sie alle möglichen Kombinationen - Java

Maddy:

Ich habe eine Liste der Elemente {a, b, c, d} und muss alle möglichen Kombinationen generieren, wenn,

  • Sie können eine beliebige Anzahl von Elementen auswählen
  • Die Reihenfolge ist nicht wichtig (ab = ba)
  • leerer Satz wird nicht berücksichtigt

Wenn wir die Möglichkeiten nutzen, sollte es sein,

n=4, number of items
total #of combinations = 4C4 + 4C3 + 4C2 + 4C1 = 15

Ich habe die folgende rekursive Methode verwendet:

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);
    }
}

Gibt es eine effizientere Möglichkeit, dies zu tun, wenn das Array groß ist?

Yash Sachdeva:

Betrachten Sie die Kombination als eine binäre Folge. Wenn alle 4 vorhanden sind, erhalten wir 1111, wenn das erste Alphabet fehlt, erhalten wir 0111 usw. Für n Alphabete haben wir also 2 ^ n -1 (seit 0) ist nicht enthalten) Kombinationen.

Wenn in Ihrer erzeugten Binärsequenz der Code 1 ist, ist das Element vorhanden, andernfalls ist es nicht enthalten. Nachfolgend finden Sie die Proof-of-Concept-Implementierung:

String arr[] = { "A", "B", "C", "D" };
int n = arr.length;
int N = (int) Math.pow(2d, Double.valueOf(n));  
for (int i = 1; i < N; i++) {
    String code = Integer.toBinaryString(N | i).substring(1);
    for (int j = 0; j < n; j++) {
        if (code.charAt(j) == '1') {
            System.out.print(arr[j]);
        }
    }
    System.out.println();
}

Und hier ist eine generische wiederverwendbare Implementierung:

public static <T> Stream<List<T>> combinations(T[] arr) {
    final long N = (long) Math.pow(2, arr.length);
    return StreamSupport.stream(new AbstractSpliterator<List<T>>(N, Spliterator.SIZED) {
        long i = 1;
        @Override
        public boolean tryAdvance(Consumer<? super List<T>> action) {
            if(i < N) {
                List<T> out = new ArrayList<T>(Long.bitCount(i));
                for (int bit = 0; bit < arr.length; bit++) {
                    if((i & (1<<bit)) != 0) {
                        out.add(arr[bit]);
                    }
                }
                action.accept(out);
                ++i;
                return true;
            }
            else {
                return false;
            }
        }
    }, false);
}

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Generieren Sie alle möglichen Kombinationen

Generieren Sie alle möglichen eindeutigen Kombinationen von Picks

Generieren Sie alle möglichen Kombinationen mit PHP

PHP: Generieren Sie alle möglichen alphanumerischen Kombinationen einer Zeichenfolge

Alle möglichen Kombinationen in SQL generieren?

Generieren Sie alle Kombinationen

Generieren Sie alle möglichen Kombinationen von Array-Spalten in Python

T-SQL :: Verwenden Sie GROUP BY CUBE, um alle möglichen Kombinationen zu generieren

Generieren Sie alle möglichen eindeutigen Kombinationen von zwei Excel-Spalten

Generieren Sie alle möglichen Kombinationen für Spalten in Google SpreadSheets

Generieren Sie alle möglichen Kombinationen, die palindrom sind, aus einer bestimmten Zeichenfolge (Javascript).

So generieren Sie alle möglichen Kombinationen einer bestimmten Länge

Generieren Sie ALLE möglichen Kombinationen aus einer Reihe von Listen

So generieren Sie alle möglichen Kombinationen von drei Variablen, die sich zu 1 . summieren

Generieren Sie alle möglichen Kombinationen von Binärwerten in einer Liste Python

Auf schnellstem Weg alle möglichen Kombinationen generieren

So generieren Sie alle möglichen Kombinationen von zwei Münzen mit drei Möglichkeiten (hoch, runter und dazwischen)

Generieren Sie alle möglichen Kombinationen von Triplettpaaren aus 3 Vektoren zusammen mit ihren ursprünglichen Koordinaten

Generieren Sie alle möglichen Kombinationen mit der Länge "N" aus der angegebenen Wortliste (Suche nach keiner Wiederholung)

Generieren Sie alle möglichen Teilzeichenfolgen nacheinander

Generieren Sie alle möglichen Zeilenkombinationen in R?

Alle möglichen 2-Zeichen-Kombinationen einer möglichen 8-Zeichen-Zeichenfolge generieren?

Generieren Sie alle Kombinationen aus mehreren Listen

Generieren Sie alle Kombinationen eines mehrdimensionalen Objekts

Generieren Sie alle Kombinationen von Parametern

Führen Sie alle möglichen Kombinationen mehrerer Datenrahmen zusammen

So erstellen Sie alle möglichen Kombinationen mehrerer Variablen in Python

Finden Sie mit Excel alle möglichen Kombinationen

Finden Sie alle möglichen Kombinationen von Knoten in einem Diagramm

TOP Liste

  1. 1

    So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable

  2. 2

    Unity Build-Fehler: Der Name 'EditorUtility' ist im aktuellen Kontext nicht vorhanden

  3. 3

    TypeAhead.js zeigt keine Ausgangsschienen an?

  4. 4

    Deklarieren einer nicht initialisierten Variablen in der Klassendefinition in Python

  5. 5

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  6. 6

    spring-data-jpa: ORA-01795: Die maximale Anzahl von Ausdrücken in einer Liste beträgt 1000

  7. 7

    Warum funktioniert Phantomjs nicht mit dieser Site?

  8. 8

    Interpolieren Sie mit Python die 2D-Matrix entlang der Spalten

  9. 9

    numpy: Berechnen Sie die Ableitung der Softmax-Funktion

  10. 10

    Wie vermeide ich, dass die gesamte App neu geladen wird, wenn Nav.Link von React-Bootstrap verwendet wird?

  11. 11

    MongoDB eingebettetes Dokument unterscheiden und filtern

  12. 12

    Aktualisieren des Werts im Json-Objekt in Python

  13. 13

    Warum funktioniert das Umgebungslicht in diesem Beispiel nicht?

  14. 14

    Python gibt einen Fehler aus, dass eine Datei nicht vorhanden ist, wenn dies eindeutig der Fall ist

  15. 15

    Wie verwende ich Format-Table ohne Abschneiden von Werten?

  16. 16

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  17. 17

    Überprüfen Sie, ob der ausgewählte Wert 'YES' ist, wenn ja, aktivieren Sie ein Steuerelement mit Javascript

  18. 18

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  19. 19

    Holen Sie sich verwandte Pillen Inhalt mit angeklickten img in Angular

  20. 20

    Eclipse Oxygen - Projekte verschwinden

  21. 21

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

heißlabel

Archiv