Actualmente estoy estudiando los caminos más cortos en gráficos dirigidos. Existen muchos algoritmos eficientes para encontrar el camino más corto en una red, como el de dijkstra o el de bellman-ford. Pero, ¿y si el gráfico es dinámico? Al decir dinámico quiero decir que podemos insertar o eliminar vértices durante la ejecución del programa. Estoy tratando de encontrar un algoritmo eficiente para actualizar las rutas más cortas desde un vértice a cualquier otro vértice , después de insertar un borde , sin necesidad de volver a ejecutar el algoritmo de ruta más corta en el nuevo gráfico. ¿Cómo puedo hacer esto? Gracias por adelantado.u e
- Nota: los cambios se pueden realizar después de la primera iteración del algoritmo
- Nota [2]: se dan dos nodos, la fuente el objetivo. Necesito encontrar el camino más corto entre estos nodos. Cuando se actualiza el gráfico sólo tengo que actualizar , que es el camino más corto entre y .t π ( s , t ) s t
- Nota [3]: solo me interesa el caso de inserción de borde.
Una definición formal : dado un gráfico . Definir una operación de actualización como 1) una inserción de un borde a o 2) aa eliminación de un borde de . El objetivo es encontrar de manera eficiente el costo de todos los pares de rutas más cortas después de una operación de actualización. Por eficiente, queremos decir al menos mejor que ejecutar un algoritmo de Todos los pares de ruta más corta, como el algoritmo Bellman-Ford, después de cada operación de actualización.e E e E
Editar: a continuación hay una versión simplificada del problema:
Se proporciona un gráfico ponderado , que consta de bordes unidireccionales y dos vértices críticos y . También se proporciona un conjunto de bordes bidireccionales candidatos . Tengo que construir una arista para minimizar la distancia de a .s t Cs t