Comprender el cálculo de la complejidad del tiempo para el Algoritmo Dijkstra


Según mi entendimiento, he calculado la complejidad temporal del Algoritmo Dijkstra como notación big-O usando la lista de adyacencia que se muestra a continuación. No salió como se suponía que debía y eso me llevó a entenderlo paso a paso.

  1. Cada vértice puede ser conectado a (V-1) vértices, por lo tanto el número de aristas adyacentes a cada vértice es V - 1. Digamos que E representa V-1 aristas conectadas a cada vértice.
  2. Encontrar y Actualizar el peso de cada vértice adyacente en el montón mínimo es O (log (V)) + O (1) o O(log(V)).
  3. Por lo tanto, desde el paso 1 y el paso 2 anteriores, la complejidad de tiempo para actualizar todos los vértices adyacentes de un vértice es E*(logV). o E*logV.
  4. Por lo tanto, la complejidad de tiempo para todos los vértices V es V * (E*logV) es decir, O(VElogV).

Pero la complejidad de tiempo para el algoritmo Dijkstra es O(ElogV). ¿Por qué?

Author: rd22, 2014-10-24

1 answers

El algoritmo de ruta más corta de Dijkstra es O(ElogV) donde:

  • V es el número de vértices
  • E es el número total de aristas

Su análisis es correcto, ¡pero sus símbolos tienen diferentes significados! Usted dice que el algoritmo es O(VElogV) donde:

  • V es el número de vértices
  • E es el número máximo de aristas unidas a un solo nodo.

Cambiemos el nombre de su E a N. Así que un análisis dice O(ElogV) y otro dice: O(VNlogV). Ambos son correctos y de hecho E = O(VN). La diferencia es que ElogV es una estimación más ajustada.

 51
Author: Shahbaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-24 12:43:20