MapReduce es un gran algoritmo distribuido para esto, aunque podría ser un poco demasiado alta potencia. Si está interesado en eso, eche un vistazo al this lecture o quizás este blog post para inspiración. (De hecho, cuando me enseñaron MapReduce, este fue uno de los primeros ejemplos.)
Para 250k bordes y 70k, parece que el gráfico es relativamente escasa, Dijkstra's algorithm carreras en O(E + V log V)
para cada nodo, para un funcionamiento completo hora (todas las fuentes) de O(VE + V^2 log V)
. Esto debería ser lo suficientemente rápido, pero las advertencias habituales se aplican a Dijkstra. (Bordes negativos.)
También puede consultar Johnson's algorithm si su problema tiene que ver con pesos negativos, pero no con ciclos negativos. Específicamente, también se puede distribuir, ya que toma el gráfico ponderado y ejecuta el algoritmo de Dijkstra de cada nodo.
Estás en lo correcto, esto no es un problema de tarea, sólo un proyecto para la diversión. No había considerado las aproximaciones, pero en este caso necesito obtener la ruta real entre dos nodos, y no solo la distancia. No veo cómo una aproximación realmente podría ayudar en este caso, pero estaría interesado en saber cómo hacerlo si pudieran. Editar: Esto fue en respuesta a un comentario que fue eliminado. Oh bien. – awegawef
Lo siento, lo borréSolo preguntaba si habías considerado resolver el uso de aproximaciones, pero luego decidí no preguntar de todos modos ya que ya aceptaste una respuesta. :) –
Y una aproximación en este contexto sería una ruta que no se garantiza que sea la más corta, pero se garantiza que no será más de un x% más larga que la ruta más corta. –