A * Graph Suchzeitkomplexität


9

Einige Verwirrung über Zeitkomplexität und A *.

Laut A * Wiki ist die zeitliche Komplexität in der Tiefe der Lösung exponentiell (kürzester Weg):

Die zeitliche Komplexität von A * hängt von der Heuristik ab. Im schlimmsten Fall eines unbegrenzten Suchraums ist die Anzahl der erweiterten Knoten in der Tiefe der Lösung exponentiell (der kürzeste Weg). D:O(bd), wo b ist der Verzweigungsfaktor (die durchschnittliche Anzahl der Nachfolger pro Staat).

Der Kommentar zu dieser akzeptierten Antwort weist darauf hin, dass es sinnvoller ist, die Komplexität der Begriffe in Bezug auf die Größe des Diagramms anzugeben, und dies sollte daher der Fall seinO((|V|+|E|)log|V|)

Wenn die Heuristik jedem Knoten den Wert 0 zuweist, wird A * offensichtlich zum Dijkstra-Algorithmus, und jede einheitliche Kostenheuristik deaktiviert die Heuristik im Wesentlichen.

Wenn wir die Heuristik annehmen O(1) (und konsistent) wäre es sinnvoll, dass der schlimmste Fall darin besteht, A * im Wesentlichen zu Dijkstras Algorithmus zu verschlechtern, der komplex ist

O(|E|+|V|log|V|)

mit einer Warteschlangenimplementierung mit minimaler Priorität (Fibonacci-Heap).

Liege ich falsch?

Jedes Buch usw., das ich mir angesehen habe, gibt immer die Komplexität in Bezug auf die Tiefe der Lösung wieder

Antworten:


11

Dies sind im Grunde zwei verschiedene Perspektiven oder zwei verschiedene Arten, die Laufzeit anzuzeigen. Beide sind gültig (keiner ist falsch), aberO(bd) ist wohl nützlicher in den Einstellungen, die normalerweise in AI auftreten.

In der Community der Algorithmen und der CS-Theorie zählen die Leute dort gerne die Laufzeit als Funktion der Anzahl der Eckpunkte und Kanten im Diagramm. Warum? In diesem Zusammenhang ist die Worst-Case-Laufzeit am sinnvollsten. Bei den Problemen, die normalerweise in dieser Community berücksichtigt werden, müssen wir im schlimmsten Fall das gesamte Diagramm untersuchen, sodass Sie normalerweise nicht hoffen können, es besser zu machen alsO(|V|+|E|).

In der KI-Community neigen die Leute dazu, die Laufzeit unterschiedlich zu zählen. Sie betrachten oft eine bestimmte Art von Grafik: einen Baum mit Verzweigungsfaktorb. In den dort auftretenden Situationen ist der Graph oft unendlich oder sehr groß. Normalerweise bemühen wir uns, die Untersuchung des gesamten Diagramms zu vermeiden - dies ist häufig eines der Hauptziele der Algorithmen. Somit wird die Komplexität in Bezug auf gezählt|V.| und |E.| macht keinen Sinn: |V.| kann unendlich sein, und auf jeden Fall planen wir nicht, den gesamten Graphen zu untersuchen. Alles, was zählt, ist die Anzahl der Eckpunkte, die wir tatsächlich besuchen, nicht die Anzahl, die an anderer Stelle existieren kann, die uns aber egal ist.

Für die Situationen, die häufig in der KI-Community auftreten, ist es oft sinnvoller, die Laufzeit anhand des Verzweigungsfaktors des Baums zu messen (b) und die Tiefe des Zielknotens (d). Sobald wir den Zielknoten gefunden haben, stoppt der Algorithmus normalerweise. Wenn wir in einem solchen Baum jeden Scheitelpunkt in der Tiefe untersuchend Bevor wir den Zielknoten finden, werden wir ihn besuchen Ö(bd)Eckpunkte, bevor wir aufhören. Wenn Sie möchten, können Sie sich dies als Besuch einer Teilmenge des Diagramms mit vorstellen|V.|=Ö(bd) (wo jetzt V. enthält nur die Eckpunkte, die wir besuchen) und |E.|=Ö(bd) (E. enthält nur die Kanten, die wir betrachten), und Sie könnten sich eine vorstellen Ö(bd)-Zeitalgorithmus als einer, dessen Laufzeit ist Ö(|V.|+|E.|)... obwohl dies ein bisschen ein Missbrauch der |V.|,|E.|Notation. Wie auch immer, hoffentlich können Sie sehen warumÖ(bd) ist informativer als Ö(|V.|+|E.|) in diesem Zusammenhang.


1

In der kombinatorischen Suchgemeinschaft ist es üblich, Suchräume implizit zu definieren, dh als eine Reihe von Zuständen und Übergängen zwischen ihnen - im Gegensatz zu explizit , dh als konkrete Mengen von Eckpunkten und Kanten. In impliziten Suchräumen können Zustände als Eckpunkte und Übergänge als Kanten dargestellt werden. In vielen Fällen kann die praktische Menge von Zuständen jedoch keine endlichen Grenzen haben, und daher kann die Anzahl der Kanten und Eckpunkte nicht immer mit endlichen Kardinalitäten definiert werden (entweder praktisch oder) theoretisch). Daher ist es für viele Anwendungen sinnvoller, die Leistung anhand des Verzweigungsfaktors zu definierenbim Gegensatz zu Scheitelpunkt- und Kantenkardinalitäten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.