2012-10-19 19 views
6

Meine Frage ist wie folgt: Dijkstra-Algorithmus ist nach verschiedenen Quellen nichts anderes als eine Variante der Uniform Cost Search. Wir wissen, dass der Dijkstra-Algorithmus den kürzesten Pfad zwischen einer Quelle und allen Zielen (Single-Source) findet. Wir können Dijkstra jedoch immer modifizieren, um den kürzesten Pfad zwischen einem START- und einem GOAL-Zustand zu finden (wenn das Ziel aus der Prioritätswarteschlange abgerufen wird, halten wir einfach an); Aber im schlimmsten Fall wird immer noch der kürzeste Pfad von START zu allen anderen Knoten gefunden (angenommen, das Ziel ist der am weitesten entfernte Knoten im Graphen).Dijkstra-Algorithmus Vs Uniform Cost Search (Zeitkomplexität)

Wenn wir den Dijkstra-Algorithmus mit einem Min-priority-Heap implementieren, ist die Laufzeit O (V log V + E), wobei E die Anzahl der Kanten und V die Anzahl der Ecken ist.

Da Uniform Cost Search dasselbe ist wie Dijkstra (etwas andere Implementierung), dann sollte die Laufzeit von UCS Dijkstra ähnlich sein, nicht wahr? Gemäß meiner AI-Klasse ist die Suche nach einheitlicher Kosten jedoch im schlechtesten Fall exponentiell und es dauert O (b 1 + [C */& epsi;]), wobei C * die Kosten der optimalen Lösung sind. (b ist der Verzweigungsfaktor)

Wie können beide Algorithmen bei unterschiedlichen Laufzeiten gleich sein? Ist die Laufzeit gleich, aber die Art, wie wir sie betrachten, ist anders?

würde ich Ihre Hilfe :) schätzen :) Danke

Antwort

3

Ist die Laufzeit gleich, aber die Art, wie wir es betrachten ist anders?

Ja. Die einheitliche Kostensuche kann für unendlich große Graphen verwendet werden, auf denen Dijkstras ursprünglicher Algorithmus niemals enden würde. In solchen Situationen ist es nicht sinnvoll, die Komplexität in Bezug auf und E zu definieren, da beide unendlich sein können und die resultierende große O-Zahl bedeutungslos ist.

+1

Bleiben wir bei endlichen Graphen (vielleicht sehr groß, aber immer noch finate). Wie kann ich dann beweisen, dass beide Algorithmen die gleiche Laufzeit haben? – John

+1

@John: indem Sie den Pseudocode beider Algorithmen umschreiben, bis Sie den anderen finden. Das kann schwierig sein, weil Dijkstra normalerweise für endliche Graphen dargestellt wird, die vollständig im Speicher gespeichert sind, aber UCS für potentiell unendliche Graphen, die als Kantenerzeugungsfunktionen dargestellt werden. –

+1

Ich stimme dem zu, was Sie gesagt haben, aber in meinem Fall, hier, was ich beweisen möchte: Angesichts einer Karte von Städten (ein Graph) möchte ich beweisen, dass beide Algorithmen die gleiche Zeit Komplexität haben, um die optimale Lösung zu finden – John