complejidad roberto moriyón. complejidad de algoritmos un programa que calcula una función f(w)...

42
Complejidad Roberto Moriyón

Upload: herberto-chinchilla

Post on 22-Jan-2016

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad

Roberto Moriyón

Page 2: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad de algoritmos

• Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el número de instrucciones que se ejecutan para calcular f(w) es menor o igual que F(|w|).

• Podemos tomar F(m) como el mayor número de instrucciones que se emplea en calcular f(w) para palabras de longitud menor o igual que m.

• Ejemplo: El algoritmo de ordenación de la burbuja tiene complejidad 3m(m+1)/2.

for (i = 0; i <= N; i++) {for (j = N; j > i; j--) {if (v[j] > v[j-1]) {

switch(v[j], v[j-1]); } } }

Page 3: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad de algoritmos, II

• Un programa que calcula una función g(n) tiene complejidad G(m) si para cualquier número n, el número de instrucciones que se ejecutan para calcular g(n) es menor o igual que F(log2n)

• Ejemplo: El algoritmo manual para calcular el producto de números tiene complejidad m/2.

• Estamos atribuyendo una importancia uniforme al acceso a memoria aleatoria.

• Los factores se pueden codificar de varias formas (separador, potencia, …)

Page 4: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad de algoritmos, III

• Un programa tiene complejidad:– Lineal si tiene complejidad C.m para alguna

constante C.– Cuadrática si tiene complejidad C.m2 para

alguna constante C.– Polinomial si tiene complejidad P(m) para

algún polinomio P.– Exponencial si tiene complejidad C.em para

alguna constante C.

Page 5: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad de algoritmos, IV

• Ejemplo: el problema del viajante (Travel Salesman Problem, TSP)

• Hallar la ruta de longitud mínima que pasa por un conjunto dado de ciudades.

• Solución obvia: Para cada permutación de las ciudades:– Calcular la longitud de la ruta correspondiente.– Si el coste es menor que el mejor encontrado,

guardar coste y permutación.• Tiene complejidad exponencial.

Page 6: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad de algoritmos, V

• La definición de complejidad se puede extender a otros mecanismos computacionales que permiten definir funciones, como las máquinas de Turing deterministas.

Page 7: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Variación de la complejidad

• En general interesa calcular la solución de problemas, en los que hay que representar los datos de manera adecuada y buscar un mecanismo computacional y un algoritmo óptimos.

• Como referencia se suelen utilizar las máquinas de Turing como modelo de computación.

• La diferencia entre utilizar un algoritmo u otro relacionado con él normalmente es polinomial. (Ejemplos: cambio de base; cambio de mecanismo computacional).

Page 8: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Algoritmos intratables

• Se considera que un algoritmo es intratable si su complejidad es peor que polinómica.

• Por el contrario, los algoritmos con complejidad polinómica se consideran bastante aceptables.

• Los algoritmos con complejidad logarítmica se consideran como aceptables sin ninguna duda.

• En la práctica, dependiendo de las constantes de magnitud un algoritmo logarítmico o polinomico puede ser intratable.

Page 9: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad no determinista

• Se puede definir una noción de complejidad no determinista asociada a mecanismos computacionales que permiten reconocer conjuntos de datos, como las máquinas de Turing indeterministas y las gramáticas, como sigue:

Page 10: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad no determinista, II

• Una máquina de Turing que acepta un lenguaje L tiene complejidad no determinista F(m) si dada cualquier palabra w, alguna rama de ejecución de la máquina a partir de w activa a lo más F(|w|) transiciones antes de parar.

Page 11: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad no determinista, III

• Ejemplo: Problema SAT• Para reconocer al lenguaje formado por las

fórmulas proposicionales satisfactibles podemos utilizar una máquina que da valores booleanos indeterministamente a las proposiciones atómicas y calcula el valor de la expresión booleana resultante. La complejidad no determinista de esta máquina es polinómica. Es fácil construir una máquina de Turing determinista equivalente cuya complejidad es exponencial, pero no se sabe si hay alguna con complejidad polinómica.

Page 12: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Complejidad no determinista, IV

• Ejemplo: Variante del problema del viajante.• Determinar si hay alguna ruta de longitud

menor que L que pase por un conjunto dado de ciudades.

• La idea del algoritmo dado para el problema SAT se adapta de manera obvia.

• El algoritmo se puede ejecutar de manera indeterminista con respecto a las permutaciones, teniendo una complejidad polinomial.

• No se sabe si hay un algoritmo indeterminista polinomial que resuelva el problema.

Page 13: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Ejercicios

• Estudiar la complejidad indeterminista y la determinista de los siguientes problemas:– [NW] Palabras que contienen “ababa”.– [REP] Palabras que contienen dos copias de

alguna subpalabra de cinco letras.– [PAL] Palabras que no son palíndromes.– [EQUI] Descomponer un conjunto de números

en dos con la misma suma.– [COMP] Determinar si un número es compuesto

Page 14: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Ejercicios

• Estudiar la complejidad no determinista de los siguientes problemas:– [MINGRAF] Hallar un conjunto minimal de

vértices de un grafo que contenga al menos un vértice de cada arista.

– [MAXGRAF] Hallar un conjunto maximal de vértices de un grafo que están todos ellos conectados entre sí.

Page 15: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Problemas P y NP

• La clase P de problemas está formada por los problemas que tienen un algoritmo determinista que los resuelve con complejidad polinomial.

• La clase NP de problemas está formada por los problemas que tienen un algoritmo indeterminista que los resuelve con complejidad (no determinista) polinomial.

• Ejemplos: La ordenación de números es un problema P y NP. El problema SAT es un problema NP, pero no se sabe si es P. Lo mismo ocurre con el problema del viajante.

Page 16: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial

• Una reducción polinomial de un algoritmo que calcula una función f(w) a otro que calcula g(w) es un tercer algoritmo determinista que calcula h(v) con complejidad polinómica y que verifica que f(w) = h(g(w)).

• Una reducción polinomial de un algoritmo que reconoce un lenguaje L a otro que calcula otro lenguaje M es un algoritmo que calcula h(w) con complejidad determinista polinómica y que verifica que L=h-1(M).

Page 17: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, II

• Si un problema se reduce polinomialmente a otro de la clase P, el primero también es de la clase P.

• Si un problema se reduce polinomialmente a otro de la clase NP, el primero también es de la clase NP.

Page 18: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, III

• Ejemplos:– La función f(w) cuyo valor es si el doble del

número de aes de w más el triple del número de bes de w es múltiplo de cinco y “a” en caso contrario tiene complejidad polinomial.

– El conjunto de palabras w tales que el doble del número de aes de w más el triple del número de bes de w es múltiplo de cinco tiene complejidad polinomial.

Page 19: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, IV

• Demostración:– Suponemos que c y d son símbolos que no

pertenecen al alfabeto inicial.– La función g(v) en (c+d)* cuyo valor es si |

v| es múltiplo de cinco y “a” en caso contrario tiene complejidad polinomial.

– La función f(w) es la composición h(g(v)), donde h es la función que sustituye cada a por cc y cada b por ddd, que tiene complejidad polinomial.

Page 20: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, V

• Ejemplo: Puzzle

• Un puzzle es una fórmula lógica que indica restricciones sobre los valores que pueden aparecer en un conjunto de fichas, enlazadas mediante conjunciones, disyunciones y negaciones.

• También podemos pensar en las fichas como variables, en cuyo caso el puzzle se convierte en una relación entre los valores de las variables.

Page 21: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, VI

• Ejemplo: Tomamos x, y, z como variables y 1, 2 como valores. Entonces:– La fórmula x=1 ^ ~x=y ^ ~y=z ^ z=2 define un

puzzle que no tiene solución.– La fórmula x=1 ^ ~x=y ^ ~y=z define un puzzle

que tiene una solución.

• El problema SAT es un caso particular de puzzle, donde los símbolos proposiciona-les son las variables y los valores son los booleanos true y false.

Page 22: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, VII

• Cualquier puzzle con variables xi y valores posibles rj equivale a la conjunción de la fórmula del puzzle con los siguientes conjuntos de fórmulas:– xi = r1 v xi = r2 v … v xi = rn

– xi = xj xj = xi

– xi = xj ^ xj = xk xi = xk

– xi = xj ^ xj = ra xi = ra

– xi = ra ~xi = rb si a≠b

Page 23: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, VIII

• La construcción anterior permite reducir la resolución de puzzles al problema SAT, utilizando los símbolos proposicionales siguientes:– Pi,j representa xi = xj

– Qi,a representa xi = ra

Page 24: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, IX

• Ejemplo: El problema SAT se puede reducir polinomialmente al problema CSAT de reconocimiento de las fórmulas proposicionales satisfactibles que están en forma normal conjuntiva.

• Observación: La demostración no es trivial, pues la forma habitual de transformar una fórmula proposicional arbitraria en otra equivalente en forma normal conjuntiva tiene complejidad exponencial.

Page 25: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducción polinomial, X

• Demostración de la reducción de SAT a CSAT:• Es consecuencia de la observación de que

(p1p2…pn)(q1q2…qm)es satisfactible si y sólo si

(p1X)(p2X)…(pnX)(q1~X)(q2~X)…(qm~X)

lo es. En esta transformación la longitud de la cláusula obtenida aumenta con respecto a la de la inicial en una cantidad fija por cada conjunción y cada disyunción. El método tradicional de paso a forma normal eleva al cuadrado el número de cláusulas.

Page 26: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Ejercicios

• [HAM] Se consideran los problemas1. Dado un grafo no dirigido, determinar si hay un

ciclo hamiltoniano, es decir que pase exactamente una vez por cada nodo del grafo inicial.

2. Problema del viajante: Dado un grafo no dirigido con pesos en las aristas, determinar si hay un ciclo hamiltoniano tal que la suma de los pesos de sus aristas sea menor que un número dado N.

Demostrar que 1 se pude reducir polinomialmente a 2 y viceversa.

Page 27: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

NP completitud

• Un problema es NP completo si es NP y además cualquier otro problema NP se puede reducir a él.

• Los problemas NP completos son los más complejos entre los problemas NP, pues si alguno de ellos fuera P, todos los demás problemas NP lo serían.

Page 28: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook

• El problema SAT es NP completo.• Idea de la demostración:

– Hay que ver que cualquier problema NP se puede reducir al problema SAT. Suponemos por lo tanto que M es una máquina de Turing no determinista cuyo algoritmo de reconocimiento asociado tiene complejidad P(m), donde P es un polinomio y que w es una palabra de longitud m, y denotamos M=P(m).

Page 29: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook, II

• Suponemos que M es una máquina de Turing indeterminista fija con complejidad indeterminista P(m).

Page 30: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook, III

• Por cada palabra w representaremos el hecho de que M acepte a w mediante un puzzle. Habrá NxN+|w| fichas (variables) e[i,j], donde N=P(|w|) es mayor que el número de pasos que da M partiendo de w antes de pararse al ir haciendo eleccio-nes consecutivas de transiciones y tam-bién es mayor que el tamaño del trozo de cinta sobre el que escribe M al ejecutarse.

Page 31: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook, IV

• La variable ei,j representará el símbolo que hay sobre la cinta en el lugar j tras i pasos de la ejecución del camino elegido si el cabezal de M apunta en ese momento más a la derecha, o bien el estado de M si el cabezal apunta al j-ésimo símbolo de la cinta o el símbolo que hay sobre la cinta en el lugar j-1 si el cabezal apunta más a la izquierda.

Page 32: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Demostración del Teorema de Cook, V

• La fórmula lógica del puzzle que representa la aceptación de la palabra w por la máquina de Turing M es la conjunción de las tres siguientes:1) El estado inicial e0 de la máquina se representa en la forma p0w.2) Para cada k, el estado ek+1 de la máquina se obtiene a partir del estado ek aplicando alguna regla de transición.3) El estado final eN de la máquina es de bloqueo y aceptación.

Page 33: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Demostración del Teorema de Cook, VIII

• La fórmula 1) es simplemente

e0,0 = p0 ^ e0,1 = w0 ^ …

^ e0,|w| = w|w| ^ e0,|w|+1 = B ^ …

^ e0,N = B

y la denotaremos .

• La fórmula 3), , es análoga, pues hay solamente una cantidad finita de posibilidades para las letras que forman eN.

Page 34: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Demostración del Teorema de Cook, IX

• Para obtener una fórmula proposicional que represente a la afirmación 2) vemos en primer lugar que el hecho de que ek+1 se obtenga a partir de ek mediante una transición que pasa del estado p al q sustituyendo x por y y avanzando hacia la derecha se puede representar como sigue:

Page 35: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook, X

ek,0 = ek+1,0 ^ ek,1 = ek+1,1 ^…

^ ek,j-1 = ek+1,j-1 ^ ek,j = p ^

^ ek,j+1 = x ^ ek+1,j = y ^ ek+1,j+1 = q ^

^ ek,j+2 = ek+1,j+2 ^ … ^ ek,N = ek+1,N

para algún valor de j. A esta fórmula la denotaremos k,j,p,q,x,y,+ o también k,j,T, donde T denota la transición usada.

Page 36: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook, XI

• Como consecuencia de lo anterior, la fórmula proposicional que represente a la afirmación 2)

0,T0 0,0,T0 v 0,1,T0 v … v 0,N,T0

representa que la transición T0 se aplique en el primer estado. Se pueden definir análogamente las fórmulas j,T para j y T arbitrarios.

Page 37: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook, XII

• De nuevo como consecuencia de lo anterior, la fórmula lógica

= (0,T0 v 0,T1 v … v 0,Ts) ^

^ (1,T0 v 1,T1 v … v 1,Ts) ^

^ … ^

^ (N,T0 v N,T1 v … v N,Ts)

representa la afirmación 2).

Page 38: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Teorema de Cook, XIII

• Hay una máquina de Turing que puede construir la fórmula v v , lo que demuestra que el problema de aceptación por una máquina de Turing indeterminista con complejidad indeterminista polinomial se reduce al problema SAT, y por lo tanto, que éste es un problema NP, terminando la demostración del Teorema de Cook.

Page 39: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Reducciones polinomiales de problemas NP-completos

• Si un problema NP-completo tiene una re-ducción polinomial a otro problema, enton-ces el segundo también es NP-completo.

• Demostración: Cualquier otro problema NP se puede reducir al primero mediante un algoritmo polinomial. La composición de este algoritmo con el que reduce el primer problema al segundo es otro algoritmo que reduce el tercer problema al segundo.

Page 40: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

Otros problemas NP-completos

• El problema del viajante es NP-completo.• También lo es el problema CSAT, pues SAT

se reduce a él polinomialmente• El problema de hallar un subgrafo de otro

dado de modo que toda arista del inicial tenga uno de sus vértices en uno de los vértices del subgrafo es otro problema NP completo

• Hoy en día se conocen centenares de problemas NP-completos

Page 41: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

El problema P-NP

• Los dos problemas abiertos más famosos en Matemáticas y Computación Teórica son la conjetura de Riemann (relacionada con las propiedades asintóticas del conjunto de los números primos) y el problema P-NP, consistente en determinar si P=NP o no.

Page 42: Complejidad Roberto Moriyón. Complejidad de algoritmos Un programa que calcula una función f(w) tiene complejidad F(m) si para cualquier cadena w, el

El problema P-NP, II

• Para demostrar que P=NP basta con demostrar que algún problema NP completo es P. En particular, basta con encontrar un algoritmo con complejidad polinomial que resuelva el problema SAT o NSAT (aparentemente más sencillo), el problema del viajante o cualquiera de los otros cientos de problemas NP-completos conocidos.

• Sin embargo, hasta ahora nadie ha encontrado un algoritmo de ese tipo. Muchos expertos piensan que no lo hay, pero no saben cómo demostrarlo.