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
Un problema abstracto Q es una relación binaria de un conjunto I de instancias del problema y un conjunto S de soluciones
Un problema abstracto de decisión es una función que mapea instancias de I en el conjunto solución {0,1}
Por ejemplo el problema de decisión PATH donde el conjunto de instancias es:
Donde:
Si un camino entre u y v tiene como máximo k arcos.
e.o.c
Un Encoding de un conjunto S de objetos abstractos es un mapeo
Por ejemplo, un enconding usual para los números naturales:
Polinomios, grafos, funciones, pares ordenados, programas... todo puede ser codificado en strings binarias
La forma en la que se hace la codificación podría afectar, pero para efectos prácticos suponemos que siempre lo hacemos de la mejor forma posible...
Un lenguage L sobre
es cualquier conjunto de
palabras armadas con los símbolos de
Un alfabeto
es un conjunto finito de símbolos
denota la palabra vacía
denota el lenguaje vacío
el lenguaje de todas las palabra sobre
Q esta caracterizado por las instancias del problema que producen 1, entonces Q se puede entender como el lenguaje L sobre = {0,1}:
El conjunta de instancias para cualquier problema de decisión Q es el conjunto
Q esta caracterizado por las instancias del problema que producen 1, entonces Q se puede entender como el lenguaje L sobre = {0,1}:
Por ejemplo:
PATH = {<G,u,v,k> : G = (V,E) es un GND
u, v in V
K es un entero positivo
existe un camino de u -> v con máximo k arcos }
Relación entre los problemas y los algoritmo que los resuelven:
Un algoritmo A acepta una palabra x in {0,1}* si para x respuesta de A(x) es 1.
El lenguaje aceptado por un algoritmo A es el conjunto de palabras que el algoritmo acepta:
Un lenguaje L es decidido en tiempo polinomial por un algoritmo A si existe un constante k tal que para cualquier palabra x in {0,1}* de longitud n, el algoritmo correctamente decide si x in L en tiempo
Un lenguaje L es decidido por un algoritmo A si cualquier palabra binaria en L es aceptada por A y cualquier palabra que no sea de L es rechazada por A.
Un ciclo Hamiltoniano (CH) es un camino sin vértices repetidos que recorre todos los vértices del grafo. Un grafo que contiene un CH se llama Hamiltoniano.
HAM-CYCLE = {<G>: G es Hamiltoniano}
Un algoritmo A de verificación es una algoritmo de dos parámetros. Donde uno de los es una palabra del lenguaje y el segundo es un certificado del problema.
Un algoritmo A verifica una palabra x si existe un certificado y tal que: A(x,y) = 1.
El lenguaje verificado por un algoritmo de verificacion A es:
Un lenguaje L pertenece a NP sii existe un algoritmo A y una constante c tal que:
Se dice que un lenguaje L1 es reducible en tiempo polinomial a un lenguaje L2
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
Si cualquier problema NPC es soluble en tiempo polinomial entonces: P = NP
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 )
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!
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.
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 es una variable booleana o su negación.
Una clausulas son varios literales conectados por s.
Una cnf-formula esta compuesta por varias clausulas conectadas por
Se llama una 3cnf-formula si todas las clausulas tienen tres literales.
Un clique de un grafo G es un subgrafo de G donde cualquier par de nodos esta conectado. Un K-clique es un clique que contiene k nodos.
Una cobertura de vértices de un grafo no dirigido G=(E,V) es un subconjunto tal que:
El tamaño de una cobertura de vértices es la cardinalidad de V'.