El algoritmo básico para 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
Entonces pensaría que la complejidad del tiempo sería:
v1 + (incident edges) + v2 + (incident edges) + .... + vn + (incident edges)
donde v
es el vértice 1
den
En primer lugar, ¿es correcto lo que he dicho? En segundo lugar, cómo es esto O(N + E)
, y la intuición de por qué sería realmente agradable. Gracias
DFS (análisis):
O(1)
tiempoO(n + m)
tiempo siempre que el gráfico esté representado por la estructura de la lista de adyacenciaΣv deg(v) = 2m
BFS (análisis):
Li
O(n + m)
tiempo siempre que el gráfico esté representado por la estructura de la lista de adyacenciaΣv deg(v) = 2m
fuente
Muy simplificado sin mucha formalidad: cada borde se considera exactamente dos veces, y cada nodo se procesa exactamente una vez, por lo que la complejidad tiene que ser un múltiplo constante del número de bordes y el número de vértices.
fuente
La complejidad del tiempo es en
O(E+V)
lugar deO(2E+V)
porque si la complejidad del tiempo es n ^ 2 + 2n + 7, entonces se escribe como O (n ^ 2).Por lo tanto, O (2E + V) se escribe como O (E + V)
porque la diferencia entre n ^ 2 yn importa pero no entre n y 2n.
fuente
Creo que cada borde se ha considerado dos veces y cada nodo se ha visitado una vez, por lo que la complejidad del tiempo total debería ser O (2E + V).
fuente
Una explicación intuitiva para esto es simplemente analizando un solo bucle:
Entonces, el tiempo total para un solo ciclo es O (1) + O (e). Ahora suméelo para cada vértice ya que cada vértice se visita una vez. Esto da
fuente
Breve pero simple explicación:
fuente