Interaktives Graphentheorie-Lernen
Interaktives Graphentheorie-Lernen
Guest User
Using app without sign in
Finder für Eulerwege und Eulerkreise
Findet Pfad, der jede Kante genau einmal in ungerichteten Graphen besucht
Wählen Sie einen Algorithmus und generieren Sie Schritte, um die Visualisierung zu beginnen
Ein Eulerpfad durchläuft jede Kante eines Graphen genau einmal; ein Eulerkreis tut dies und kehrt zum Start zurück. Leonhard Euler begründete 1736 die Graphentheorie, indem er bewies, dass das Königsberger Brückenproblem keinen solchen Weg zulässt.
Die Existenz ist leicht zu prüfen: Ein zusammenhängender ungerichteter Graph hat genau dann einen Eulerkreis, wenn jeder Knoten geraden Grad hat, und einen Eulerpfad, wenn genau null oder zwei Knoten ungeraden Grad haben. Der Algorithmus von Hierholzer konstruiert den Weg in O(E): unbenutzten Kanten folgen, bis man zum Start zurückkehrt, und dann wiederholt Umweg-Zyklen von Knoten einfügen, die noch unbenutzte Kanten haben.
Eulerpfade lösen Streckeninspektionsprobleme wie Schneeräumung, Straßenreinigung und Postzustellung, rekonstruieren DNA-Sequenzen aus k-meren in der Bioinformatik und erzeugen De-Bruijn-Folgen. Der auf Parität beruhende Existenztest ist eine klassische Interviewfrage, die ihn vom viel schwereren Hamilton-Problem abgrenzt.
Der Existenztest ist reines Zählen und braucht einen Durchlauf. Erst wenn er gelingt, baust du den Weg, und zwar mit Hierholzer statt mit naivem Backtracking.
// Existenz, zusammenhängender ungerichteter Graph:
// 0 Knoten ungeraden Grades -> Eulerkreis
// 2 Knoten ungeraden Grades -> Eulerweg dazwischen
// alles andere -> keines von beiden
Hierholzer(graph, start):
stapel = [start]; weg = []
solange der Stapel nicht leer ist:
u = stapel.oben
wenn u eine unbenutzte anliegende Kante (u,v) hat:
markiere diese Kante als benutzt
stapel.push(v)
sonst:
weg.anhängen(stapel.pop())
kehre weg umHierholzer funktioniert, weil er nie raten muss. Er läuft, bis er stecken bleibt, was in einem Graphen mit lauter geraden Graden nur am Startknoten passieren kann, und fügt dann Umwege von Knoten ein, die noch unbenutzte Kanten haben. Jeder Knoten wird gleich oft betreten wie verlassen, und genau das garantiert der gerade Grad, sodass die Teilstücke stets zu einem einzigen geschlossenen Weg verschmelzen.
Baue einen Eulerkreis auf zwei Dreiecken, die sich einen einzigen Knoten teilen, wobei die Nachbarn alphabetisch genommen werden.
Beispielgraph: Ungerichtete Kanten A-B, B-C, C-A bilden ein Dreieck, und C-D, D-E, E-C bilden ein zweites, verbunden über C.
Der Eulerkreis lautet A nach B nach C nach D nach E nach C nach A und benutzt alle sechs Kanten genau einmal, mit Rückkehr zum Start. Beachte, dass C zweimal im Weg vorkommt, was erlaubt und zu erwarten ist: ein Eulerweg darf Knoten beliebig wiederbesuchen, er darf lediglich keine Kante erneut benutzen. Genau darin liegt der Unterschied zu einem Hamiltonweg, der jeden Knoten einmal besucht und sich um Kanten nicht schert.
Zeit: O(V + E) · Speicher: O(V + E)
Die Gradzählung ist ein Durchlauf über die Kanten mit O(E), und die Zusammenhangsprüfung ist ein Durchlauf mit O(V + E). Hierholzer legt jedes Knotenvorkommen einmal ab und nimmt es einmal auf und markiert jede Kante genau einmal als benutzt, ist also O(E), sofern jeder Knoten einen Zeiger in seine Adjazenzliste behält statt von vorn zu suchen. Ohne diesen Zeiger degradiert die innere Suche auf O(V·E). Der Speicher besteht aus den Benutztmarkierungen sowie Stapel und Weg, die O(E) Einträge halten. Der Gegensatz zu Hamiltonwegen ist bemerkenswert: Eulersch ist linear, Hamiltonsch ist NP-vollständig, und zwar allein deshalb, weil Kanten sich lokal über den Grad zählen lassen, Knoten aber nicht.
Eulersche Probleme sind leicht; die oberflächlich ähnlichen hamiltonschen sind es nicht. Prüfe, welches du tatsächlich vor dir hast.
| Alternative | Vorzuziehen, wenn | Kosten |
|---|---|---|
| Hamiltonweg | Du musst jeden KNOTEN einmal besuchen statt jede Kante. NP-vollständig, es gelten also völlig andere Verfahren. | exponentiell |
| Briefträgerproblem | Es gibt Knoten ungeraden Grades, du willst aber dennoch eine geschlossene Route über alle Kanten mit minimalen Wiederholungen. | O(V^3) |
| Algorithmus von Fleury | Du willst einen Weg ohne Stapel bauen. Begrifflich einfacher, aber langsamer, da er Brücken durch Prüfung meidet. | O(E^2) |
| De-Bruijn-Graphen | Genomassemblierung und Ähnliches, wo Eulerwege in einem De-Bruijn-Graphen eine Sequenz rekonstruieren. | O(V + E) |
Den ganzen Artikel lesen: Eulerian Paths and Circuits
Verwandte Algorithmen: Hamiltonscher Pfad, Tiefensuche