¿Qué algoritmo se puede utilizar para encontrar la ruta más larga en un gráfico acíclico dirigido no ponderado?Ruta acíclica más larga en un gráfico no ponderado dirigido
Respuesta
Dynamic programming. También se hace referencia en Longest path problem, dado que es un DAG.
El siguiente código de Wikipedia:
algorithm dag-longest-path is
input:
Directed acyclic graph G
output:
Length of the longest path
length_to = array with |V(G)| elements of type int with default value 0
for each vertex v in topOrder(G) do
for each edge (v, w) in E(G) do
if length_to[w] <= length_to[v] + weight(G,(v,w)) then
length_to[w] = length_to[v] + weight(G, (v,w))
return max(length_to[v] for v in V(G))
Mientras el grafo es acíclico, todo lo que tiene que hacer es negar los pesos de las aristas y ejecutar cualquier algoritmo de ruta más corta.
EDITAR: Obviamente, necesita un algoritmo de ruta más corta que admita contrapesos negativos. Además, el algoritmo de Wikipedia parece tener una mejor complejidad de tiempo, pero dejaré mi respuesta aquí para referencia.
y mantenemos los pesos negativos como negativos? : p – Hellnar
@Hellnar: no, si tienes pesos negativos en el gráfico original, deberían ser positivos. w '= - (w) –
Wikipedia tiene un algoritmo: http://en.wikipedia.org/wiki/Longest_path_problem
Parece que utilizan ponderaciones, pero debería funcionar con ponderaciones todo listo para
1.puede ser resuelto por el método de la ruta crítica:
1. Encontrar un ordenamiento topológico
2. encuentre la ruta crítica
vea [Horowitz 1995], Fundamentos de las estructuras de datos en C++, Computer Science Press, Nueva York.
La estrategia codiciosa (por ejemplo, Dijkstra) no funcionará, sin importar: 1. use "max" en lugar de "min" 2. convierta los pesos positivos a negativos 3. dé un número muy grande M y use M-w como peso.
- 1. Redis: implementar gráfico dirigido ponderado
- 2. de particiones en un gráfico dirigido ponderado (más de base de datos clave/valor)
- 3. ¿Cómo modelar una red bayesiana o, más generalmente, un gráfico ponderado dirigido, en SQL?
- 4. Atravesar un gráfico no ponderado no dirigido con un giro: visitas mínimas a cada nodo
- 5. Dijkstra para la ruta más larga en un DAG
- 6. Ruta simple más larga
- 7. Django gráfico no dirigido
- 8. ¿Cómo encontrar la ruta más larga en un gráfico cíclico entre dos nodos?
- 9. Encontrar un ciclo en un gráfico no dirigido versus encontrar uno en un gráfico dirigido
- 10. Cómo almacenar un gran gráfico no ponderado dirigido con miles de millones de nodos y vértices
- 11. ¿Cómo puedo construir un gráfico de palabras acíclica dirigido incremental para almacenar y buscar cadenas?
- 12. ¿Cómo transformo un gráfico no dirigido y muy cíclico en un gráfico acíclico dirigido?
- 13. ¿Modelar un gráfico no dirigido en Rails?
- 14. Algoritmo de aproximación de ruta más larga de un nodo dado
- 15. Implementando un gráfico dirigido en python
- 16. ¿Cómo implementar un gráfico no dirigido en Ruby on Rails?
- 17. Flujo máximo - Ford-Fulkerson: gráfico no dirigido
- 18. Almacenar un gráfico dirigido en google appengine datastore
- 19. Detectando ciclos de un gráfico (tal vez dirigido o no dirigido) en Haskell
- 20. Optimizaciones para el problema de ruta más larga en el gráfico cíclico
- 21. Ruta de búsqueda de algoritmo en un árbol no dirigido
- 22. Algoritmo de propósito general para triangular un gráfico no dirigido?
- 23. Encontrar todas las rutas en un gráfico dirigido con ciclos
- 24. Recorrido de gráfico cíclico dirigido
- 25. Sugerencias para KSPA en el gráfico no dirigido
- 26. ¿Encontrando las "mejores raíces" en un gráfico de árbol dirigido?
- 27. ¿Cómo se llama este algoritmo para buscar la ruta máxima en un gráfico acíclico dirigido?
- 28. Visualizar gráfico no dirigido que es demasiado grande para GraphViz?
- 29. Complejidad computacional de un algoritmo de ruta más larga con un método recursivo
- 30. Un árbol de expansión mínimo bidireccional de un gráfico dirigido
Esto devuelve solo la longitud de la ruta. ¿Se puede modificar fácilmente el código para devolver el camino? – oschrenk
Sí, de la misma manera con la mayoría de los problemas de DP: haga un seguimiento de lo anterior y vuelva a encenderlo. – Larry
'topOrder (G)' es la lista de vértices de G en [orden topológico] (https://en.wikipedia.org/wiki/Topological_sorting) –