Alle Zwei-Paar-Vertauschen innerhalb eines Arrays durchführen

darton

Lt. Junior Grade
Registriert
Okt. 2004
Beiträge
282
Hallo,
ich stehe im Moment vor folgendem Problem. Ich habe ein eindimensionales Array vorliegen und ich möchte alle möglichen Täusche durchführen, die existieren, wenn ich jeweils ein Paar aus der ersten Hälfte des Arrays mit einem Paar aus der zweiten Hälfte des Arrays vertausche.
Also hätte ich z.B. folgendes Array: 1 2 3 4 5 6, würde ich zunächst beide Hälften isoliert betrachten, also 1 2 3 | 4 5 6. Und nun möchte ich alle möglichen Vertauschungen herausfinden, also z.B. den Tausch von (1,2) mit (4,5) oder von (1,2) mit (4,6) usw. Auf jeder Seite gibt es in diesem Fall drei Paare. Insgesamt wären also neun Vertauschungen möglich. Ich benötige dieses Verfahren, da sich durch die Reihenfolge der Elemente im Array ein bestimmter Wert ergibt, den ich nach jeder Vertauschung berechne. Mein Problem ist aber im Moment, wie ich am besten diesen Vertauschungs-Algorithmus implementiere. Gerade komme ich nur auf ein Verfahren, welches aus vier ineinander verschachtelte for-Schleifen besteht, also zwei for-Schleifen pro Hälfte des Arrays. Geht das auch irgendwie mit weniger?
 
permutation!?
 
Tider schrieb:

Nein, denn Permutation ist das einfache Durchwechseln der Zahlen untereinander aber nicht die Paare wie TE möchte. Darum Kombinatorik mit entsprechenden Regeln zur Beachtung der Wiederholungen :)
 
Geht das auch irgendwie mit weniger?

Mit weniger was? Mit geringerem zeitlichen Aufwand oder oder möglichst einfachem Quelltext?
Im Prinzip könntest du mit dem Link den dir SymA gegeben hat sämtliche Permutationen finden und dann einfach die Überflüssigen durch ein paar zusätzliche Regeln rausfiltern...
 
Zuletzt bearbeitet:
Wenn die Zahlenliste etwas länger wird, ist es schnell extrem ineffizient, erstmal alle n! Permutationen zu erzeugen, nur um dann bis auf O(n^4) wieder alle wegzuschmeißen. Man sollte sie schon direkt korrekt erzeugen.
 
Ja kommt halt darauf an was der Threadersteller möchte. Vermutlich will er einfach nur weniger Schleifen verwenden :)
 
Zurück
Oben