Mateo Sanabria Ardila
ISIS1105: Diseño y análisis de algoritmos
Longest simple path
Hamiltonian cycle
3-CNF satisfiability
Longest simple path
Hamiltonian cycle
3-CNF satisfiability
Longest simple path
Hamiltonian cycle
3-CNF satisfiability
Dado un grafo conectado dirigido G, es un ciclo que recorre cada arco de G exactamente una sola vez, se puede visitar cada nodo mas de una vez.
Dado un grafo dirigido G, es un ciclo simple que contiene todo los nodos de G.
P
NP
P
NP
Entender a porque si cualquier Problema NPC puede ser resuelto en tiempo polinomial entonces cualquier problema NP tiene un algoritmo que corre en tiempo polinomial
La teoría de NPC se restringe a problemas de decision: problemas que tienen solución 1/0.
Dado un algoritmo A que solucione un problema P se distinguen
El lenguaje aceptado como el conjunto de las preguntas del problema (p) tales que: A(p) = 1
Un algoritmo rechaza una pregunta cuando: A(p) = 0
Un lenguaje L es decido por un algoritmo A si cada pregunta en L no es rechazada por A.
Un lenguaje L es aceptado en tiempo polinomial por un algoritmo A si:
Si L es aceptado por A
Si existe una constante k tal que para cualquier pregunta (en L) de tamaño n (|p|=n) el algoritmo A acepta a p en tiempo O(n^k)
Un problema P es decidido en tiempo polinomial por un algoritmo A si existe una constante k tal que para cualquier pregunta de tamaño n (|p| = n) A decide en tiempo O(n^k) si la pregunta es aceptada o rechazada.
La clase de complejidad P es el conjunto de problemas que pueden ser decididos (en una máquina de Turing) en tiempo polinomial
Suponga que se le da un Grafo G (pregunta del problema) y una lista de vertices que componen el camino Hamiltoniano del grafo G, certificado.
Es mas facial este problema que el problema original: Decidir si G tiene un camino Hamiltoniano. Why?
Cual es la complejidad de dicho algoritmo?
Un algoritmo A de verificación es una algoritmo de dos parámetros. Donde uno de los parámetros es una pregunta del problema y el segundo es un certificado del problema.
Un algoritmo A verifica una pregunta p si existe un certificado c tal que: A(p,c) = 1.
Un lenguaje L es verificado por un algoritmo A sí
La clase de complejidad NP es el conjunto de problemas que pueden ser verificados en tiempo polinomial. Es decir un problema P pertenece a NP sii existe un algoritmo de dos parámetros A tal que verifique los problemas de P en tiempo O(n^k) para algun k.
Se dice que un problema P1 problema es reducible en tiempo polinomial a un problema P2
si existe una función f calculable en tiempo polinomial tal que:
f es la función de reducción y cualquier algoritmo F que compute f en tiempo polinomial es es llamado algoritmo de reducción
Un problema X es NP-Completo si:
NP-Dificil
Halting problem (?)
The traveling salesman optimization problem (?)
Si cualquier problema NPC es soluble en tiempo polinomial entonces: P = NP
Cuando se pruebe que existe UN problema NP-completo se pueden usar reducciones para probar otros problemas NP-completos.
Los circuitos booleanos están construidos por elementos booleanos conectados por cables. Para circuit-sat se definen tres operadores booleanos (compuertas logicas) : NOT, AND y OR. Las compuertas AND y OR se generalizan para tomar mas de un parámetro de entrada:
AND : Si recibe 1 en todas sus entradas la salida es 1, e.o.c la salida es 0.
OR : Si recibe 0 en todas sus entradas la salida es 0, e.o.c la salida es 1.
Formalización: Sea G = (V,E) un grafo directo con un nodo por cada compuerta del circuito y k conecciones con representando los k cables de salida de cada compuerta. Note que G no debe tener ciclos!
Un programa es guardado en memoria como una secuencia de instrucciones.
Una instrucción codifica las operaciones sobre memoria que deben ser realizadas y en donde se guarda el resultado en memoria.
En cualquier punto de ejecución de un programa la memoria mantiene el estado de la computación.
Un estado particular de computación se define como una configuración.
Para cualquier problema L de NP, se debe describir una función f tal que:
Como L es NP existe un algoritmo A que verifica a L en tiempo polinomial.
La idea de la prueba es representar la computación de A como un secuencia de computaciones.
Para que sirve saber esto?
Cuando se reduce L' a L implicitamente se esta reduciendo todo problema en NP a L. Es decir se tiene un metodo para probar que L es NP-Completo:
Probar que L es NP
Tomar un problema L' que se sabe que es NPC y econtras una reduccion polinimial de L' -> L. (Cualquier instacia de L' se puede llevar a una instancia de L en timpo polinomial manteniendo la decibilidad )
Una instancia de, SAT es una formula boolena compuesta de:
n variables booleanas x1,x2,...xn
m conectores booleanos, cualquier funcion booleana de uno o dos paremetros: AND,OR,NOT,->,<->.
Parentesis
Un literal en una formula booleana es una aparición de una variable o su negación
Una formula booleana es CNF si se puede expresar como un AND de clausulas, donde cana una de las clausulas es un OR de uno o mas literales.
Una formula booleana es 3-CNF si cada clausula tie exactamente tres literales distintos
EL problema 3-CNF-SAT se pregunta si una formula 3-CNF es satisfacible