Mi maestro me dio un pseudocódigo de Dijkstra el algoritmo binario montón incluyendo los siguientes pasos (x sólo fue extraído de la pila):
Para cada vértice y que es un nodo en un montón y hay una arista (x,y) en un gráfico:
1) Dist[y] = min(Dist[y], Dist[x] + w(x,y))
2) Actualización de la información y del nodo en el montón
También se dice que la complejidad de estos pasos para que todo algoritmo es O(ElogV).
Pero yo no entienda por qué el paso ", que es un nodo en un montón de" no influye en la complejidad de la mala manera. Porque eso significa que tenemos que encontrar todos los vecinos de x en el montón, pero no hay formas eficientes de búsqueda de nodos en la pila (sólo lineal de la búsqueda viene a mi mente), y esto significa que para cada y debemos:
1) Buscar en el montón - que toma O(número de nodos en la pila) relojes
2) Actualización de la información - que toma O(logV) tiempo
De esta manera, se llevará a S V*E*logV+(V-1)*E*logV+...) = O($V^2$*E*logV), ya que el número de nodos en la pila disminuye en cada paso por 1. Estoy perdiendo algo?