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
Je pense donc que la complexité du temps serait:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
où v
est le sommet 1
àn
Premièrement, ce que j'ai dit est-il correct? Deuxièmement, comment est-ce O(N + E)
, et l'intuition de savoir pourquoi ce serait vraiment bien. Merci
DFS (analyse):
O(1)
tempsO(n + m)
temps à condition que le graphique soit représenté par la structure de liste de contiguïtéΣv deg(v) = 2m
BFS (analyse):
Li
O(n + m)
temps à condition que le graphique soit représenté par la structure de liste de contiguïtéΣv deg(v) = 2m
la source
Très simplifié sans trop de formalité: chaque arête est considérée exactement deux fois, et chaque nœud est traité exactement une fois, donc la complexité doit être un multiple constant du nombre d'arêtes ainsi que du nombre de sommets.
la source
La complexité temporelle est
O(E+V)
au lieu deO(2E+V)
parce que si la complexité temporelle est n ^ 2 + 2n + 7 alors elle s'écrit O (n ^ 2).Par conséquent, O (2E + V) s'écrit O (E + V)
parce que la différence entre n ^ 2 et n importe mais pas entre n et 2n.
la source
Je pense que chaque arête a été considérée deux fois et chaque nœud a été visité une fois, donc la complexité temporelle totale devrait être O (2E + V).
la source
Une explication intuitive à cela consiste simplement à analyser une seule boucle:
Ainsi, le temps total pour une seule boucle est O (1) + O (e). Maintenant, additionnez-le pour chaque sommet car chaque sommet est visité une fois. Cela donne
la source
Explication courte mais simple:
la source