¿Cómo se realiza la reducción del tiempo polinómico de UHAMPATH a UHAMCYCLE?

La reducción para la aceptación es trivial: si elimina cualquier borde de un ciclo de Hamilton, es una ruta de Hamilton. Por lo tanto, si UHAMCYCLE acepta, también debe hacerlo UHAMPATH. La reducción para el rechazo consiste en, para cada par de vértices sin borde entre ellos, agregar el borde y llamar a UHAMCYCLE. Si ninguna de estas pruebas tiene éxito, el gráfico no tiene ruta de Hamilton, rechazar. El número de tales pares de vértices es polinomial en el número de nodos, por lo que esta es una reducción de tiempo polinomial.

La reducción en la otra dirección es básicamente exactamente lo contrario. Para aceptar: si encuentra una ruta de Hamilton en un gráfico cuando ha eliminado todos los bordes entre dos nodos específicos, al agregar uno de esos bordes nuevamente, puede transformarlo en un ciclo. Puede que tenga que ejecutar su oráculo de búsqueda de ruta una vez por cada par de nodos que tengan un borde entre ellos, pero esto sigue siendo polinómico en la cantidad de nodos. (Este proceso es necesario porque un gráfico con una ruta de Hamilton no contiene necesariamente un ciclo de Hamilton). Para rechazar: Rechazar si el gráfico no contiene una ruta de Hamilton.

Esto me huele a tarea.

Aquí hay un conjunto de diapositivas que explican las reducciones de tiempo polinomiales: http://www.cs.princeton.edu/~way

Si después tiene una pregunta más específica, no dude en publicarla.

More Interesting

¿Son los problemas NP completos también problemas NP difíciles? ¿Por qué?

¿Qué es una explicación intuitiva de la minimización de arrepentimiento contrafactual?

¿Debería usar la función de clasificación () incorporada de C ++ para problemas en la programación competitiva, o debería implementar el algoritmo por mi cuenta?

Dada una lista de cadenas, ¿cómo puedo determinar si existe un orden de caracteres para el cual las cadenas están ordenadas en orden lexicográfico?

¿Qué tan buena es la calidad de los problemas de HackerRank en comparación con los problemas de Topcoder, Codeforces, Codechef?

¿Es posible implementar algoritmos de aprendizaje automático en lenguaje ensamblador?

¿Cuál es el número total de rompecabezas de sudoku posibles?

Cómo escribir un código para fusionar dos listas vinculadas ordenadas

¿El cerebro procesa imágenes exactamente como los algoritmos de visión AI y las CNN?

¿Cuál es el método más fácil para eliminar el último elemento de una matriz numpy 2D?

¿Qué algoritmo se utiliza en los puntos de calificación para las clasificaciones de cricket ICC?

¿Un ingeniero de Google sacrificaría la legibilidad del código por el rendimiento?

¿Es posible la generación de números aleatorios verdaderos?

¿Cómo debo entender los "Teoremas de no almuerzo gratis para la optimización"?

¿Tiene sentido saltar directamente a las máquinas de vectores de soporte en lugar de probar con otros algoritmos lineales, primero, en el aprendizaje automático?