Kürzester Pfad: DFS, BFS-oder beides?
Ich weiß das BFS allein können den kürzesten Weg zu finden in einem ungewichteten graph, aber ich lese auch auf ein paar Seiten, wo Leute behaupten, die entweder BFS oder DFS konnte dies tun. Ich wollte nur bestätigen, dass diese waren wohl Fehler, und dass nur kann das BFS dazu (ich war nicht völlig überzeugt, auch nachdem eine schnelle google-Suche). Wenn ich bin falsch, kann mir bitte jemand erklären, wie es möglich ist, für die DFS geben kürzesten Weg.
- Dies gehört nicht hierher, außerdem ist es ein Duplikat von einem Eintrag auf der Website, es gehört zwar zu den cs.stackexchange.com/questions/4914/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
DFS nicht zwangsläufig kürzesten Wege in einem ungerichteten Graphen. BFS wäre die richtige Wahl hier.
Als Beispiel wird ein graph gebildet, indem die Ecken des Dreiecks verbinden. Wenn Sie versuchen zu finden, den kürzesten Pfad von einem Knoten zu einem anderen mit der DFS, dann werden Sie die falsche Antwort erhalten, es sei denn, Sie befolgen Sie die Kante, die direkt verbindet die start-und Ziel-Knoten.
Hoffe, das hilft!
Iterative deepening search (IDS), die besteht aus vielen Runden depth-limited-search (im Grunde DFS, aber aufhören zu suchen, wenn Sie erreicht haben, eine Tiefe Grenze d), die schrittweise Erhöhung der Tiefe von 1, finden Sie den kürzesten Weg in einem ungewichteten graph.
Es funktioniert, da Sie schrittweise Erhöhung der zulässigen Abstand von der start-Knoten: ein Knoten, der Entfernung, die ein + 1 nicht ausgeschöpft werden, bevor ein Knoten, dessen Abstand ein, aufgrund der Begrenzung auf die Tiefe.
Einem gemeinsamen Anliegen ist der Knoten mit Distanz, die ein re-besucht (d - a + 1) - mal, wobei d die Tiefe der kürzeste Weg zum Ziel. Es hängt von der graph-oder Suchbaum, wenn wir darüber reden wollen Leistung. Auf einem Suchbaum mit großen branching-Faktor, der Knoten erzeugt in der Tiefe d wird der dominierende Begriff, so dass es nicht viel von einem problem mit Neubetrachtung. BFS unbrauchbar für diesen Fall aufgrund der exponentiellen Platzbedarf, aber IDS verwenden nur polynomial-space.
Einer Perspektive zu verstehen: BFS in einem graph ohne Gewicht und die Richtung ist die gleiche wie Dijkstra(Gewicht=1, eine Richtung), so zu verstehen, warum Dijkstra ist richtig helfen könnte. Weitere details werden Hinzugefügt, wenn ich es geschafft haben.
Beiden BFS und DFS geben wird, den kürzesten Weg von A nach B, wenn Sie umgesetzt werden.
Denken wir den ganzen Graphen als einen Baum. Im Grunde, BFS wird führen Sie jede Ebene des Baumes und finden Sie heraus, den Weg durch das Durchlaufen aller Stufen. Im Gegensatz dazu, DFS läuft auf jeder Blatt-Knoten und den Pfad beim durchqueren Knoten entlang dieses Pfades. Beide sind mit Abgas-Pfad zu finden-Suche, so dass beide garantieren den kürzesten Weg zu finden, wieder, wenn Sie implementiert diese algorithmen korrekt.
Die vor-und Nachteile für die Verwendung von BFS und DFS ist der folgende:
BFS, verwendet mehr Speicher, durchqueren alle Knoten
DFS, benötigt weniger Speicher, ist vielleicht etwas schneller, wenn Sie Glück haben, um wählen Sie die Blatt-Knoten Pfad enthält, der Knoten, der Sie interessiert.(Nicht unbedingt müssen durch alle Knoten).