www.wikidata.de-de.nina.az
Der Steinhaus Johnson Trotter Algorithmus oder der Johnson Trotter Algorithmus auch einfache Anderungen genannt ist ein Algorithmus der nach Hugo Steinhaus Selmer M Johnson und Hale Trotter benannt ist und alle Permutationen von n displaystyle n Elementen erzeugt Jede Permutation in der von ihr erzeugten Sequenz unterscheidet sich von der vorherigen Permutation durch Vertauschen zweier benachbarter Elemente der Sequenz Entsprechend findet dieser Algorithmus einen Hamiltonweg im Permutaeder Der Hamiltonpfad im Cayleygraph der symmetrischen Gruppe die mit dem Steinhaus Johnson Trotter Algorithmus erzeugt wurdeDie Permutationen von vier Elementen deren element basierte Vertauschungs Satze Satze von Element Paaren ausserhalb ihrer naturlichen Reihenfolge Vertauschungs Vektoren und Vertauschungs Zahlen Die Vertauschungs Satze bilden einen Gray Code also auch die Vertauschungs Vektoren Summen der aufsteigenden Diagonalen in den Dreiecken und die Vertauschungs Zahlen Die Zahlen auf der linken Seite sind die umgekehrten kolexikografischen Indizes der Permutationen vergleiche Liste in naturlicher Reihenfolge und bilden Zeile 4 des Dreiecks Folge A280319 in OEIS Die Vertauschungs Satze von Permutationen die 12 Stellen voneinander entfernt sind sind Komplemente Polardiagramm aller Permutationen n 4 displaystyle n 4 generiert durch den Steinhaus Johnson Trotter Algorithmus bei dem jede Permutation farbcodiert ist 1 blau 2 grun 3 gelb 4 rot Diese Methode war bereits den englischen Change Ringern des 17 Jahrhunderts bekannt und Robert Sedgewick nennt sie 1977 den vielleicht bekanntesten Permutations Aufzahlungsalgorithmus Er ist nicht nur einfach und rechnerisch effizient sondern hat auch den Vorteil dass nachfolgende Berechnungen der von ihm erzeugten Permutationen beschleunigt werden konnen da diese Permutationen einander so ahnlich sind 1 Inhaltsverzeichnis 1 Rekursive Struktur 2 Algorithmus 3 Beschleunigung durch Even 4 Geometrische Interpretation 5 Beziehung zu Gray Codes 6 Geschichte 7 Siehe auch 8 EinzelnachweiseRekursive Struktur BearbeitenDie Folge von Permutationen fur eine gegebene Anzahl n displaystyle n nbsp kann aus der Folge von Permutationen fur n 1 displaystyle n 1 nbsp gebildet werden indem die Zahl n displaystyle n nbsp an jeder moglichen Position in jeder der kurzeren Permutationen platziert wird Wenn die Permutation fur n 1 displaystyle n 1 nbsp Elemente eine gerade Permutation ist wie dies fur die ersten dritten usw Permutationen in der Sequenz der Fall ist wird die Zahl n displaystyle n nbsp an allen moglichen Positionen in absteigender Reihenfolge von n displaystyle n nbsp bis 1 platziert Wenn die Permutation fur n 1 displaystyle n 1 nbsp Elemente ungerade ist wird die Zahl n displaystyle n nbsp in aufsteigender Reihenfolge an allen moglichen Positionen platziert 2 Daher gilt Aus der einzelnen Permutation fur ein Element 1kann man die Zahl 2 an jeder moglichen Position in absteigender Reihenfolge platzieren um eine Liste von zwei Permutationen auf zwei Elementen zu bilden 1 2 2 1Dann kann man die Zahl 3 in jeweils drei verschiedenen Positionen fur diese beiden Permutationen in absteigender Reihenfolge fur die erste Permutation 1 2 und dann in aufsteigender Reihenfolge fur die Permutation 2 1 platzieren 1 2 3 1 3 2 3 1 2 3 2 1 2 3 1 2 1 3Auf der nachsten Rekursionsstufe wurde die Zahl 4 in absteigender Reihenfolge in 1 2 3 in aufsteigender Reihenfolge in 1 3 2 in absteigender Reihenfolge in 3 1 2 usw platziert Das gleiche Platzierungsmuster das zwischen absteigender und aufsteigender Platzierung von n displaystyle n nbsp wechselt gilt fur jeden grosseren Wert von n displaystyle n nbsp Auf diese Weise unterscheidet sich jede Permutation von der vorherigen entweder durch die Bewegung von n displaystyle n nbsp um jeweils eine Position oder durch einen Tausch von zwei kleineren Zahlen die von der vorherigen Folge kurzerer Permutationen ubernommen wurden In beiden Fallen ist dieser Unterschied nur die Vertauschung zweier benachbarter Elemente Wenn n gt 1 displaystyle n gt 1 nbsp ist unterscheiden sich das erste und das letzte Element der Sequenz auch nur in zwei benachbarten Elementen den Positionen der Zahlen 1 und 2 wie durch Induktion gezeigt werden kann Obwohl diese Sequenz durch einen rekursiven Algorithmus erzeugt werden kann der die Folge kleinerer Permutationen konstruiert und dann alle moglichen Einfugungen der grossten Zahl in die rekursiv erzeugte Folge durchfuhrt vermeidet der tatsachliche Steinhaus Johnson Trotter Algorithmus eine Rekursion und berechnet stattdessen dieselbe Folge von Permutationen durch eine iterative Methode Es gibt eine aquivalente und konzeptionell etwas einfachere Definition der Steinhaus Johnson Trotter Reihenfolge von Permutationen uber den folgenden gierigen Algorithmus 3 Wir beginnen mit der Identitats Permutation 12 n displaystyle 12 dots n nbsp Jetzt vertauschen wir wiederholt den grosstmoglichen Eintrag mit dem Eintrag links oder rechts sodass in jedem Schritt eine neue Permutation erstellt wird die in der Liste der Permutationen zuvor noch nicht existierte Zum Beispiel beginnen wir in dem Fall n 3 displaystyle n 3 nbsp mit 123 dann tauschen wir 3 mit seinem linken Nachbarn und erhalten 132 Wir tauschen dann 3 mit seinem linken Nachbarn 1 da das Tauschen von 3 mit seinem rechten Nachbarn 2 wieder 123 ergeben wurde was wir zuvor schon erzeugt haben also kommen wir zu 312 usw Die Richtung der Vertauschung links oder rechts wird in diesem Algorithmus immer eindeutig vorgegeben Algorithmus BearbeitenWie von Johnson 4 beschrieben fuhrt der Algorithmus zum Erzeugen der nachsten Permutation aus einer gegebenen Permutation p die folgenden Schritte aus fur jedes i von 1 bis n sei xi die Position an der der Wert i in die Permutation p gesetzt ist Wenn die Reihenfolge der Zahlen von 1 bis i 1 in der Permutation p eine gerade Permutation ist setze yi xi 1 andernfalls setze yi xi 1 finde die grosste Zahl i fur die yi eine gultige Position in der Permutation p definiert die eine Zahl kleiner als i enthalt Tausche die Werte an den Positionen xi und yi aus Wenn keine Zahl i gefunden werden kann die die Bedingungen des zweiten Schritts des Algorithmus erfullt hat der Algorithmus die endgultige Permutation der Sequenz erreicht und endet Diese Prozedur kann in O n displaystyle O n nbsp Zeit pro Permutation implementiert werden Trotter 5 gibt eine alternative Implementierung eines iterativen Algorithmus fur dieselbe Sequenz in leicht kommentierter ALGOL 60 Notation an Da diese Methode Permutationen generiert die zwischen gerade und ungerade wechseln kann sie leicht geandert werden um nur die geraden Permutationen oder nur die ungeraden Permutationen zu generieren Um die nachste Permutation derselben Paritat aus einer bestimmten Permutation zu generieren wenden Sie einfach dieselbe Prozedur zweimal an 6 Beschleunigung durch Even BearbeitenEine nachfolgende Verbesserung durch Shimon Even verbessert die Laufzeit des Algorithmus indem zusatzliche Informationen fur jedes Element in der Permutation gespeichert werden seine Position und eine Richtung positiv negativ oder Null in die es sich gerade bewegt im Wesentlichen sind dies die gleichen Informationen die unter Verwendung der Paritat der Permutation in Johnsons Version des Algorithmus berechnet wurden Anfangs ist die Richtung der Zahl 1 Null und alle anderen Elemente haben eine negative Richtung 1 2 3Bei jedem Schritt findet der Algorithmus das grosste Element mit einer Richtung ungleich Null und tauscht es in die angegebene Richtung aus 1 3 2Wenn dies dazu fuhrt dass das ausgewahlte Element die erste oder letzte Position innerhalb der Permutation erreicht oder wenn das nachste Element in derselben Richtung grosser als das ausgewahlte Element ist wird die Richtung des ausgewahlten Elements auf Null gesetzt 3 1 2Nach jedem Schritt werden fur alle Elemente die grosser als das ausgewahlte Element sind das zuvor die Richtung Null hatte die Richtungen so eingestellt dass sie eine Bewegung in Richtung des ausgewahlten Elements anzeigen Das heisst positiv fur alle Elemente zwischen dem Beginn der Permutation und dem ausgewahlten Element und negativ fur Elemente zum Ende hin In diesem Beispiel wird die Nummer 3 nach dem Bewegen der Nummer 2 erneut mit einer Richtung markiert 3 2 1Die verbleibenden zwei Schritte des Algorithmus fur n 3 displaystyle n 3 nbsp sind 2 3 1 2 1 3Wenn keine Zahl mehr markiert ist wird der Algorithmus beendet Dieser Algorithmus benotigt die Zeit O i displaystyle O i nbsp fur jeden Schritt in dem die grosste zu bewegende Zahl n i 1 displaystyle n i 1 nbsp ist Somit benotigen die Vertauschungen mit der Zahl n displaystyle n nbsp nur eine konstante Zeit Da diese Vertauschungen fur alle bis auf einen 1 n displaystyle 1 n nbsp Bruchteil aller Vertauschungen greifen die durch den Algorithmus durchgefuhrt werden ist die durchschnittliche Zeit pro Permutation ebenfalls konstant wenn auch eine kleine Anzahl von Permutationen eine grossere Zeit in Anspruch nimmt 1 Eine komplexere schleifenlose Version derselben Prozedur ermoglicht es sie in jedem Fall in konstanter Zeit pro Permutation durchzufuhren Die Anderungen die erforderlich sind um Schleifen aus dem Verfahren zu entfernen machen es in der Praxis jedoch langsamer 7 Geometrische Interpretation BearbeitenDie Menge aller Permutationen von n displaystyle n nbsp Elementen kann geometrisch durch einen Permutaeder dargestellt werden Das ist das Polytop das aus der konvexen Hulle von n displaystyle n nbsp Vektoren gebildet wird eben den Permutationen des Vektors 1 2 n displaystyle 1 2 dots n nbsp Obwohl auf diese Weise im n displaystyle n nbsp dimensionalen Raum definiert handelt es sich tatsachlich um ein n 1 displaystyle n 1 nbsp dimensionales Polytop Beispielsweise ist das Permutaeder auf vier Elementen ein dreidimensionales Polyeder eben der Oktaederstumpf Wenn jede Ecke des Permutaeders durch die inverse Permutation zu der durch seine Eck Koordinaten definierten Permutation gekennzeichnet ist beschreibt die resultierende Beschriftung einen Cayley Graphen der symmetrischen Gruppe von Permutationen auf n displaystyle n nbsp Elementen wie sie durch die Permutationen erzeugt werden die benachbarte Elementpaare austauschen Somit entsprechen jeweils zwei aufeinander folgende Permutationen in der vom Steinhaus Johnson Trotter Algorithmus erzeugten Sequenz auf diese Weise zwei Eckpunkten die die Endpunkte einer Kante im Permutaeder bilden und die gesamte Sequenz von Permutationen beschreibt einen Hamilton Pfad im Permutaeder Ein Pfad der genau einmal durch jeden Eckpunkt verlauft Wenn die Folge von Permutationen durch Hinzufugen einer weiteren Kante von der letzten Permutation zur ersten in der Folge abgeschlossen ist ist das Ergebnis stattdessen ein Hamilton Zyklus 2 Beziehung zu Gray Codes BearbeitenEin Gray Code fur Zahlen in einem bestimmten Stellenwertsystem ist eine Sequenz die jede Zahl bis zu einer bestimmten Grenze genau einmal enthalt sodass sich jedes Paar aufeinander folgender Zahlen in einer einzelnen Ziffer um eins unterscheidet Die n displaystyle n nbsp Permutationen der n displaystyle n nbsp Zahlen von 1 bis n konnen in eine Eins zu Eins Beziehung mit dem n displaystyle n nbsp Zahlen von 0 bis n 1 displaystyle n 1 nbsp gesetzt werden indem jede Permutation mit der Folge von Zahlen ci verbunden wird die die Anzahl der Positionen in der Permutation zahlt die rechts vom Wert i liegen und einen Wert kleiner als i enthalten d h die Anzahl der Vertauschungen fur die i der grossere der beiden getauschten Werte ist und dann diese Sequenzen als Zahlen im fakultatsbasiertem Zahlensystem interpretiert werden d h im Zahlensystem mit gemischten Basen mit den Basen 1 2 3 4 Zum Beispiel wurde die Permutation 3 1 4 5 2 die Werte c1 0 c2 0 c3 2 c4 1 und c5 1 ergeben Die Folge von diesen Werte 0 0 2 1 1 gibt folgende Zahl an 0 0 0 1 2 2 1 3 1 4 34 Aufeinander folgende Permutationen in der vom Steinhaus Johnson Trotter Algorithmus erzeugten Sequenz weisen eine Anzahl von Vertauschungen auf die sich um eins unterscheiden und einen Gray Code fur das fakultatsbasierte Zahlensystem bilden 6 Allgemeiner gesagt haben Forscher von kombinatorischen Algorithmen einen Gray Code fur eine Reihe von kombinatorischen Objekten definiert der eine Reihenfolge fur die Objekte ist in der sich jeweils zwei aufeinander folgende Objekte auf minimal mogliche Weise unterscheiden In diesem verallgemeinerten Sinne generiert der Steinhaus Johnson Trotter Algorithmus einen Gray Code fur die Permutationen selbst Geschichte BearbeitenDer Algorithmus ist nach Hugo Steinhaus Selmer M Johnson und Hale Trotter benannt Johnson und Trotter entdeckten den Algorithmus Anfang der 1960er Jahre unabhangig voneinander Ein Buch von Steinhaus das ursprunglich 1958 veroffentlicht und 1963 ins Englische ubersetzt wurde beschreibt ein verwandtes Ratsel bei dem alle Permutationen durch ein System von Teilchen erzeugt werden die sich jeweils mit konstanter Geschwindigkeit entlang einer Linie bewegen und ihre Positionen vertauschen wenn ein Teilchen ein anderes uberholt Fur n gt 3 displaystyle n gt 3 nbsp ist keine Losung moglich da die Anzahl der Vertauschungen weitaus geringer ist als die Anzahl der Permutationen Der Steinhaus Johnson Trotter Algorithmus beschreibt jedoch die Bewegung von Teilchen mit nicht konstanten Geschwindigkeiten die alle Permutationen erzeugen Ausserhalb der Mathematik war diese Methode schon viel langer als eine Methode zum Andern des Tons von mehreren Kirchenglocken bekannt Sie gibt ein Verfahren an mit dem eine Reihe von Glocken durch alle moglichen Permutationen gelautet werden kann wobei nur zwei Glocken pro Anderung getauscht werden Diese sogenannten einfachen Veranderungen wurden bereits 1621 fur vier Glocken aufgezeichnet und ein Buch von Fabian Stedman aus dem Jahr 1677 listet die Losungen fur bis zu sechs Glocken auf In jungerer Zeit haben sich Glockner an die Regel gehalten dass keine Glocke in drei aufeinander folgenden Permutationen an derselben Position bleiben darf Da dies die Regel der einfachen Anderungen verletzt wurden andere Strategien entwickelt die mehrere Glocken pro Anderung austauschen 8 Siehe auch BearbeitenHeap Algorithmus Fisher Yates VerfahrenEinzelnachweise Bearbeiten a b R Sedgewick Permutation Generation Methods In ACM Computing Surveys 9 Jahrgang Nr 2 1977 S 137 164 doi 10 1145 356689 356692 a b Carla Savage A survey of combinatorial Gray codes In SIAM 39 Jahrgang Nr 4 1997 S 605 629 doi 10 1137 S0036144595295272 Aaron Williams The greedy Gray code algorithm 13th International Symposium on Algorithms and Data Structures In Proceedings of the 13th International Symposium on Algorithms and Data Structures WADS London Ontario Canada 2013 S 525 536 doi 10 1007 978 3 642 40104 6 46 englisch Selmer M Johnson Generation of permutations by adjacent transposition In Mathematics of Computation 17 Jahrgang 1963 S 282 285 doi 10 1090 S0025 5718 1963 0159764 2 H F Trotter Algorithm 115 Perm In Communications of the ACM 5 Jahrgang Nr 8 August 1962 S 434 435 doi 10 1145 368637 368660 a b Donald Knuth The Art of Computer Programming volume 4A In https www cs faculty stanford edu knuth fasc2b ps gz 2011 Gideon Ehrlich Loopless algorithms for generating permutations combinations and other combinatorial configurations In Journal of the ACM 20 Jahrgang Nr 3 1973 S 500 513 doi 10 1145 321765 321781 Gary McGuire Bells motels and permutation groups In https citeseerx ist psu edu viewdoc summary doi 10 1 1 6 5544 2003 Abgerufen von https de wikipedia org w index php title Steinhaus Johnson Trotter Algorithmus amp oldid 235836147