Supongamos que lo que estamos buscando es el camino simple más largo; en otras palabras, ningún vértice aparece dos veces. Cualquiera que sea el camino más largo, se puede escribir como la secuencia de vértices que visita el camino, y los vértices consecutivos en el camino tendrán un borde entre ellos. En otras palabras, es suficiente generar cada permutación de hasta vértices [matemáticos] n [/ matemáticos], verificar que la permutación sea un camino válido verificando vértices consecutivos, calculando la longitud del camino y manteniendo el más largo encontrado hasta ahora.
Claramente, podemos hacer algunos accesos directos, por ejemplo, podemos generar todas las permutaciones de longitud exactamente [matemáticas] n [/ matemáticas], medir hasta el primer borde faltante y podemos saltar las permutaciones más allá de ese borde faltante, pero en general habrá be [math] O (n!) [/ math] permutaciones para verificar.
Más o menos exactamente el tipo de algoritmo de fuerza bruta que esperaría … y, en ausencia de información adicional o restricciones sobre el gráfico, también esperaría no poder hacerlo significativamente mejor: el problema es NP-hard, esencialmente porque la única forma de verificar una ruta más larga es verificarlas todas.
- Quiero usar una cola prioritaria en un problema. Creo que implementar una cola prioritaria usando una matriz es más fácil que usar un montón. ¿Qué piensas y por qué?
- ¿Qué es la complejidad del algoritmo?
- ¿Cómo se copia el contenido de un árbol de búsqueda binario que tiene emparejamientos K, V?
- ¿Cómo se les ocurrió el algoritmo de MD5?
- ¿Por qué deberíamos instanciar una matriz en una línea diferente?