Dado un gráfico dirigido y conectado con solo pesos de borde positivos, ¿hay algoritmos más rápidos para encontrar la ruta más corta entre dos vértices, que Dijkstra usando un montón de fibonacci?¿Hay algoritmos más rápidos que Dijkstra?
Wikipedia dice que Dijkstra está en O (| E | + | V | * log (| V |)) (utilizando un montón de fibonacci).
No estoy buscando optimizaciones que, por ejemplo, la mitad del tiempo de ejecución, sino algoritmos que están en una complejidad de tiempo diferente (como pasar de O (n * log n) a O (n)).
Además, me gustaría saber su opinión sobre el siguiente enfoque:
- Determine el MCD de todos los pesos de las aristas.
- Transforme el gráfico en un gráfico con pesos de borde uniformes.
- Usa BFS para encontrar la ruta más corta entre dos vértices dados.
Ejemplo para el punto 2:
Imagine el GCD ser 1. Entonces me transformar el borde
A ---> B (peso borde 3)
en
A-> A '-> A' '-> B (3 veces el peso del borde 1)
Esta transformación cuesta un tiempo constante y tendría que hacerse una vez por cada borde. Así que espero que este algoritmo esté en O (| E |) (transformación) + O (| E | + | V |) (BFS) = O (2 * | E | + | V |) = O (| E | + | V |)
Gracias por tomarse el tiempo para leer mi pregunta y espero no haberle quitado el tiempo ^^. Que tengas un buen día.
Creo que te olvidas de contabilizar el costo del GCD. –
La transformación no se ejecuta en tiempo constante. Tendrás que crear una cantidad variable de nuevos vértices. –
El GCD sería el mejor valor para usar, pero uno siempre puede recurrir y usar solo 1, de modo que no se gasta tiempo en el paso 1. –