Tengo un gráfico con aproximadamente mil millones de vértices, cada uno de los cuales está conectado a unos 100 otros vértices al azar.
Quiero encontrar la longitud del camino más corto entre dos puntos. No me importa la ruta real utilizada.
Notas:
- A veces los bordes se cortan o se agregan. Esto sucede aproximadamente 500 veces menos a menudo que las búsquedas. También está bien agrupar cambios de borde si le permite obtener un mejor rendimiento.
- I puedo pre-procesar el gráfico.
- Si toma más de 6 pasos, puede regresar con infinito.
- Es aceptable estar equivocado el 0.01% del tiempo, pero solo al devolver una longitud que es demasiado larga.
- Todos los bordes tienen una longitud de 1.
- Todos los bordes son bidireccionales.
Estoy buscando un algoritmo. El psuedocódigo, las descripciones en inglés y el código real son geniales.
Podría usar A *, pero parece optimizado para la búsqueda de rutas.
Pensé en usar el algoritmo de Dijkstra , pero tiene un paso que requiere establecer el atributo encontrado de la ruta más corta de cada vértice al infinito
(Si te estás preguntando sobre el caso de uso, es para el concurso Underhanded C).