¿Qué optimizaciones existen para tratar de encontrar la ruta más larga en un gráfico cíclico?Optimizaciones para el problema de ruta más larga en el gráfico cíclico
La ruta más larga en los gráficos cíclicos se sabe que es NP-completa. ¿Qué optimizaciones o heurística pueden hacer que encontrar el camino más largo sea más rápido que DFSing el gráfico completo? ¿Hay algún enfoque probabilístico?
Tengo un gráfico con cualidades específicas, pero estoy buscando una respuesta a esto en el caso general. Vincular a los documentos sería fantástico. Aquí hay una respuesta parcial:
Confirmar que es cíclica. La ruta más larga en gráficos acíclicos se calcula fácilmente mediante programación dinámica.
Averiguar si el gráfico es plano (¿qué algoritmo es el mejor?). Si es así, puede ver si se trata de un gráfico de bloques, un gráfico ptolemaico o un gráfico de cactus y aplicar los métodos que se encuentran en this paper.
Descubre cuántos ciclos simples hay usando Donald B Johnson's algorithm (Java implementation). Puede cambiar cualquier gráfico cíclico en uno acíclico eliminando un borde en un ciclo simple. A continuación, puede ejecutar la solución de programación dinámica que se encuentra en the Wikipedia page. Para completar, tendrías que hacer esto N veces para cada ciclo, donde N es la duración del ciclo. Por lo tanto, para un gráfico completo, el número de veces que tiene que ejecutar la solución DP es igual al producto de las longitudes de todos los ciclos.
Si tiene que DFS todo el gráfico, puede podar algunas rutas calculando la "accesibilidad" de cada nodo de antemano. Esta accesibilidad, que se aplica principalmente a los gráficos dirigidos, es la cantidad de nodos que cada nodo puede alcanzar sin repeticiones. Es el máximo que puede ser el camino más largo desde ese nodo. Con esta información, si su ruta actual más la accesibilidad del nodo hijo es menor que la más larga que haya encontrado, no tiene sentido tomar esa rama ya que es imposible que encuentre una ruta más larga.
hace (3) se relacionan con la búsqueda de componentes fuertemente conectados? (http://en.wikipedia.org/wiki/Strongly_connected_component) - si no, habría pensado que podrías hacer algo con eso. Encontré el algoritmo de Tarjans bastante fácil de entender. – Steve314
Honestamente, no veo cómo identificar los componentes fuertemente conectados o la contracción de los vértices ayuda a resolver LPP, pero podría estar equivocado. Para forzarlo a un gráfico acíclico, creo que necesita los ciclos simples (Johnson), ya que todavía puede haber ciclos en los componentes fuertemente conectados. –
tal vez no ayude. Mi idea era que los SCC suelen ser más pequeños que el gráfico completo, por lo que encontrar las rutas más largas a través de ellos para cada par de entrada/salida debería ser relativamente rápido. Elimine los SCC y agregue un borde ponderado en lugar de cada una de estas soluciones de ruta más larga a través de SCC, y debe terminar con un dígrafo acíclico con programación dinámica. Cada borde de ruta más larga a través de SCC en realidad reemplaza un borde que ingresó al SCC y un borde que lo dejó, así como también la ruta a través del propio SCC. Sin embargo, me puede estar perdiendo algo. – Steve314