graph-algorithm

___ qstnhdr ___ Eppsteins Algorithmus und Yens Algorithmus für k kürzeste Wege ___ qstntxt ___

Ich versuche genau zu verstehen, wie diese Algorithmen funktionieren, aber ich konnte keine einfache Erklärung finden. Ich würde es sehr schätzen, wenn mir jemand eine Beschreibung dieser Algorithmen liefern oder auf sie hinweisen könnte, die leichter zu verstehen ist als die Beschreibung in den Originalpapieren. Danke.

    
___ tag123grafalgorithm ___ Graphalgorithmen sind eine Abfolge gut definierter Schritte, die ein Problem im Zusammenhang mit der Graphentheorie lösen, wobei ein Graph in diesem Kontext eine Sammlung von Knoten ("Knoten") und Kanten ist, die diese Knoten verbinden. ___ tag123shortestpath ___ Kürzeste Pfadprobleme sind Probleme beim Suchen des kürzesten Pfads von einer einzelnen Quelle zu einer Zielquelle, normalerweise in einem Diagramm. ___ answer14035001 ___

Zunächst möchte ich Ihnen die Links zu den Papieren geben, über die Sie gesprochen haben.

Eppsteins Beitrag: D. Eppstein, "Finden der k kürzesten Wege", SIAM J. Comput., Vol. 28, nein. 2, pp.652-673, Feb. 1999

Yens Papier: J. Y. Yen, "Finden der K Kürzesten Loopless-Pfade in einem Netzwerk", Management Wissenschaft, vol. 17, nein. 11, S. 712-716, 1971.

Hier ist meine Erklärung für Yens Algorithmus:

Der Yen-Algorithmus verwendet zwei Listen, d. h. Liste A (permanente kürzeste Wege von Quelle zu Ziel - chronologisch geordnet) und Liste B (vorläufige / in Frage kommende kürzeste Wege). Zuerst müssen Sie den kürzesten Weg von der Quelle zum Ziel finden, indem Sie einen geeigneten Algorithmus für den kürzesten Weg verwenden (z.B. Dijkstra). Dann nutzt Yen die Idee, dass die k-ten kürzesten Pfade Kanten und Unterpfade (Pfad von der Quelle zu irgendwelchen Zwischenknoten innerhalb der Route) von (k-1) -ten kürzesten Pfad teilen können. Dann müssen Sie den (k-1) -ten kürzesten Weg nehmen und jeden Knoten in der Route der Reihe nach unerreichbar machen, d. H. Eine bestimmte Kante abfärben, die zu dem Knoten innerhalb der Route führt. Sobald der Knoten nicht erreichbar ist, suchen Sie den kürzesten Pfad vom vorhergehenden Knoten zum Ziel. Dann haben Sie eine neue Route, die durch Anhängen des gemeinsamen Subpfades (von der Quelle zum vorhergehenden Knoten des nicht erreichbaren Knotens) erstellt wird und den neuen kürzesten Pfad vom vorhergehenden Knoten zum Ziel hinzufügt. Diese Route wird dann zu der Liste B hinzugefügt, vorausgesetzt, dass sie nicht zuvor in der Liste A oder in der Liste B erschienen ist. Nachdem Sie dies für alle Knoten in der Route wiederholt haben, müssen Sie die kürzeste Route in Liste B finden und diese in die Liste A verschieben. Sie müssen diesen Vorgang nur für die Anzahl der Ks wiederholen, die Sie haben.

Dieser Algorithmus hat eine rechnerische Komplexität von O (kn ^ 3). Bitte lesen Sie das Papier für weitere Details.

Der Algorithmus ist wie folgt:

%Vor%

Leider habe ich Eppsteins nicht benutzt, da Yens Algorithmus für mein Problem optimal war.

Hoffe, das hilft. Prost.

=====

Bearbeiten:

Schauen Sie sich auch den Wikipedia-Eintrag an. Es hat ein schönes Beispiel.

=====

Bearbeiten:

Ich habe einige Implementierungen in C gefunden. Die Links sind wie folgt:

Eppstein-Implementierung und Lade Grafik für Eppstein .

Wenn Sie interessiert sind, gibt es eine faule Version von Eppstein. Der Link lautet wie folgt:

Lazy Eppstein von Jiménez und Marzal

=====

Bearbeiten:

Nur ein weiterer Link . Dieser enthält mehrere Implementierungen (C / C ++).

=====

Bearbeiten:

Ich habe eine gute Erklärung von Eppsteins Algorithmus gefunden.

    
___ tag123algorithm ___ Ein Algorithmus ist eine Folge wohldefinierter Schritte, die eine abstrakte Lösung für ein Problem definieren. Verwenden Sie dieses Tag, wenn sich Ihr Problem auf den Algorithmusentwurf bezieht. ___
2
Antworten

Was ist der Unterschied zwischen dem minimalen Spanning-Tree-Algorithmus für ungerichtete vs gerichtete Graphen?

Ist der ungerichtete Graph MST-Algorithmus (Prim oder Kruskal) eine allgemeine Form des gerichteten MST-Algorithmus (Edmond / Chiu)? Warum ist es so schwierig, den MST-Quellcode für den gerichteten Fall zu finden? Können wir die ungerichtete Lös...
16.01.2015, 21:25
1
Antwort

AStar - Erklärung des Namens

Ich suche nach einer Erklärung, warum der AStar / A * -Algorithmus AStar heißt. Alle ähnlichen Algorithmen (Kürzestpfadproblem) werden oft wie ihre Entwickler benannt. Wofür steht AStar also?     
06.04.2015, 11:21
1
Antwort

Topologische Art von zyklischen Graphen mit einer minimalen Anzahl von verletzten Kanten

Ich suche nach einer Möglichkeit, eine topologische Sortierung an einem bestimmten gerichteten ungewichteten Graphen durchzuführen, der Zyklen enthält. Das Ergebnis sollte nicht nur die Ordnung der Knoten enthalten, sondern auch die Menge der Ka...
17.06.2013, 13:01
2
Antworten

Den günstigsten Pfad in einem Graphen finden, die Kosten werden durch das maximale Gewicht der verwendeten Knoten bestimmt

Ich habe einen Graphen G mit einem Startknoten S und einem Endknoten E. Das Besondere an diesem Graphen ist, dass anstelle von Kanten Kosten anfallen, hier sind es die Knoten, die Kosten haben. Ich möchte den Weg (eine Menge von Knoten, W) zwisc...
04.02.2015, 10:21
1
Antwort

Warum berücksichtigt der gewichtete Quick Union-Algorithmus die Größe des Baums statt ihrer Höhe?

Ich habe Robert Sedgewicks Video über Verbesserungen der schnellen Union angeschaut. ( Ссылка ) Dort verwendet er die Größe des Baumes und nicht die Höhe. Das Problem besteht eigentlich darin, den Wurzelknoten zu finden. Das Finden wird schwi...
20.06.2015, 18:46
2
Antworten

Algorithmus zum Entfernen der wenigsten Kanten, um die Längenzunahme des kürzesten Pfades in einem ungewichteten ungerichteten Graphen zu erzwingen

Gibt es eine Adjazenzmatrix für einen ungewichteten ungerichteten Graphen, gibt es einen effizienten Weg (Polynomialalgorithmus), um die Länge des kürzesten Weges zwischen irgendwelchen gegebenen zwei Knoten s und t zu erweitern / zu erhöhen?...
24.01.2013, 07:44
1
Antwort

Minimaler spannender Baumalgorithmus parallel

Ich kenne einige Spanning-Tree-Algorithmen: Boruvka, Prim und Kruskal. Welche von ihnen kann parallel implementiert werden? Danke!     
06.11.2012, 18:17
1
Antwort

OpenGL ES 2.0 Vertex-Transformationsalgorithmen

Ich entwickle eine Bildverzerrungs-iOS-App mit OpenGL ES 2.0. Ich habe ein gutes Gespür für den Aufbau, die Pipeline usw. und gehe jetzt zur Mathematik über. Da meine Erfahrung mit Image Warping gleich Null ist, strebe ich nach einigen Alg...
19.03.2012, 20:24
4
Antworten

Algorithmus, um einen zufälligen Hamilton-Pfad in einem Gitter zu finden?

Ich suche nach einem effizienten Algorithmus, der in der Lage ist, einen möglichst zufälligen Hamilton-Pfad bidirektional zu finden N * M Gitter. Weiß jemand, wo ich finden kann oder wie man einen solchen Algorithmus konstruiert? Ich ha...
10.09.2011, 10:57
2
Antworten

Was nutzt es, 3 Zustände für einen Vertex in DFS zu verwenden?

Bei der Erklärung der Tiefensuche (DFS) in Algorithmen in a Nutshell (2. Ausgabe) verwendete der Autor drei Zustände für einen Vertex, sagen wir weiß ( nicht besucht), grau (hat nicht besuchte Nachbarn), schwarz (besucht). Zwei...
13.08.2016, 16:41