www.wikidata.de-de.nina.az
Topologische Sortierung bezeichnet in der Mathematik eine Reihenfolge von Dingen bei der vorgegebene Abhangigkeiten erfullt sind Anstehende Tatigkeiten einer Person etwa unterliegen einer Halbordnung es existieren Bedingungen wie Tatigkeit A muss vor Tatigkeit B erledigt werden Eine Reihenfolge welche alle Bedingungen erfullt nennt man topologische Sortierung der Menge anstehender Tatigkeiten Im Gegensatz zur Sortierung einer Totalordnung ist die Reihenfolge nicht eindeutig sondern es kann mehrere Moglichkeiten geben Wenn gegenseitige Abhangigkeiten bestehen ist eine topologische Sortierung unmoglich Aus mengentheoretischer Sicht handelt es sich bei der topologischen Sortierung um eine lineare Erweiterung einer partiellen Ordnung 1930 zeigte Edward Szpilrajn dass aus dem Auswahlaxiom folgt dass sich jede partielle Ordnung zu einer linearen Ordnung erweitern lasst 1 Die topologische Sortierung fur endliche Mengen hier wird das Auswahlaxiom nicht gebraucht ist bei vielen Anwendungen der Informatik ein wichtiges Konzept Bereits 1961 wurde von Daniel J Lasser ein Algorithmus entwickelt mit dem eine topologische Sortierung ganz allgemein erstellt werden kann Zuvor waren allerdings schon Algorithmen fur spezielle Anwendungen bekannt Des Weiteren spielt die topologische Sortierung in der Graphentheorie bei der Untersuchung von gerichteten Graphen auf Zyklenfreiheit eine grosse Rolle Inhaltsverzeichnis 1 Das Problem 1 1 Beispiel Anziehreihenfolge von Kleidungsstucken 1 2 Mathematische Beschreibung des Problems 1 2 1 Die zu sortierende Menge 1 2 2 Die topologisch sortierte Menge 1 2 3 Definition der topologischen Sortierung 1 2 4 Azyklische Graphen und topologische Sortierungen 1 3 Darstellung als gerichteter Graph 1 3 1 Sortierbare Graphen 1 3 2 Nicht sortierbare Graphen 2 Algorithmus 2 1 Entfernung von Elementen ohne Vorganger 2 2 Reprasentation im Rechner 2 3 Algorithmus fur das Topologische Sortieren 2 3 1 Einfache Version mit Markierung von Elementen 2 3 2 Erweiterte Version mit einer zusatzlichen Hilfsliste 2 4 Zeitverhalten Komplexitat 2 4 1 Average und Worst Case 2 4 2 Erste Phase Aufbau der Vorgangerzahlen 2 4 3 Hilfsliste fur vorgangerlose Elemente 2 4 4 Zweite Phase Entnahme von vorgangerlosen Elementen 2 4 5 Gesamtverhalten 2 4 6 Ungunstiger Aufbau der Listen 2 5 Programm in der Programmiersprache Perl 3 Beispiele 3 1 Unterprogrammaufrufe und Rekursion 3 2 Hauptkategorien und Unterkategorien 3 3 tsort Kommando unter Unix und Linux 4 Siehe auch 5 Literatur 6 Weblinks 7 EinzelnachweiseDas Problem BearbeitenVerschiedene Objekte konnen nach messbaren Grossen zum Beispiel Stadte nach Einwohnerzahlen Schuhe nach Schuhgrossen aber auch alphabetisch nach Namen eindeutig sortiert werden Oft gelingt dies jedoch nicht mehr wenn nur Beziehungen der Form Vorganger Nachfolger angegeben werden und solche Beziehungen nicht fur jedes Paar von Objekten vorhanden sind Gegenseitige Abhangigkeiten konnen daruber hinaus eine Sortierung unmoglich machen etwa beim Schachspiel Anton gewinnt gegen Bernd Bernd gewinnt gegen Clemens und Clemens gewinnt gegen Anton Gelingt es die Objekte in eine Reihenfolge zu bringen bei der Vorganger stets vor Nachfolgern auftreten so ist diese Reihenfolge eine topologische Sortierung der Objekte Je nach Art der Beziehungen kann es keine nur eine oder mehrere verschiedene topologische Sortierungen geben Wenn gegenseitige zyklische Abhangigkeiten bestehen ist eine topologische Sortierung nicht moglich In der Tat ist ein Anwendungsgebiet der topologischen Sortierung die Uberprufung ob zyklische Abhangigkeiten bestehen Beispiel Anziehreihenfolge von Kleidungsstucken Bearbeiten Beim Anziehen von Kleidungsstucken mussen manche Teile unbedingt vor anderen angezogen werden So muss ein Pullover vor einem Mantel angezogen werden Hat man zum Beispiel eine Hose ein Unterhemd Pullover Mantel Socken eine Unterhose und ein Paar Schuhe so kann man die folgenden Beziehungen fur das Anziehen angeben Das Unterhemd vor dem Pullover Die Unterhose vor der Hose Den Pullover vor dem Mantel Die Hose vor dem Mantel Die Hose vor den Schuhen Die Socken vor den SchuhenUm eine sinnvolle Reihenfolge zu bestimmen konnen die sieben Kleidungsstucke topologisch sortiert werden also etwa Erst die Unterhose dann die Socken Hose Unterhemd Pullover Mantel Schuhe Aber auch Erst das Unterhemd dann die Unterhose dann Pullover Socken Hose Schuhe Mantel Jedoch nicht Erst den Pullover da das Unterhemd vorher angezogen werden muss Mathematische Beschreibung des Problems Bearbeiten Die zu sortierende Menge Bearbeiten Die zu sortierenden Objekte mussen bezuglich der Beziehung teilweise angeordnet werden konnen damit sie topologisch sortierbar sind Mathematisch bilden die Objekte die Elemente einer Menge M displaystyle M nbsp die bezuglich einer Relation Beziehung R displaystyle R nbsp die folgenden Eigenschaften hat Fur jeweils beliebige Elemente a b c displaystyle a b c nbsp der Menge M displaystyle M nbsp und der Relation R displaystyle R nbsp gilt Irreflexivitat a R a displaystyle neg a R a nbsp a displaystyle a nbsp steht nicht mit a displaystyle a nbsp in Relation Transitivitat Wenn a R b displaystyle a R b nbsp und b R c displaystyle b R c nbsp dann gilt a R c displaystyle a R c nbsp Ubersetzt heisst dies Ich kann die Hose nicht vor der Hose anziehen Wenn ich das Unterhemd vor dem Pullover anziehen muss und den Pullover vor dem Mantel so folgt daraus dass ich das Unterhemd vor dem Mantel anziehen muss Die Menge M displaystyle M nbsp bildet dann bezuglich der Relation R displaystyle R nbsp eine strenge Halbordnung Oft schreibt man statt R displaystyle R nbsp auch einfach lt displaystyle lt nbsp weil die Relation ahnliche Eigenschaften hat wie die Kleiner Relation fur Zahlen Allerdings hat die Kleiner Relation noch einige weitere Eigenschaften die man hier nicht unbedingt hat So kann man bei der Kleiner Relation von zwei verschiedenen Zahlen immer entscheiden welche der beiden kleiner ist Hier ist dies nicht verlangt Im Beispiel ware dies der Vergleich von Socken und Unterhemd Man kann nicht sagen dass eines davon zuerst angezogen werden muss Ublicherweise wird jedoch nicht die ganze Relation R displaystyle R nbsp angegeben sondern nur eine ausreichende Teilmenge von direkten Vorganger Nachfolger Paaren Die Relation R displaystyle R nbsp ist dann uber den transitiven Abschluss der durch die ubergebenen Paare definierten Relation gegeben Beispielsweise besagt die komplette Relation R displaystyle R nbsp fur das Beispielproblem auch dass das Unterhemd vor dem Mantel angezogen werden muss wegen Unterhemd vor Pullover und Pullover vor Mantel folgt aus der Transitivitat auch Unterhemd vor Mantel Der transitive Abschluss besteht nun darin diese Paare der Relation R displaystyle R nbsp hinzuzufugen Bei der Implementierung eines entsprechenden Sortieralgorithmus wird allerdings die vollstandige Relation nicht explizit generiert Die topologisch sortierte Menge Bearbeiten Eine bestimmte Reihenfolge hingegen wird mathematisch durch eine strenge Totalordnung definiert Fur je zwei verschiedene Elemente a b displaystyle a b nbsp aus M displaystyle M nbsp ist festgelegt ob a displaystyle a nbsp vor b displaystyle b nbsp oder b displaystyle b nbsp vor a displaystyle a nbsp kommt Es steht z B fest ob ich heute Morgen zuerst die Unterhose oder zuerst das Unterhemd angezogen habe Die strenge Totalordnung ist also mathematisch definiert durch das zusatzliche Axiom der Trichotomie Fur beliebige Elemente a b displaystyle a b nbsp aus M displaystyle M nbsp gilt entweder a R b displaystyle a R b nbsp oder a b displaystyle a b nbsp oder b R a displaystyle b R a nbsp Die Aufgabe des topologischen Sortierens ist nun zu einer gegebenen strengen Halbordnung R displaystyle R nbsp eine Totalordnung R displaystyle tilde R nbsp zu finden so dass fur alle a b displaystyle a b nbsp mit a R b displaystyle a R b nbsp auch gilt a R b displaystyle a tilde R b nbsp Definition der topologischen Sortierung Bearbeiten Motiviert durch die Untersuchungen der beiden vorhergehenden Abschnitte kann man nun den mathematischen Begriff einer topologischen Sortierung einfuhren Sei M displaystyle M nbsp eine Menge und R M M displaystyle R subseteq M times M nbsp Eine Menge T M M displaystyle T subseteq M times M nbsp heisst genau dann eine topologische Sortierung von M displaystyle M nbsp fur R displaystyle R nbsp wenn T displaystyle T nbsp eine strenge Totalordnung auf M displaystyle M nbsp ist und R T displaystyle R subseteq T nbsp gilt Diese Definition beschrankt den Begriff einer topologischen Sortierung ausdrucklich nicht auf endliche Mengen obwohl im Zusammenhang mit einer algorithmischen Untersuchung eine solche Beschrankung sinnvoll ist Azyklische Graphen und topologische Sortierungen Bearbeiten Den bereits erwahnten Zusammenhang von topologischen Sortierungen und azyklischen Graphen kann man in folgendem Satz zusammenfassen Sei M displaystyle M nbsp eine Menge und R M M displaystyle R subseteq M times M nbsp Dann sind aquivalent Es gibt eine topologische Sortierung T displaystyle T nbsp von M displaystyle M nbsp fur R displaystyle R nbsp M R displaystyle M R nbsp ist ein azyklischer DigraphDarstellung als gerichteter Graph Bearbeiten Stellt man eine Beziehung als Pfeil zwischen zwei Elementen dar entsteht ein gerichteter Graph Ein solcher gerichteter Graph besitzt eine topologische Sortierung genau dann wenn er azyklisch ist es also keine geschlossene Kantenrundreise gibt nbsp Die Kleidungsstucke kann man topologisch sortieren indem man sie linear anordnet und darauf achtet dass alle Pfeile nur von links nach rechts weisen nbsp So erhalt man eine weitere Charakterisierung einer topologischen Sortierung die auch als Definition verwendet werden kann Zu einem gerichteten Graphen G displaystyle G nbsp mit Knoten und Kantenmenge V A displaystyle V A nbsp ist demnach eine topologische Sortierung eine bijektive Abbildung die F displaystyle Phi nbsp heisse von den Knoten in eine Teilmenge der naturlichen Zahlen mit anderen Worten eine Eins zu eins Identifikation Jeder Knoten bekommt genau eine Zahl Dabei soll gelten dass fur jede Kante a v w A F v lt F w displaystyle a v w in A Rightarrow Phi v lt Phi w nbsp erfullt ist Im Beispiel hatte man die AbbildungF V N Unterhose 1 Socke 2 Schuhe 7 displaystyle Phi colon V to mathbb N begin cases mbox Unterhose amp mapsto 1 mbox Socke amp mapsto 2 dots mbox Schuhe amp mapsto 7 end cases nbsp Solche Abbildungen sind niemals eindeutig Erhoht man den Bildwert knotenweise um eine beliebige Konstante erhalt man eine weitere Sortierung F displaystyle Phi nbsp mit v V F v F v c c N displaystyle forall v in V Phi v Phi v c c in mathbb N nbsp Beschrankt man sich auf Abbildungen in eine elementweise kleinste Teilmenge naturlicher Zahlen hangt die Eindeutigkeit von der Graphenstruktur ab Gerichtete Pfade sind dann eindeutig sortierbar echte gerichtete Baume konnen mehrere Sortierungen haben Sortierbare Graphen Bearbeiten nbsp Graph 1Graph 1 ist topologisch sortierbar Es existieren mehrere Losungen zum Beispiel A B C G D E F Dabei spielt es keine Rolle dass mehrere Elemente ohne Vorganger existieren A und G dass manche Elemente mehrere Nachfolger haben B hat zum Beispiel drei Nachfolger und manche mehrere Vorganger D und E nbsp Graph 2Graph 2 ist ebenfalls topologisch sortierbar zum Beispiel A C B D E obwohl er nicht zusammenhangend ist Alle gerichteten Graphen die keine Zyklen enthalten sind topologisch sortierbar Nicht sortierbare Graphen Bearbeiten nbsp Graph 3 nbsp Graph 4 nbsp Graph 5Graph 3 ist nicht topologisch sortierbar da er einen Zyklus also eine gegenseitige Abhangigkeit enthalt Elemente B C E und D Auch wenn wie in Graph 4 nur zwei Elemente gegenseitig voneinander abhangen ist eine topologische Sortierung unmoglich Allgemein sind genau alle Graphen die einen Kreis enthalten nicht topologisch sortierbar Topologische Sortierbarkeit ist logisch gleichwertig zur Azyklizitat Graph 5 hat auch keine topologische Sortierung nicht aber weil er einen Kreis enthalt sondern weil er gegen die geforderte Irreflexivitat verstosst Knoten A steht mit sich selbst in Relation Graph 5 ist also ein minimaler nicht topologisch sortierbarer Graph Algorithmus BearbeitenEntfernung von Elementen ohne Vorganger Bearbeiten Der Algorithmus geht von einem gerichteten Graphen aus Er entfernt solange Elemente ohne Vorganger aus dem Graphen bis keine Elemente mehr ubrig sind Zunachst werden alle Elemente mit der Vorgangerzahl also der Anzahl von Pfeilspitzen die zum jeweiligen Element fuhren versehen nbsp Elemente mit Vorgangerzahl 0 blau markiert haben keine anderen Vorganger Sie werden aus dem Graph entfernt Hier konnen also die Socken die Unterhose und das Unterhemd mit den zugehorigen Pfeilen entfernt werden Dadurch andern sich auch die Vorgangerzahlen von anderen Elementen nbsp Entfernte Elemente Socken Unterhose UnterhemdJetzt haben der Pullover und die Hose keine Vorganger mehr sie konnen also entfernt werden nbsp Entfernte Elemente Socken Unterhose Unterhemd Hose PulloverNun bleiben nur noch Mantel und Schuhe ubrig die ebenfalls entfernt werden Die Topologische Sortierung ist fertig wenn alle Elemente entfernt werden konnten Topologische Sortierung Socken Unterhose Unterhemd Hose Pullover Mantel SchuheReprasentation im Rechner Bearbeiten Die Objekte Elemente selbst werden normalerweise in die Datenstruktur einer Liste mit Objektattributen Name Index eingetragen Um die Beziehungen darzustellen genugt fur jedes Element jeweils eine zusatzliche Liste mit Verweisen Referenzen oder Zeiger auf die Nachfolger eines Objekts Die Objekte enthalten einen Verweis auf ihre jeweilige Nachfolgerliste Fur den Sortieralgorithmus wird Platz fur weitere Daten benotigt die vom Algorithmus beschrieben und verwendet werden Fur jedes Objekt Platz fur eine Zahl die die Anzahl der Vorganger aufnimmt Optional eine Hilfsliste die Objekte ohne Vorganger aufnimmt Beispiel Fur das Ankleidebeispiel weiter oben sahe die Objektliste z B folgendermassen aus Hose Mantel Pullover Schuhe Socken Unterhemd UnterhoseDie Nachfolgerlisten sahen dann folgendermassen aus 2 4 leere Liste 2 leere Liste 4 3 1Dabei besagt die erste Liste fur die Hose dass Mantel Objekt 2 und Schuhe Objekt 4 erst nach der Hose angezogen werden konnen Die zweite Liste fur den Mantel besagt dass es kein Kleidungsstuck gibt das erst nach dem Mantel angezogen werden kann Die Liste der Vorgangerzahlen hat 7 Elemente eins pro Objekt anfanglich sind alle Eintrage 0 Algorithmus fur das Topologische Sortieren Bearbeiten Einfache Version mit Markierung von Elementen Bearbeiten Der Sortieralgorithmus benotigt die Information wie viele Vorganger ein Element enthalt Vorgangeranzahl Bereits gefundene Elemente mussen aus der Liste entfernt oder markiert werden Man kann Elemente dadurch markieren indem man die Vorgangeranzahl auf 1 setzt 1 Berechne die Vorgangeranzahl Setze die Vorgangeranzahl aller Elemente auf 0 Fur alle Elemente durchlaufe die Nachfolgerliste und erhohe die Vorgangeranzahl jedes dieser Elemente um 1 Jetzt sind alle Vorgangerzahlen berechnet dd Im Beispiel hat z B die Hose Element 1 nur einen Vorganger die Unterhose daher taucht die 1 nur einmal in den Nachfolgerlisten auf Der Mantel Element 2 hat hingegen 2 Vorganger Pullover und Hose weshalb die 2 zweimal in den Nachfolgerlisten auftaucht Insgesamt ergibt sich also fur die Vorgangerliste 1 2 1 2 0 0 0 2 Solange nicht markierte Elemente in der Liste sind Suche ein Element mit Vorgangeranzahl 0 Falls kein solches Element gefunden wird ist eine topologische Sortierung nicht moglich da gegenseitige Abhangigkeiten Zyklen bestehen Der Algorithmus bricht mit einem Fehler ab Gib das gefundene Element aus und entferne es aus der Liste oder markiere es Setze zum Beispiel die Vorgangeranzahl gleich 1 als Markierung Gehe die Liste der Nachfolger des gefundenen Elements durch und verringere die Vorgangeranzahl um 1 Das Element ist jetzt effektiv aus der Elementliste entfernt Durch die Verringerung der Vorgangeranzahl konnen neue Elemente ohne Vorganger entstehen dd Sind alle Elemente ausgegeben bzw markiert so war die topologische Sortierung erfolgreich Im Beispiel ist Element 5 Socken ein solches vorgangerloses Element Daher wird dieses Element ausgegeben und mit 1 markiert wir hatten aber genauso gut mit Element 6 oder 7 anfangen konnen Einziges Nachfolgerobjekt der Socken sind die Schuhe Element 4 daher wird die Vorgangeranzahl von Element 4 verringert Nach diesem Schritt lautet die Vorgangeranzahlliste also 1 2 1 1 1 0 0und die bisherige Ausgabe lautet SockenIm nachsten Schritt stellen wir fest dass auch Element 6 Unterhemd keine Vorganger hat Wiederum gibt es nur ein einziges Nachfolgerelement den Pullover Nummer 3 Somit lautet die Vorgangerzahlliste nach dem zweiten Schritt 1 2 0 1 1 1 0und die Ausgabe bis hierhin lautet Socken UnterhemdDurch die Verringerung um 1 wurde die Vorgangerzahl des Pullovers Element 3 zu 0 Nehmen wir also als Nachstes den Pullover so finden wir in seiner Nachfolgerliste nur Element 2 den Mantel dessen Vorgangerzahl wir somit ebenfalls verringern mussen so dass die Liste nun 1 1 1 1 1 1 0lautet und die bisherige Ausgabe Socken Unterhemd Pullover Jetzt haben wir zum ersten Mal keine Wahl mehr uber das nachste Element Nur die Unterhose hat jetzt die Vorgangerzahl 0 Deren Entfernung fuhrt dann im nachsten Schritt zu einer 0 bei der Hose Element 1 und deren Entfernung fuhrt schliesslich dazu dass sowohl Element 2 Mantel als auch Element 4 Schuhe keine Vorganger mehr haben Wahlen wir nun den Mantel vor den Schuhen so ergibt sich insgesamt die SortierungSocken Unterhemd Pullover Unterhose Hose Mantel Schuhe die unschwer als korrekte topologische Sortierung dieser Elemente erkannt werden kann Erweiterte Version mit einer zusatzlichen Hilfsliste Bearbeiten Um Elemente ohne Vorganger schnell zu finden kann eine zusatzliche Hilfsliste erzeugt werden Diese wird nach der Berechnung der Vorgangerzahlen mit allen anfangs vorgangerlosen Elementen also mit Vorgangerzahl gleich Null gefullt In Phase 2 wird anstatt der Suche eines Elements mit Vorgangeranzahl Null einfach eines aus der Hilfsliste entnommen Wird die Vorgangerzahl eines Elements wahrend der Phase 2 bei der Verringerung um 1 gleich Null so wird es in die Hilfsliste eingefugt Der Algorithmus endet wenn keine Elemente mehr in der Hilfsliste sind Auf die Markierung kann dann ebenfalls verzichtet werden Zeitverhalten Komplexitat Bearbeiten Die Komplexitat des Algorithmus beschreibt das zeitliche Verhalten bei grossen Datenmengen genauer das Verhaltnis der Ausfuhrungsdauern bei Vergrosserung der Eingabedaten Braucht ein Algorithmus also z B fur eine Menge N displaystyle N nbsp mit Datensatze N 2 10000 displaystyle vert N vert 2 10000 nbsp Schritte so ist die Komplexitat O N 2 displaystyle mathcal O vert N vert 2 nbsp da fur hinreichend grosse Datenmengen die 10000 zusatzlichen Schritte nicht mehr ins Gewicht fallen siehe Landau Symbole Average und Worst Case Bearbeiten Beim topologischen Sortieren mit n Elementen und m Beziehungen zwischen diesen gilt fur normale Average Case Probleme O m O n displaystyle mathcal O m mathcal O n nbsp da jedes Element im Schnitt nur eine konstante Zahl von Beziehungen hat Im Extremfall Worst Case konnen in einem gerichteten azyklischen Graphen jedoch m i 1 n i 1 n n 1 2 n n 2 n 2 O n 2 displaystyle m sum i 1 n i 1 frac n cdot n 1 2 n frac n 2 n 2 mathcal O n 2 nbsp Beziehungen auftreten Erste Phase Aufbau der Vorgangerzahlen Bearbeiten Die erste Phase setzt die Vorgangerzahlen auf 0 und benotigt n Schleifendurchlaufe O n displaystyle mathcal O n nbsp Fur das Durchlaufen der m Nachfolger benotigt sie eine Zeit der Grossenordnung O n displaystyle mathcal O n nbsp Average Case oder O n 2 displaystyle mathcal O n 2 nbsp Worst Case Hilfsliste fur vorgangerlose Elemente Bearbeiten Vor der zweiten Phase wird eine Hilfsliste aufgebaut die alle vorgangerlosen Elemente enthalt O n displaystyle mathcal O n nbsp Danach werden nur noch neue vorgangerlose in die Hilfsliste eingefugt O 1 displaystyle mathcal O 1 nbsp und entnommen O 1 displaystyle mathcal O 1 nbsp Die Suche nach vorgangerlosen Elementen beeinflusst das Zeitverhalten nicht Gleiches kann man erreichen indem man gefundene vorgangerlose Elemente nach vorne verlagert mit O 1 displaystyle mathcal O 1 nbsp moglich Zweite Phase Entnahme von vorgangerlosen Elementen Bearbeiten Die zweite Phase behandelt im Erfolgsfall alle n Elemente und verringert die Vorgangerzahl von im Schnitt m n displaystyle frac m n nbsp Nachfolgern das Zeitverhalten ist also O n O m n displaystyle mathcal O n cdot mathcal O left frac m n right nbsp Gesamtverhalten Bearbeiten Beziehungen mund Objekte n Zeitverhalten mit Hilfsliste Average Case O m O n displaystyle mathcal O m mathcal O n nbsp O n displaystyle mathcal O n nbsp Worst Case O m O n 2 displaystyle mathcal O m mathcal O n 2 nbsp O n 2 displaystyle mathcal O n 2 nbsp Ungunstiger Aufbau der Listen Bearbeiten Der Algorithmus in Niklaus Wirths Buch siehe Literatur enthalt eine Einlesephase in der er die Beziehungspaare in eine Liste einfugt die wiederum Listen fur die Nachfolger enthalten Die jeweilige Nachfolgerliste ermittelt er durch eine lineare Suche O n displaystyle mathcal O n nbsp die fur jedes eingelesene Paar O m displaystyle mathcal O m nbsp durchgefuhrt wird insgesamt also O n O m displaystyle mathcal O n cdot mathcal O m nbsp quadratisch Dies verschlechtert das gesamte Zeitverhalten Der Aufbau der Listen konnte zum Beispiel uber einen Bucketsort Algorithmus aber auch in linearer Zeit O m displaystyle mathcal O m nbsp bewerkstelligt werden Programm in der Programmiersprache Perl Bearbeiten In der Programmiersprache Perl konnen Listen besonders einfach mit Hilfe von dynamisch wachsenden Feldern zum Beispiel Elemente implementiert werden Das angegebene Programm liest zunachst Beziehungspaare der Form Vorganger Nachfolger jeweils in einer Zeile und mit Leerzeichen getrennt ein Katze Hund Hahn Katze Hund Esel Als Ausgabe erhalt man Hahn Katze Hund Esel Beim Einlesen der Beziehungspaare dient ein Perl Hash zum Auffinden des numerischen Indexes von bestehenden Elementen Elemente ohne Index werden erzeugt Dazu wird ein neuer Index vergeben der Name gespeichert und eine leere Nachfolgerliste angelegt Diese Liste nimmt dann die Indizes der Nachfolgerelemente fur die jeweiligen Vorganger auf Der Algorithmus verwendet nur noch Indizes und lauft wie oben beschrieben Erst bei der Ausgabe wird der unter dem Index gespeicherte Name wieder verwendet Das Perlskript sieht folgendermassen aus usr bin perl Topologisches Sortierprogramm in Perl Lizenzstatus GNU FDL fur Wikipedia Unterprogramm zum Finden bzw Neuanlegen eines Elements sub finde oder erzeuge element my str my idx hashindex str if defined idx Neues Element idx objektzahl hashindex str idx name idx str nachfolgerliste idx return idx Einlesen Aufbau der Elementliste und der Nachfolgerlisten objektzahl 0 hashindex while lt gt chomp s S s S s die Bitte Vorganger Nachfolger eingeben n vorgaenger nachfolger 1 2 v finde oder erzeuge element vorgaenger n finde oder erzeuge element nachfolger push nachfolgerliste v n Topsort 1 Berechne Vorgangerzahlen for n 0 objektzahl 1 vorgaengerzahl n 0 for v 0 objektzahl 1 for n nachfolgerliste v vorgaengerzahl n Erzeuge die Hilfsliste fur die Elemente mit Vorgangerzahl 0 hilfsliste for n 0 objektzahl 1 push hilfsliste n if vorgaengerzahl n 0 Topsort 2 Gib solange moglich ein Element der Hilfsliste aus Verringere Vorgangerzahl der Nachfolger des Elements Neue Elemente mit Vorgangerzahl 0 in die Hilfsliste ausgabe 0 while defined v pop hilfsliste print name v n ausgabe for n nachfolgerliste v vorgaengerzahl n push hilfsliste n if vorgaengerzahl n 0 die Zyklen gefunden n if ausgabe lt objektzahl Beispiele BearbeitenUnterprogrammaufrufe und Rekursion Bearbeiten In Computerprogrammen konnen Unterprogramme weitere Unterprogramme aufrufen Falls keine gegenseitigen Aufrufe oder Selbstaufrufe auftreten kann eine total geordnete Reihenfolge mit Hilfe der topologischen Sortierung ermittelt werden Andernfalls rufen sich Unterprogramme rekursiv auf Unterprogramme mit Rekursion Unterprogramme ohne RekursionProzedur a Aufruf von b Aufruf von c Prozedur b Aufruf von c Prozedur c Aufruf von b Aufruf von d Prozedur a Aufruf von b Aufruf von c Prozedur b Aufruf von d Prozedur c Aufruf von b Aufruf von d nbsp nbsp Topologisches Sortieren nicht moglich da Prozedur b die Prozedur c aufruft und Prozedur c die Prozedur b Zyklus Topologische Sortierung a c b dHauptkategorien und Unterkategorien Bearbeiten Manche Kategoriensysteme sind hierarchisch angeordnet Die oberste Ebene enthalt die Hauptkategorien die wiederum Unterkategorien enthalten Unterkategorien konnen weitere Unterkategorien enthalten bis zu einer beliebigen Tiefe Normalerweise fugt man eine neue Kategorie in eine bestehende ein wenn die Anzahl der Objekte in einer Kategorie eine bestimmte Grenze uberschreitet Andere bereits bestehende Kategorien werden je nach Angemessenheit in die neue Kategorie verschoben Dabei kann versehentlich eine ubergeordnete Kategorie oder eine Kategorie aus einer anderen Hauptkategorie in die neue Kategorie eingeordnet werden wodurch gegenseitige Abhangigkeiten entstehen und die Hierarchie des Systems zerstort wird Ein Benutzer der durch den vermeintlichen Kategoriebaum navigiert kann sich unter Umstanden ewig im Kreis drehen was durch die geforderte Hierarchie ja verhindert werden soll Durch topologisches Sortieren des Kategorienbaums kann man nachweisen dass keine Zyklen vorhanden sind Alle Hauptkategorien werden dazu zunachst in einen hypothetischen Wurzelbaum eingeordnet Die Beziehung ist die Bedingung dass eine Kategorie direkte Unterkategorie einer anderen Kategorie ist diese Information ist ohnehin vorhanden Schlagt der topologische Sortieralgorithmus fehl sind zyklische Abhangigkeiten vorhanden und das System ist nicht mehr hierarchisch tsort Kommando unter Unix und Linux Bearbeiten Fur Unix ahnliche Betriebssysteme enthalten die GNU Core Utilities ein Programm namens tsort das eine topologische Sortierung durchfuhrt Es war fruher notig um ubersetzte Objektdateien die voneinander abhangen in korrekter Reihenfolge in eine Programmbibliothek einzufugen kann aber auch fur andere Zwecke eingesetzt werden tsort lt lt Ende gt Unterhemd Pullover gt Unterhose Hose gt Pullover Mantel gt Hose Mantel gt Hose Schuhe gt Socken Schuhe gt Ende Socken Unterhemd Unterhose Pullover Hose Schuhe Mantel Eingabe sind die Abhangigkeiten in der Form vor nach Ausgabe ist eine topologische Sortierung der Elemente Siehe auch BearbeitenSchnittregel Gentzenscher Hauptsatz Plankalkul Anwendungsbeispiel fur topologische Sortierung Einfuge Reihenfolge bei Tabellen mit referentieller Integritat ermittelnLiteratur BearbeitenThomas Ottmann Peter Widmayer Algorithmen und Datenstrukturen 4 Auflage Spektrum Verlag Heidelberg 2002 ISBN 3 8274 1029 0 Niklaus Wirth Algorithmen und Datenstrukturen Pascal Version 4 Auflage Teubner Verlag Stuttgart 1995 ISBN 3 519 12250 2 Donald E Knuth The Art of Computer Programming 3 Auflage Band 1 Fundamental Algorithms Addison Wesley 1997 ISBN 0 201 89683 4 Edward Szpilrajn Sur l extension de l ordre partiel In Fundamenta Mathematicae Band 16 1930 ISSN 0016 2736 S 386 389 Daniel J Lasser Topological Ordering of a List of Randomly Numbered Elements of a Network In Communications of the ACM Band 4 1961 ISSN 0001 0782 S 167 168 A B Kahn Topological Sorting of Large Networks In Communications of the ACM 1962 ISSN 0001 0782 S 558 562 Weblinks BearbeitenNiklaus Wirths Implementierung in PascalEinzelnachweise Bearbeiten Edward Szpilrajn Sur l extension de l ordre partiel In Fundamenta Mathematicae 16 Jahrgang 1930 S 386 389 Abgerufen von https de wikipedia org w index php title Topologische Sortierung amp oldid 237730905