¿Cómo puedo encontrar la ruta más larga de un gráfico bidireccional utilizando el algoritmo BFS?

Un gráfico bidireccional puede ser cualquier gráfico complejo arbitrario. Pero el problema de encontrar la ruta más larga en gráficos arbitrarios es NP-completo, es decir, la ruta más larga no se puede resolver en tiempo polinómico.

Por otro lado, la búsqueda de amplitud primero (BFS) tiene una complejidad lineal de tiempo de ejecución. Por lo tanto, no puede resolver la ruta más larga utilizando una sola instancia de BFS.

Sin embargo, puede usar BFS para recorrer todo el espacio de búsqueda, es decir, todas las rutas posibles .

Algoritmo:

Desde el nodo inicial, atraviesa todos los nodos vecinos, que atraviesan a sus vecinos, que atraviesan a sus vecinos … hasta que haya construido todas las rutas posibles con longitud [math] | V | [/ math] para el gráfico [math] G = ( V, E). [/ Math] Ahora simplemente evalúa su función de costo en todas las rutas y devuelve la que tiene los costos máximos.

Como este algoritmo tiene que almacenar todas las rutas en la memoria, no es factible para ningún gráfico con más de, digamos, unas pocas docenas de vértices. El algoritmo sería más eficiente en el espacio cuando se utiliza la búsqueda de profundidad primero: revise esta publicación.

  1. ‘Negar’ todos los pesos del camino. (multiplíquelos por -1).
  2. Cree un árbol de expansión con el nodo de origen como raíz.
  3. Encuentre el número de nivel del nodo de destino. En BFS, esta es la longitud de la ruta más corta desde el origen (raíz) hasta el destino.

Esto dará el camino más corto usando pesos negativos, que es el camino más largo para los pesos ‘reales’.

More Interesting

¿Por qué los algoritmos no hacen las preguntas sobre Quora?

Cómo crear un programa PHP que muestre los enteros en orden por las veces que se repiten en la matriz

¿Cuáles son algunos algoritmos fáciles de implementar para la localización basada en características o puntos de referencia de robots móviles 2-D?

Cómo ordenar una matriz 2D de tipo char utilizando la función C ++ sort () o qsort ()

¿Hay algún algoritmo de aprendizaje automático para el que pones una línea y devuelve la línea más cercana en un conjunto de datos?

¿Qué estructura de datos es más adecuada para una expresión postfix?

¿Cómo va a hacer que me gusten y me interesen los algoritmos (programación)?

¿Cómo son útiles las conferencias sobre algoritmos de Ravindra Babu Ravula para las entrevistas en el campus?

¿Cuáles son ejemplos de la secuencia de Fibonacci en el campo de la ciencia y las artes liberales (economía, sociología, incluso historia, etc.)?

¿Cómo se construye exactamente una estructura de datos de árbol en JavaScript?

¿Cuál es la explicación intuitiva para agregar flujo en bordes inversos en el algoritmo de flujo máximo? ¿Por qué necesitamos eso?

Tengo diez declaraciones que me gustaría calificar al permitir que las personas elijan una preferida cuando se les dan dos opciones. ¿Cómo voy a hacer esto?

¿Cuál es el algoritmo de seguimiento de la ubicación más cercana a algunos amigos que se encuentran en una región de cuadrícula?

¿Cuál es el uso práctico de los árboles de búsqueda binarios?

¿El algoritmo de retroceso tiene que ver con la recursividad? Si no, ¿cuál es un ejemplo?