Alle Kombinationen der Paare in einem Satz

Möchte ich berechne alle möglichen Listen von Paaren, Sie könnte einen Satz. Zum Beispiel:

input = [1, 2, 3, 4, 5, 6]

output = {[(1,2), (3,4), (5,6)],
          [(2,3), (4,5), (1,6)],
          [(2,4), (1,3), (5,6)],
          [...], .... }

Hinweis: in diesem Beispiel sind nur einige zufällige Dinge, die in der Ausgabe, die meisten entfernt. Ich kümmern sich nicht um die Reihenfolge der Listen oder die Paare innerhalb dieser Listen.

Ich denke, es wäre (n-1)(n-3)(n-5)... möglich, Listen von Paaren. Zuerst dachte ich, Sie könnte alle Permutationen der Eingabe-Liste. Mit all diesen Permutationen könnten Sie das erste mit dem zweiten Element und der Dritte mit der vierten. Aber offensichtlich ist das sehr ineffizient, weil Sie machen würde n! Elemente in der Liste und Sie würden nur noch (n-1)(n-3)(n-5).... Konnte einige mir einen Tipp geben wie dies zu tun ist effizienter? Gibt es einen bekannten Algorithmus oder was wären die richtigen Stichworte, um eine Suche mit? Ich möchte, um dies zu implementieren, in JAVA, also, wenn Sie wollen, um die Verwendung der Collections-Klasse in JAVA kein problem 🙂

Um deutlicher zu sein: die Eingabe immer aus einer geraden Anzahl von Elementen, so dass alle Paare in einer Liste zusammen, sind alle Elemente in der Eingabe.

Edit:
Ich schauen mal für alle Antwort. Jetzt habe ich zu arbeiten-code-vielen Dank dafür. Aber ich brauche es für eine Eingabe mit der Größe n = 26 :(. Ich habe nicht alles umgesetzt, aber ich denke, es wird für eine Weile laufen :(.

  • Sie sind gefragt, für Partitionen, die in Paare? Es wird mehr als n(n-1)/2 von denen. Es werde C(n,2) * C(n-2,2)*...
  • Deine Ausgabe zeigt (5,6) zweimal aufgeführt. Ist das nur ein Fehler???
  • Es gibt n!/[2^(n/2)*(n/2)!] verschiedenen Paarungen, so dass Ihre n! die Lösung ist nicht so eine Verschwendung.
  • Ich habe bearbeitet die Höhe der verschiedenen Paarungen und ich bin mir ziemlich sicher, dass es nun korrigieren. Suchen Sie die Erklärung unten.
InformationsquelleAutor martijnn2008 | 2014-02-13
Schreibe einen Kommentar