Eu tenho um gráfico com cerca de um bilhão de vértices, cada um dos quais está conectado a cerca de 100 outros vértices aleatoriamente.
Quero encontrar o comprimento do caminho mais curto entre dois pontos. Eu não me importo com o caminho real usado.
Notas:
- Às vezes, as arestas serão cortadas ou adicionadas. Isso acontece cerca de 500 vezes menos que as pesquisas. Também é aceitável alterar alterações de borda, caso permita obter melhor desempenho.
- Eu posso pré-processar o gráfico.
- Se demorar mais de 6 etapas, você poderá voltar com o infinito.
- É aceitável estar errado em 0,01% do tempo, mas apenas ao retornar um comprimento muito longo.
- Todas as arestas têm um comprimento de 1.
- Todas as arestas são bidirecionais.
Estou procurando um algoritmo. Psuedocode, descrições em inglês e código real são ótimos.
Eu poderia usar A *, mas isso parece otimizado para busca de caminhos.
Pensei em usar o algoritmo de Dijkstra , mas ele possui uma etapa que requer a configuração do atributo mais curto encontrado em todos os vértices para o infinito
(Se você está se perguntando sobre o caso de uso, é para o Concurso C Underhanded.)