Remove ads
Begriff aus der Graphentheorie in der Mathematik Aus Wikipedia, der freien Enzyklopädie
Ein kürzester Pfad ist in der Graphentheorie ein Pfad zwischen zwei unterschiedlichen Knoten eines Graphen, welcher minimale Länge bezüglich einer Kantengewichtsfunktion hat. Haben die Kanten im Graphen alle das Gewicht 1, ist also für alle Kanten , so ist der kürzeste Pfad ein –-Pfad mit der geringstmöglichen Anzahl von Kanten zwischen und .
Die Aufgabe für einen gegebenen Graph einen kürzesten Pfad zu berechnen, ist ein Optimierungsproblem und wird in der Literatur oft als Shortest Path Problem bezeichnet[1].
Die Komplexität hängt maßgeblich von der Art der Gewichtsfunktion ab und davon, ob Pfade oder Kantenzüge betrachtet werden. In Kantenzüge können sich Knoten und Kanten wiederholen, während Pfade keinen Knoten doppelt verwenden. Man unterscheidet drei Arten von Gewichtsfunktionen:
Die genaue Problemformulierung ist entscheidend um die Komplexitätsfrage beantworten zu können.
Die Literatur beschränkt sich meistens auf nichtnegative Gewichte oder konservative Gewichtsfunktion. Mit einer dieser Zusatzforderungen ist jeder kürzeste Pfad automatisch ein kürzester Kantenzug und deswegen wird in der Literatur diese Unterscheidung oft nicht gemacht.
Im Gegensatz zum Problem des kürzesten Pfades, ist das Problem des längsten Pfades sogar für ungewichtete Graphen NP-schwer.
Abgesehen von der Bestimmung eines kürzesten –-Pfades gibt es noch einige weitere, jedoch sehr ähnliche Probleme:
Diese Variante befasst sich mit dem Problem, wie man die kürzesten Wege zwischen einem gegebenen Startknoten und allen übrigen Knoten eines Graphen berechnet. Für nichtnegative Gewichtsfunktionen lassen sich der Dijkstra-Algorithmus bzw. der A*-Algorithmus anpassen, um die kürzesten Wege zu allen Knoten des Graphs zu berechnen. Für beliebige konservative Gewichtsfunktionen berechnet der Bellman-Ford-Algorithmus andererseits stets auch die kürzesten Pfade zu allen anderen Knoten.
Ziel ist hier die Bestimmung eines kürzesten Pfades zwischen einem Endknoten und allen anderen Knoten des Graphen. Dieses Problem kann durch eine Umkehrung der Kantenrichtungen als SSSP beschrieben werden.
In dieser Variante geht es um die Bestimmung der kürzesten Pfade zwischen allen Knotenpaaren eines Graphen. Abhängig von der Gewichtsfunktion ist es effizienter, für jeden Knoten nacheinander das SSSP lösen oder jedoch spezialisierte Verfahren wie etwa den Floyd-Warshall-Algorithmus oder den Min-Plus-Matrixmultiplikations-Algorithmus zu verwenden, die gleichzeitig für alle Paare kürzeste Pfade bestimmen.
Im abgebildeten gegebenen Graphen ist ein kürzester Pfad zwischen den Knoten und der Pfad, welcher in startet, und über nach geht. Die Pfadkosten betragen hierbei . Will man jedoch einen Pfad von nach finden, so ist der direkte Weg mit Kosten von nicht der kürzestmögliche Pfad, da der Weg von über nach nur Kosten von hat.
Zur Bestimmung eines kürzesten Pfades lässt sich außerdem ein lineares Programm heranziehen. Man interpretiert in diesem Fall den Pfad als Fluss mit einem Flusswert von 1 auf den Kanten des Graphen. Die Bestimmung des kürzesten Pfades ist dann ein Spezialfall des Min-cost-flow-Problems. Die entsprechende Formulierung lautet:
Falls ein –-Pfad im gegebenen Graphen existiert, so hat das Programm eine zulässige Lösung. Das Programm ist allerdings unbeschränkt, wenn die Gewichtsfunktion nicht konservativ ist. In diesem Fall kann der Fluss nämlich entlang eines Zykels mit negativen Kosten beliebig weit erhöht werden. Andernfalls hat das Problem eine Optimallösung , welche einem -Vektor mit Einträgen entspricht. Die Menge beschreibt dann einen kürzesten –-Pfad, der Zielfunktionswert des Programms entspricht der Länge des Pfades.
Es stellt sich heraus, dass die Dualisierung des obigen linearen Programms eine anschauliche Interpretation hat. Das duale Programm ist gegeben durch
Eine Lösung des dualen Programms nennt man ein Knotenpotential. Man sieht leicht, dass für jede Lösung der Vektor ebenfalls eine Lösung ist, wobei man beliebig wählen kann. Man setzt in der Regel den Wert von so, dass . Die Zielfunktion ist dann gegeben durch .
Ist ein beliebiger Pfad zwischen und einem Knoten , so lässt sich die Länge des Pfades wie folgt abschätzen:
Das Potential eines jeden Knotens ist also eine untere Schranke für die Länge eines Pfades. Eine Optimallösung des dualen Programms findet man, wenn man das Potential eines Knotens als die Länge des kürzesten –-Pfades bezüglich der Zielfunktion setzt.
Algorithmen, die einen kürzesten Pfad berechnen, finden häufig Anwendung in der Berechnung von Reiserouten. So kann zum Beispiel die Entfernung zwischen zwei Städten berechnet werden. Dabei sind die Städte die Knoten des Graphen und die Straßen die Kanten. Verschiedene Algorithmen sind in der freien Python-Bibliothek NetworkX implementiert.[2]
Eine Verallgemeinerung des Problems erhält man, wenn man nur –-Pfade betrachtet, die der zusätzlichen Ungleichung gehorchen. Dabei ist eine weitere Gewichtsfunktion und eine reelle Zahl.
Das resultierende Constrained Shortest Path Problem ist dann auch für konservative bzw. nichtnegative Zielfunktionen NP-schwer, siehe H. C. Joksch (1966).[3]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.