Atualmente, estou estudando caminhos mais curtos em gráficos direcionados. Existem muitos algoritmos eficientes para encontrar o caminho mais curto em uma rede, como o dijkstra ou o bellman-ford. Mas e se o gráfico for dinâmico? Ao dizer dinâmico, quero dizer que podemos inserir ou remover vértices durante a execução do programa. Estou tentando encontrar um algoritmo eficiente para atualizar os caminhos mais curtos de um vértice para todos os outros vértices , depois de inserir uma aresta , sem precisar executar o algoritmo de caminho mais curto no novo gráfico novamente. Como posso fazer isso? Desde já, obrigado.
- Nota: as alterações podem ser feitas após a primeira iteração do algoritmo
- Nota [2]: dois nós são dados, a fonte de e o alvo. Preciso encontrar o caminho mais curto entre esses nós. Quando o gráfico é atualizado, só preciso atualizar , que é o caminho mais curto entre e .
- Nota [3]: Estou interessado apenas no caso de inserção de arestas.
Uma definição formal : Dado um gráfico . Definir uma operação de actualização como 1) uma inserção de uma extremidade para ou 2) aa eliminação de uma extremidade a partir de . O objetivo é encontrar com eficiência o custo de todos os pares de caminhos mais curtos após uma operação de atualização. Com eficiência, queremos dizer, pelo menos, melhor do que executar um algoritmo Todos os pares com o caminho mais curto, como o algoritmo Bellman-Ford, após cada operação de atualização.
Edit: Abaixo há uma versão simplificada do problema:
Um gráfico ponderado é fornecido, consistindo de arestas unidirecionais e dois vértices críticos e . Um conjunto de arestas bidirecionais candidatas também é fornecido. Eu tenho que construir uma aresta para minimizar a distância de a .s t C ( u , v ) ∈ C s