El algoritmo de Dijkstra en sí mismo puede verse como una aplicación del paradigma de programación dinámica. Recuerdas la mejor solución para algunos vértices y luego reutilizas esa información para resolver otros vértices de manera eficiente.
El algoritmo de Dijkstra solo está garantizado para trabajar con gráficos con longitudes de borde positivas. Para estos gráficos, cada caminata más corta también es un camino más corto, porque no tiene sentido dejar un vértice y luego regresar al mismo vértice. El algoritmo de Dijkstra usa esto implícitamente: para cada vértice encontramos el camino más corto que lo alcanza (tenga en cuenta que el algoritmo nunca verifica los vértices repetidos) y al final informamos que el camino más corto encontrado es el camino más corto que queríamos.
Podemos usar el mismo enfoque para encontrar las primeras k caminatas más cortas de A a B, para una k pequeña. En lugar de calcular la mejor manera de llegar a cada vértice desde A, simplemente calcularemos y almacenaremos las k mejores formas. (Más detalles: la cola de prioridad durante el algoritmo contiene eventos de la forma “Puedo alcanzar el vértice X usando una caminata de longitud D”. Para cada vértice, procesamos los k mejores eventos).
- ¿Cuáles son las aplicaciones de la estructura de datos en C?
- Si uso un algoritmo de cifrado no tan bueno que inventé dentro de uno real, ¿cuánto más seguros están juntos?
- Después de aprender Python (junto con algoritmos y estructuras de datos), ¿sería beneficioso para mí aprender Selenium o debería seguir alguna otra búsqueda? Ya trabajo con Node.js, ¿hay algo más además de Django?
- ¿Qué estructura de datos se utiliza para almacenar la pestaña reciente en el teléfono?
- ¿Cuáles son las mejores rutinas que podemos adoptar para ser buenos en la programación / diseño de algoritmos?