Tengo un gráfico en el que con frecuencia necesito conocer todas las rutas más cortas (o más bien sus longitudes). Como no quiero recalcularlos, los almaceno en una matriz simple y simplemente los recupero de allí. Sin embargo, dado que el gráfico también podría cambiar con el tiempo, tendré que volver a calcularlos en determinados momentos.Actualizando dinámicamente las rutas más cortas
Por ahora los siguientes cambios puede ocurrir:
Adición de un nodo y un borde a la misma a la gráfica
Cambio de la longitud de un borde
Adición de un nuevo borde del gráfico
Eliminación de un borde o eliminación de un nodo
En todos los casos, todos los nodos siempre estarán conectados y todos los bordes tendrán pesos positivos. Además, el gráfico no está dirigido. La secuencia de operaciones es tal, que todos los nodos siempre serán del mismo componente del gráfico. Si se elimina un nodo o borde antes de que se hayan agregado estos otros nodos y bordes para que el gráfico nunca se separe.
Por ahora estoy planeando simplemente hacer las actualizaciones y luego propagar todos los cambios a través de la estructura del gráfico. Sin embargo, todavía no estoy seguro de cómo manejar esto correctamente. ¿Cómo tratar de lograr estas actualizaciones de la longitud en caché?
EDITAR:
Como algunos de ustedes han señalado que podría ser necesario recurrir a recalcular todo cuando se añade un nodo o se cambia un enlace. Esto podría ser, por ejemplo, cuando todas las distancias cambian a través de la actualización. Sin embargo, si solo propago los cambios a través del gráfico y hago una relajación similar a la forma en que se hacen los dijkstras, podría tener que relajar el mismo nodo varias veces, porque es posible que no elija el orden óptimo. La pregunta sería cómo ordenar los pasos de relajación, así que evito tantas actualizaciones como sea posible.
No estoy seguro de que esto tenga mucho sentido sin la idea real que tengo en mente, pero espero que esto aclare un poco más.
Tiene un nodo raíz y todas las rutas más cortas desde él, o todas las rutas más cortas entre todos los nodos? –
No, no hay ningún nodo raíz, sino todos los pares de longitudes de ruta más cortas. – LiKao
Por cada 2 puntos que se puedan conectar por una ruta influenciada por la modificación, deberá recalcular la ruta más corta –