Pourquoi est l'heure complexité de DFS et BFS O( V + E )
L'algorithme de base pour 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
Donc, je pense que la complexité du temps serait:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
où v
est le sommet 1
à n
Premièrement, est-ce que j'ai dit-il correct? Deuxièmement, comment est-ce O(N + E)
, et de l'intuition pourquoi serait vraiment sympa. Grâce
Vous devez vous connecter pour publier un commentaire.
Votre somme
peut être réécrit comme
et le premier groupe est
O(N)
tandis que l'autre estO(E)
.DFS(analyse):
O(1)
tempsO(n + m)
temps fourni le graphe est représenté par la structure de liste d'adjacenceΣv deg(v) = 2m
BFS(analyse):
Li
O(n + m)
temps fourni le graphe est représenté par la structure de liste d'adjacenceΣv deg(v) = 2m
Très simplifiée, sans trop de formalités: chaque arête est considéré exactement deux fois, et chaque noeud est traité exactement une fois, de sorte que la complexité doit être une constante multiple du nombre de bords ainsi que le nombre de sommets.
Complexité temporelle est
O(E+V)
au lieu deO(2E+V)
parce que si la complexité du temps est n^2+2n+7, il est écrit que O(n^2).Donc O(2E+V) s'écrit O(E+V)
parce que la différence entre les n^2 et n sujets, mais pas entre n et 2n.
Je pense que chaque arête a été examiné à deux reprises et chaque noeud a été visité fois, de sorte que la durée totale de la complexité doit être O(2E+V).
Court mais simple explication:
Une explication intuitive de ce qui est simplement l'analyse d'une seule boucle:
Donc le temps total pour une seule boucle est O(1)+O(e). Maintenant, en somme, pour chaque vertex que chaque sommet est visité une fois. Cela donne
CSS:
HTML:
[ O(1) + O(e)]