Ein gerichteter Graph gilt als unipathisch, wenn es für zwei beliebige Eckpunkte und im Graph höchstens einen einfachen Weg von nach .
Angenommen, ich habe einen unipathischen Graphen so dass jede Kante ein positives oder negatives Gewicht hat, aber keine negativen Gewichtszyklen enthält.
Daraus möchte ich einen Algorithmus finden, der die kürzesten Wege zu allen Knoten von einem Quellknoten .
Ich bin mir nicht sicher, wie ich dieses Problem angehen würde. Ich versuche zu sehen, wie ich die Tatsache nutzen kann, dass es keine negativen Gewichtszyklen und natürlich höchstens einen einfachen Pfad zwischen einem beliebigen Knoten bis .
algorithms
graphs
gprime
quelle
quelle
Antworten:
Wählen Sie eine Datendarstellung
Schauen Sie sich zunächst die Größe des Ergebnisses an. Sie möchten die Sammlung der kürzesten Pfade von zu jedem anderen Knoten. Sofern die durchschnittliche Länge eines Pfades nicht durch eine Konstante begrenzt ist (was nicht der Fall ist: Jede Liste ist ein Pfad, und wenn Sie die Wurzel für s nehmen, beträgt die Gesamtlänge der Pfade n ( n - 1 ) / 2, wobei n ist In Bezug auf die Länge der Liste müssen Sie in Ihrer Datendarstellung vorsichtig sein: Die Struktur, die die Pfade enthält, muss die gemeinsame Nutzung zwischen den Pfaden verwenden.s s n ( n - 1 ) / 2 n
Ich schlage vor, das Ergebnis in einem Array zu speichern, das durch die von bis | nummerierten Knoten indiziert wird E | - 1 mit s = 0 . Jedes Element im Array speichert der Index des vorherigen Knotens auf dem Pfad zu diesem Knoten (zB verwenden - 1 als Marker für spezielle Knoten , die aus nicht erreichbar sind s ). Der Weg von s nach t ist ( s = R [ … R [ t ] … ] , … , R [ R [ t0 | E|−1 s=0 −1 s s t .(s=R[…R[t]…],…,R[R[t]],R[t],t)
Durchqueren Sie die Grafik
Initialisiere auf alle - 1 .R −1
Führen Sie eine Tiefen- oder Breitendurchquerung des Graphen ausgehend von . Setzen Sie bei jedem Erreichen eines Knotens u R [ u ] auf seinen Vorgänger.s u R[u]
Da es Zyklen gibt, kann ein Knoten mehr als einmal erreicht werden. Wenn bedeutet dies, dass u bereits besucht wurde.R[u]≠−1 u
Beweisen Sie die Richtigkeit
Beweisen Sie die Komplexität
Der Algorithmus kann jeden Knoten mehr als einmal erreichen, so dass es nicht klar ist, dass seine Komplexität . Die geleistete Arbeit ist in der Tat Θ ( | E 0 | ), wobei V 0 die Kanten sind, die von der Quelle aus erreichbar sind. Genauer gesagt, wir erreichen einen Knoten nur in einem Fall mehr als einmal: Wenn der Knoten der erste ist, den wir in einem bestimmten Zyklus erreichen, und in diesem Fall erreichen wir ihn zweimal (einmal über einen einfachen Pfad und einmal nach Abschluss des Zyklus) ).O(|V|) Θ(|E0|) V0
Na dann. Beweisen wir, dass in einem unipathischen Graphen die Anzahl der Elementarzyklen höchstens linear mit der Anzahl der Knoten wächst. (Ein Elementarzyklus enthält keinen kürzeren Zyklus.) In der folgenden Diskussion gehe ich davon aus, dass der Graph keine Eigenkante hat (keine Kante von einem Knoten zu sich selbst; solche Kanten sind für die Pfadkonstruktion ohnehin irrelevant.) ).
Unipathische Graphen können Zyklen aufweisen, jedoch auf sehr eingeschränkte Weise. Es wäre schön, wenn wir jeden Zyklus irgendwie einem bestimmten Knoten zuordnen könnten (oder zumindest einer begrenzten Anzahl von Zyklen pro Knoten). Können sich Zyklen einen Knoten teilen? Leider ja.
Wir müssen also härter arbeiten. Nun, versuchen wir es induktiv zu beweisen. Sei die Anzahl der Knoten in einem Graphen G , # E ( G ) die Anzahl der Kanten und # C ( G ) die Anzahl der Elementarzyklen, die keine Selbstkanten sind. Ich behaupte, wenn G unipathisch und nicht leer ist, dann ist # C ( G ) ≤ # V ( G ) - 1 .#V(G) G #E(G) #C(G) G #C(G)≤#V(G)−1
Für ein Diagramm mit einem oder zwei Knoten ist dies offensichtlich. Angenommen, die Behauptung gilt für alle Graphen, so dass und G sei ein unipathischer Graph mit n Knoten. Wenn G keinen Zyklus hat, ist 0 = # C ( G ) < # V ( G ) , Fall geschlossen. Ansonsten sei ( a 1 , … , a m ) ein Elementarzyklus.#V(G)<n G n G 0=#C(G)<#V(G) (a1,…,am)
Damit ist der Beweis abgeschlossen. Die Durchquerung folgt höchstens Kanten.2|V|−2
quelle