pseudocodigo profundidad first busqueda bfs algorithm graph time-complexity breadth-first-search

algorithm - profundidad - dfs pseudocode



Breadth First Análisis de complejidad del tiempo de búsqueda (4)

Al realizar una operación O(1) L veces, resulta en O(L) complejidad. Por lo tanto, eliminar y agregar un vértice de / a la cola es O (1), pero cuando haces eso para V vértices, obtienes O(V) complejidad. Por lo tanto, O(V) + O(E) = O(V+E)

La complejidad del tiempo para revisar cada borde adyacente de un vértice es, por ejemplo, O(N) , donde N es el número de bordes adyacentes. Entonces, para el número V de vértices, la complejidad del tiempo se convierte en O(V*N) = O(E) , donde E es el número total de aristas en el gráfico. Como eliminar y agregar un vértice de / a cola es O(1) , por qué se agrega a la complejidad general de tiempo de BFS como O(V+E) .


Considerando el siguiente Gráfico, vemos cómo la complejidad del tiempo es O (| V | + | E |) pero no O (V * E).

Lista de adyacencia

V E v0:{v1,v2} v1:{v3} v2:{v3} v3:{}

Cómo funciona BFS Works Step by Step

Paso 1:

Listas de adyacencia:

V E v0: {v1,v2} mark, enqueue v0 v1: {v3} v2: {v3} v3: {}

Paso 2:

Listas de adyacencia:

V E v0: {v1,v2} dequeue v0;mark, enqueue v1,v2 v1: {v3} v2: {v3} v3: {}

Paso 3:

Listas de adyacencia:

V E v0: {v1,v2} v1: {v3} dequeue v1; mark,enqueue v3 v2: {v3} v3: {}

Etapa 4:

Listas de adyacencia:

V E v0: {v1,v2} v1: {v3} v2: {v3} dequeue v2, check its adjacency list (v3 already marked) v3: {}

Paso 5:

Listas de adyacencia:

V E v0: {v1,v2} v1: {v3} v2: {v3} v3: {} dequeue v3; check its adjacency list

Paso 6:

Listas de adyacencia:

V E v0: {v1,v2} |E0|=2 v1: {v3} |E1|=1 v2: {v3} |E2|=1 v3: {} |E3|=0

Número total de pasos:

|V| + |E0| + |E1| + |E2| +|E3| == |V|+|E| 4 + 2 + 1 + 1 + 0 == 4 + 4 8 == 8

Suponga una representación de lista de adyacencia, V es el número de vértices, E es el número de bordes.

Cada vértice se pone en cola y se quita de la cola a lo sumo una vez.

El escaneo de todos los vértices adyacentes toma el tiempo O (| E |) , ya que la suma de las longitudes de las listas de adyacencia es | E | .

Por lo tanto, la complejidad temporal de BFS da una complejidad de tiempo O (| V | + | E |) .


Espero que esto sea útil para cualquiera que tenga problemas para comprender la complejidad de tiempo computacional para Breadth First Search, también conocido como BFS.

Queue graphTraversal.add(firstVertex); // This while loop will run V times, where V is total number of vertices in graph. while(graphTraversal.isEmpty == false) currentVertex = graphTraversal.getVertex(); // This while loop will run Eaj times, where Eaj is number of adjacent edges to current vertex. while(currentVertex.hasAdjacentVertices) graphTraversal.add(adjacentVertex); graphTraversal.remove(currentVertex);

La complejidad del tiempo es la siguiente:

V * (O(1) + Eaj + O(1)) V + V * Eaj + V 2V + E(total number of edges in graph) V + E

Intenté simplificar el cálculo del código y la complejidad, pero aun así, si tiene alguna pregunta, hágamelo saber.


I understood the part V+E in the complexity. But I have 2 questions 1). V * Eaj should give 2E? (as it is the total no of edges accessed, and each edge is checked twice, by each of it ends) 2) Also the complexity is V + E but in worst case we take E = V*(V-1)/2 So V isn''t required here as we could say we E = V²... Can''t we say complexity O(E) only?