Tengo curiosidad por saber cuál es el tiempo de ejecución del algoritmo en la cola de prioridad implementada por una lista/matriz ordenada. Sé que para una lista/matriz no ordenada es O ((n^2 + m)) donde n es el número de vértices y m el número de bordes. Por lo tanto, eso equivale a O (n^2) tiempo. Pero sería más rápido si utilicé una lista ordenada/matriz ... ¿Cuál sería el tiempo de ejecución? Sé que la extractomina sería un tiempo constante.Tiempo de ejecución para el algoritmo de Dijkstra en una cola de prioridad implementada por ordenada lista/matriz
Respuesta
Bien, Vamos a repasar lo que necesitamos para el algoritmo de Dijkstra (para referencia futura, por lo general vértices y aristas se utilizan como V y E, por ejemplo O (VlogE)):
se fusionen todas las listas de adyacencia clasificadas: O (e)
Extracto mínima: O (1)
Disminución clave: O (V)
Dijkstra utiliza O (V) extraer operaciones mínimas, y O (e) disminuir operaciones clave, por lo tanto:
O (1) * O (V) = O (V)
O (E) * O (V) = O (EV) = O (V^2)
Tomando la porción más significativa asintóticamente:
El tiempo de ejecución asintótico eventual es O (V^2).
¿Se puede mejorar esto? Sí. Mire en montones binarios y mejores implementaciones de colas de prioridad.
Editar: De hecho, cometí un error, ahora que lo veo de nuevo. E no puede ser más alto que V^2, o en otras palabras E = O (V^2).
Por lo tanto, en el peor de los casos, el algoritmo que concluimos carreras en O (EV) es en realidad O (V^2 * V) == O (V^3)
utilizo SortedList http://blog.devarchive.net/2013/03/fast-dijkstras-algorithm-inside-ms-sql.html Se es más rápido aproximadamente 20-50 veces que ordenando Lista una vez por iteración
- 1. ¿Por qué funciona el algoritmo de Dijkstra?
- 2. Cola de prioridad eliminar tiempo de complejidad
- 3. ¿Por qué el algoritmo de Dijkstra usa la tecla disminuir? algoritmo de Dijkstra
- 4. ¿Java tiene una cola de prioridad mínima indexada?
- 5. Algoritmo de dijkstra en iOS
- 6. Cambiar la prioridad en una cola de prioridad personalizada
- 7. ¿Cómo se conserva el orden de los elementos de la misma prioridad en una cola de prioridad implementada como pila binaria?
- 8. Algoritmo de Dijkstra con una matriz 2d
- 9. Interrumpir el tie en una cola de prioridad usando python
- 10. Implementación del algoritmo de Dijkstra
- 11. ¿Existe una cola ordenada en .NET?
- 12. Implementación de cola de prioridad de Brodal
- 13. Java: cola de prioridad
- 14. C# cola de prioridad
- 15. Cola de prioridad de doble terminación
- 16. ¿Estructura de cola de prioridad utilizada?
- 17. Tutorial del algoritmo de Dijkstra de Boost
- 18. ¿Una cola de prioridad que permite una actualización de prioridad eficiente?
- 19. Relajación de un borde en el algoritmo de Dijkstra
- 20. ¿Algún algoritmo de clasificación eficiente para una lista casi ordenada que contiene datos de tiempo?
- 21. Implementación de cola de prioridad en C
- 22. Algoritmo de Dijkstra para matriz 2D en Java
- 23. Servicio con cola de prioridad en Android
- 24. método de limpieza de cola de prioridad
- 25. Cola de prioridad concurrente en .NET 4.0
- 26. ¿Cuál es el tiempo de ejecución de este algoritmo powerset
- 27. ¿Cómo implementar una cola de prioridad de multiprocesamiento en Python?
- 28. ruta más corta utilizando el algoritmo de Dijkstra
- 29. Par dentro de la cola de prioridad
- 30. ¿Por qué el framework .Net no tiene una clase de cola de prioridad?