Der grundlegende Algorithmus für BFS:
set start vertex to visited
load it into queue
while queue not empty
for each edge incident to vertex
if its not visited
load into queue
mark vertex
Ich würde also denken, die zeitliche Komplexität wäre:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
wo v
ist Vertex 1
zun
Ist das, was ich gesagt habe, richtig? Zweitens, wie ist das O(N + E)
und die Intuition, warum das so schön wäre. Vielen Dank
algorithm
time-complexity
graph-theory
breadth-first-search
gewöhnliche
quelle
quelle
DFS (Analyse):
O(1)
ZeitO(n + m)
rechtzeitig ausgeführt, sofern das Diagramm durch die Adjazenzlistenstruktur dargestellt wirdΣv deg(v) = 2m
BFS (Analyse):
Li
O(n + m)
rechtzeitig ausgeführt, sofern das Diagramm durch die Adjazenzlistenstruktur dargestellt wirdΣv deg(v) = 2m
quelle
Sehr vereinfacht ohne viel Formalität: Jede Kante wird genau zweimal betrachtet und jeder Knoten wird genau einmal verarbeitet, daher muss die Komplexität ein konstantes Vielfaches der Anzahl der Kanten sowie der Anzahl der Eckpunkte sein.
quelle
Zeitkomplexität ist
O(E+V)
stattO(2E+V)
weil, wenn die Zeitkomplexität n ^ 2 + 2n + 7 ist, dann wird sie als O (n ^ 2) geschrieben.Daher wird O (2E + V) als O (E + V) geschrieben.
weil der Unterschied zwischen n ^ 2 und n wichtig ist, aber nicht zwischen n und 2n.
quelle
Ich denke, jede Kante wurde zweimal berücksichtigt und jeder Knoten wurde einmal besucht, daher sollte die Gesamtzeitkomplexität O (2E + V) sein.
quelle
Eine intuitive Erklärung hierfür ist die einfache Analyse einer einzelnen Schleife:
Die Gesamtzeit für eine einzelne Schleife beträgt also O (1) + O (e). Summieren Sie es nun für jeden Scheitelpunkt, da jeder Scheitelpunkt einmal besucht wird. Das gibt
quelle
Kurze aber einfache Erklärung:
quelle