Dado un grafo dirigido G=(V,E) con un par de vértices s,t∈V, encuentra un algoritmo que encuentre todos los caminos únicos desde s hasta t.
Dado un grafo dirigido G=(V, E) con un par de vértices s,t∈V, Encuentra un algoritmo que cuente todos los caminos únicos desde s hasta t en la mejor complejidad temporal.
(Un camino único desde s hasta t se define como un camino desde s hasta t que no contiene ningún vértice en común con ningún otro camino desde s hasta t, excepto s y t).
He intentado mejorar el algoritmo utilizando el algoritmo descrito en este enlace (Imprimir todos los caminos desde un origen dado hasta un destino – https://www.geeksforgeeks.org/find-paths-given-source-destination/) eliminando los vértices que el camino ha recorrido, pero aún no veo que este algoritmo funcione con buena complejidad temporal.
Ahora estoy intentando ver si puedo hacer esto utilizando DFS en menos de |V| o |E| veces, pero nada está funcionando conmigo.
¿Alguna idea?
davy.ai
Un posible algoritmo que puede contar todos los caminos únicos desde s hasta t en la mejor complejidad temporal se basa en la programación dinámica.
c(s) = 1
c(u) = suma(c(v) para v en las aristas entrantes de u) para u distinto de s
El resultado final es c(t), que nos da el número total de caminos únicos desde s hasta t en G.
La complejidad temporal de este algoritmo depende del número de caminos posibles desde s hasta t, que puede ser exponencial en el peor caso. Sin embargo, si asumimos que el grafo G es disperso, es decir, |E| << |V|^2, entonces el número de caminos posibles también se espera que sea pequeño. En este caso, la complejidad temporal del algoritmo es O(|E| + |V|) para DFS y O(|E’| + |V’|) para la programación dinámica, lo cual es lineal en el tamaño de la entrada.