Ho un grafico con circa un miliardo di vertici, ognuno dei quali è collegato a circa 100 altri vertici a caso.
Voglio trovare la lunghezza del percorso più breve tra due punti. Non mi interessa il vero percorso utilizzato.
Note:
- A volte i bordi saranno tagliati o aggiunti. Questo accade circa 500 volte meno spesso delle ricerche. È anche ok per raggruppare le modifiche agli edge se ti consente di ottenere prestazioni migliori.
- I possibile pre-elaborare il grafico.
- Se sono necessari più di 6 passaggi, puoi tornare indietro con infinito.
- È accettabile sbagliare lo 0,01% delle volte, ma solo restituendo una lunghezza troppo lunga.
- Tutti i bordi hanno una lunghezza di 1.
- Tutti i bordi sono bidirezionali.
Sto cercando un algoritmo. Psuedocode, descrizioni in inglese e codice reale sono tutti fantastici.
Potrei usare A *, ma sembra ottimizzato per il path-finding.
Ho pensato di utilizzare l'algoritmo Dijkstra , ma ha un passo che richiede l'impostazione dell'attributo più breve percorso di ogni vertice all'infinito
(Se ti stai interrogando sul caso d'uso, è per il Concorso C subdolo.)