Вы находитесь на странице: 1из 27

Anlisis de Algoritmos

Otoo 2013 Unidad III : Complejidad Computacional

Contenidos
Complejidad e intratabilidad - Problemas, algoritmos y complejidad - Algoritmos de tiempo polinomial y problemas intratables Teora de NP-completitud - La clase P y NP - Problemas NP-difciles - Ejemplos de problemas NP-difciles - Problemas NP-completos Problemas de decisin - Mquinas de Turing deterministas y la clase P - Computacin no determinista y la clase NP

Introduccin
La Teora de la Complejidad Computacional es una rama de la teora de la computacin que se centra en la clasificacin de los problemas computacionales de acuerdo a su dificultad inherente, y en la relacin entre dichas clases de complejidad. Un problema se cataloga como "inherentemente difcil" si su solucin requiere de una cantidad significativa de recursos computacionales, sin importar el algoritmo utilizado. La teora de la complejidad computacional formaliza dicha aseveracin, introduciendo modelos de cmputo matemticos para el estudio de estos problemas y la cuantificacin de la cantidad de recursos necesarios para resolverlos, como tiempo y memoria.
Uno de los roles de la teora de la complejidad computacional es determinar los lmites prcticos de qu es lo que se puede hacer en una computadora y qu no. Otros campos relacionados con la teora de la complejidad computacional son el anlisis de algoritmos y la teora de la computabilidad.

Introduccin (continuacin)
Una diferencia significativa entre el anlisis de algoritmos y la teora de la complejidad computacional, es que el primero se dedica a determinar la cantidad de recursos requeridos por un algoritmo en particular para resolver un problema, mientras que la segunda, analiza todos los posibles algoritmos que pudieran ser usados para resolver el mismo problema. La teora de la complejidad computacional trata de clasificar los problemas que pueden, o no pueden ser resueltos con una cantidad determinada de recursos. A su vez, la imposicin de restricciones sobre estos recursos, es lo que la distingue de la teora de la computabilidad, la cual se preocupa por qu tipo de problemas pueden ser resueltos de manera algortmica.

Historia
Antes de que se realizaran investigaciones en torno a la complejidad de los algoritmos, se crearon los cimientos de esta teora por varios investigadores. Uno de los aportes ms influyentes fue la definicin de las Mquinas de Turing en 1936, las cuales resultaron ser una nocin de computadora muy flexible y robusta. A medida que las computadoras se desarrollaban en los 40's y los 50's, la Mquina de Turing demostr ser el modelo terico correcto de cmputo. Sin embargo, rpidamente se descubri que el modelo bsico de la Mquina de Turing fallaba al cuantificar el tiempo y la memoria requerida por una computadora, un problema crtico hoy en da, y an ms en aquellos tiempos. La idea de medir el tiempo y espacio como una funcin de la longitud de la entrada, se origin a principios de los 60's por Hartmanis and Stearns, y as, naci la teora de la complejidad computacional.

Historia (continuacin)
En los inicios, los investigadores trataban de entender las nuevas medidas de complejidad, y cmo se relacionaban unas con otras. En 1965, Edmonds defini un "buen" algoritmo como uno con un tiempo de ejecucin acotado por un polinomio, es decir, con un tiempo de ejecucin polinmico.[1] Esto condujo al surgimiento de uno de los conceptos ms importantes de la teora de la complejidad computacional: la NP-completitud y su pregunta fundamental, si P=NP.

El campo comenz a florecer cuando el investigador norteamericano Stephen Cook, trabajando de manera independiente al investigador sovitico Leonid Levin, probaron que existen problemas relevantes que son NP-completos. En 1972, Richard Karp llev esta idea un paso ms adelante, demostrando que 21 problemas combinatorios y de teora de grafos, caracterizados por ser computacionalmente intratables, eran NP-completos.[2] Tambin en los 70's, se produjo un crecimiento de las clases de complejidad a medida que los investigadores trataban de comprender los distintos modelos de cmputo existentes.

Historia (continuacin)
En los 80's, se produjo un auge de los modelos finitos, que analizaban el proceso de cmputo de una manera inherentemente distinta. Surgi un nuevo acercamiento a problemas como P=NP, y an cuando estos modelos tenan sus limitaciones separando las clases de complejidad, esta aproximacin introdujo tcnicas combinatorias que permitieron un mejor entendimiento de los lmites de estos modelos. Ya en los 90's, se estudiaron nuevos modelos de cmputo como las computadoras cunticas, donde una misma tarea puede tener diferente complejidad en la computacin clsica y en la computacin cuntica. Sin embargo, existen varias limitantes, entre ellas, la de desarrollar un hardware para este modelo, y que se requieren grandes cantidades de espacio para realizar los clculos.

Problemas, algoritmos y complejidad


Para poder referirnos a problemas como "inherentemente intratables" y problemas de dificultad "equivalente", es necesario comprender algunos trminos ms bsicos. Problema computacional Un problema computacional constituye una pregunta a ser respondida, teniendo generalmente varios parmetros, o variables libres, cuyos valores no se han especificado. Un problema se describe mediante: Una descripcin general de todos sus parmetros (pueden ser de entrada o de salida). Una sentencia que describa las propiedades que la respuesta, o la solucin, debe cumplir. Una instancia de un problema se obtiene cuando se especifican valores particulares para todos los parmetros del problema. Por ejemplo, consideremos el problema del test de primalidad. La instancia es un nmero (e.g. 15) y la solucin es "s" si el nmero es primo, y "no" en caso contrario. Visto de otra manera, la instancia es una entrada particular del problema, y la solucin es la salida correspondiente para la entrada dada.

Problemas, algoritmos y complejidad


Problemas de decisin Un problema de decisin es un tipo especial de problema computacional cuya respuesta es solamente "s" o "no" (o, de manera ms formal, "1" o "0"). Un problema de decisin pudiera verse como un lenguaje formal, donde los elementos que pertenecen al lenguaje son las instancias del problema cuya respuesta es "s", los que no pertenecen al lenguaje son aquellas instancias cuya respuesta es "no". El objetivo es decidir, con la ayuda de un algoritmo, si una determinada entrada es un elemento del lenguaje formal considerado. Si el algoritmo devuelve como respuesta "s", se dice que el algoritmo acepta la entrada, de lo contrario se dice que la rechaza. Los problemas de decisin constituyen uno de los principales objetos de estudio de la teora de la complejidad computacional, pues la NP-completitud se aplica directamente a estos tipos de problemas en vez de a problemas de optimizacin. Estos problemas tienen gran importancia porque casi todo problema puede transformarse en un problema de decisin.

Problemas, algoritmos y complejidad


Algoritmos Podemos decir informalmente, que los algoritmos son procedimientos paso-apaso para resolver problemas. Se puede pensar en ellos como simples programas de computadora, escritos en un lenguaje artificial especfico.[3] Se dice que un algoritmo resuelve un problema A, si dicho algoritmo se puede aplicar a cualquier instancia I de A, y se garantiza que siempre produce una solucin para dicha instancia. De manera general, nos interesa encontrar el algoritmo ms "eficiente" para resolver cierto problema. En su sentido ms amplio, la nocin de eficiencia involucra a todos los recursos computacionales necesarios para la ejecucin de un algoritmo. Por algoritmo "ms eficiente" usualmente nos referimos al ms rpido. Debido a que los requerimientos de tiempo son usualmente un factor dominante cuando se trata de determinar si un algoritmo es lo suficientemente eficiente para ser til en la prctica, nos concentraremos en este recurso.

Algoritmos de tiempo polinmico y problemas intratables


Los cientficos de la computacin realizan la distincin entre algoritmos de Tiempo polinmico y algoritmos de tiempo exponencial cuando se trata de caracterizar a los algoritmos como "suficientemente eficiente" y "muy ineficiente" respectivamente. Un algoritmo de tiempo polinomial se define como aquel con funcin de complejidad temporal en O(p(n)) para alguna funcin polinmica p, donde n denota el tamao de la entrada. Cualquier algoritmo cuya funcin de complejidad temporal no pueda ser acotada de esta manera, se denomina algoritmo de tiempo exponencial. La mayora de los algoritmos de tiempo exponencial son simples variaciones de una bsqueda exhaustiva, mientras que los algoritmos de tiempo polinomial, usualmente se obtienen mediante un anlisis ms profundo de la estructura del problema. En la teora de la complejidad computacional, existe el consenso de que un problema no est "bien resuelto" hasta que se conozca un algoritmo de tiempo polinomial que lo resuelva. Por tanto, nos referiremos a un problema como intratable, si es tan difcil que no existe algoritmo de tiempo polinomial capaz de resolverlo.[4

Clases de complejidad
Una clase de complejidad es un conjunto de problemas que poseen la misma complejidad computacional. Definiendo clases de complejidad Las clases de complejidad ms sencillas se definen teniendo en cuenta factores como: El tipo de problema computacional: Los problemas ms comunmente utilizados son los problemas de decisin, pero las clases de complejidad se pueden definir para otros tipos de problemas. El modelo de cmputo: El modelo de cmputo ms comn es la Mquina de Turing determinista, pero muchas clases de complejidad se basan en Mquinas de Turing no deterministas, Mquinas de Turing cunticas, etc. El recurso (o recursos) que est(n) siendo acotado(s) y la(s) cota(s): Estas dos propiedades usualmente se utilizan juntas, por ejemplo, "tiempo polinomial", "espacio logartmico", "profundidad constante", etc.

Mquinas de Turing deterministas y la clase P


La clase P contiene a aquellos problemas que son solubles en tiempo polinmico por una mquina de Turing determinista.[5] Para la definicin anterior se ha fijado el modelo de cmputo: la Mquina de Turing determinista. Existen distintas variantes de la Mquina de Turing y es conocido que la ms dbil de ellas puede simular a la ms fuerte, adicionando a lo sumo un tiempo polinmico. En las dcadas posteriores a la Tesis de Church-Turing surgieron otros modelos de cmputo, y se pudo mostrar que la Mquina de Turing tambin poda simularlos a lo sumo adicionando tambin un tiempo polinmico. Por tanto, la clase anloga a P para dichos modelos no es mayor que la clase P para el modelo de cmputo de la mquina de Turing. La clase P juega un papel importante en la teora de la complejidad computacional debido a que: 1.- P es invariante para todos los modelos de cmputo que son polinmicamente equivalentes a la Mquina de Turing determinista. 2.- A grandes rasgos, P corresponde a la clase de problemas que, de manera realista, son solubles en una computadora.

Computacin no determinista y la clase NP


Muchas veces podemos evitar utilizar la fuerza bruta en los problemas para obtener soluciones en tiempo polinmico. Sin embargo, para algunos problemas esto no ha podido lograrse, es decir, no se conocen algoritmos que los resuelvan en tiempo polinmico. Quizs estos problemas tengan algoritmos en tiempo polinomial que se basan en principios por ahora desconocidos, o quizs estos problemas no pueden ser resueltos en tiempo polinmico, debido a que son "inherentemente difciles". La clase de complejidad NP consta de los problemas "verificables" en tiempo polinmico. Por verificable se entiende a un problema tal que dado un certificado de solucin (candidato a solucin), se puede verificar que dicho certificado es correcto en un tiempo polinmico en el tamao de la entrada. A los problemas en la clase NP usualmente se les llama problemas NP.[6]

El trmino NP proviene de no determinista en tiempo polinmico y se deriva de un caracterizacin alternativa de esta clase, donde se utilizan Mquinas de Turing no deterministas. Informalmente, se puede definir la clase NP en trminos de un algoritmo no determinista (recordar la equivalencia entre algoritmo y Mquina de Turing).

La pregunta P=NP
La relacin entre las clases P y NP es fundamental para la teora de la NPcompletitud. Intuitivamente, creemos que P es un subconjunto de NP. Y efectivamente, cada problema de decisin resuelto por un algoritmo de tiempo polinomial determinista, tambin puede ser resuelto por un algoritmo de tiempo polinomial no determinista. Simplemente se necesita observar que cualquier algoritmo determinista puede ser utilizado en la etapa de verificacin de un algoritmo no determinista. Si B es un problema de P, y A es un algoritmo de tiempo polinomial para B, entonces se puede construir un algoritmo de tiempo polinomial no determinista para B, simplemente utilizando A en la etapa de verificacin e ignorando la etapa de adivinacin. Por tanto, si B pertenece a P, entonces B tambin pertenece a NP.

La pregunta P=NP (continuacin)


La pregunta P=NP es una de las ms importantes en el campo de las ciencias de la computacin, debido a las grandes repercusiones que habran, en caso de encontrarse una solucin. Si P=NP, cualquier problema polinmicamente verificable fuera polinmicamente decidible. La mayora de los investigadores creen que estas clases no son iguales, porque se han realizado bastantes esfuerzos para encontrar algoritmos de tiempo polinomial para varios problemas en NP, sin xito. Los investigadores tambin han tratado de probar que las clases son distintas, pero eso conllevara a mostrar que no existe un algoritmo "eficiente" para reemplazar a la bsqueda por fuerza bruta.

Teora de NP-Completitud
Reduccin polinomial Una reduccin es una transformacin de un problema en otro problema. Intuitivamente, un problema Q puede ser reducido a otro problema Q', si cualquier instancia del problema Q puede ser "fcilmente" expresada como una instancia del problema Q', y cuya solucin proporcione una solucin para la instancia de Q.[7] Existen muchos tipos de reducciones: basadas en el mtodo de reduccin, como las reducciones de Cook, las reducciones de Karp y las reducciones de Levin, y las basadas en la cota de la complejidad, como la reduccin en tiempo polinomial o la reduccin de espacio logartmica. Una de las reducciones ms utilizadas es la reduccin en tiempo polinomial, lo cual significa que el proceso de reduccin toma un tiempo polinomial.

Teora de NP-Completitud
Problemas NP-completos Las reducciones en tiempo polinomial nos dotan de elementos para probar, de una manera formal, que un problema es al menos tan difcil que otro, con una diferencia de un factor polinomial. Estas son esenciales para definir a los problemas NP-completos, adems de ayudar a comprender los mismos. La clase de los problemas NP-completos contiene a los problemas ms difciles en NP, en el sentido de que son los que estn ms lejos de estar en P. Debido a que el problema P=NP no ha sido resuelto, el hecho de reducir un problema B, a otro problema A, indicara que no se conoce solucin en tiempo polinomial para A. Esto es debido a que una solucin en tiempo polinomial para A, tendra como consecuencia la existencia de una solucin polinomial para B. De manera similar, debido a que todos los problemas NP pueden ser reducidos a este conjunto, encontrar un problema NP-completo que pueda ser resuelto en un tiempo polinomial significara que P=NP.

Teora de NP-Completitud
En teora de la complejidad computacional, la clase de complejidad NP-completo es el subconjunto de los problemas de decisin en NP tal que todo problema en NP se puede reducir en cada uno de los problemas de NP-completo. Se puede decir que los problemas de NP-completo son los problemas ms difciles de NP y muy probablemente no formen parte de la clase de complejidad P. La razn es que de tenerse una solucin polinmica para un problema NP-completo, todos los problemas de NP tendran tambin una solucin en tiempo polinmico. Si se demostrase que un problema NPcompleto, llammoslo A, no se pudiese resolver en tiempo polinmico, el resto de los problemas NP-completos tampoco se podran resolver en tiempo polinmico. Esto se debe a que si uno de los problemas NP-completos distintos de A, digamos X, se pudiese resolver en tiempo polinmico, entonces A se podra resolver en tiempo polinmico, por definicin de NP-completo. Ahora, pueden existir problemas en NP y que no sean NPcompletos para los cuales exista solucin polinmica an no existiendo solucin para A. Como ejemplo de un problema NP-completo encontramos el problema de la suma de subconjuntos que se puede enunciar como sigue: dado un conjunto S de enteros, existe un subconjunto no vaco de S cuyos elementos sumen cero? Es fcil verificar si una respuesta es correcta, pero no se conoce mejor solucin que explorar todos los 2n-1 subconjuntos posibles hasta encontrar uno que cumpla con la condicin.

Teora de NP-Completitud
Definicin de NP-completo Un problema de decisin C es NP-completo si: 1.- C es un problema NP, y 2.- Todo problema de NP se puede transformar polinmicamente en C.

Como consecuencia de esta definicin, de tenerse un algoritmo en P para C, se tendra una solucin en P para todos los problemas de NP.
Esta definicin fue propuesta por Stephen Cook en 1971. Al principio pareca sorprendente que existieran problemas NP-completos, pero Cook demostr (teorema de Cook) que el problema de satisfacibilidad booleana es NP-completo. Desde entonces se ha demostrado que miles de otros problemas pertenecen a esta clase, casi siempre por reduccin a partir de otros problemas para los que ya se haba demostrado su pertenencia a NP-completo; muchos de esos problemas aparecen en el libro de Garey and Johnson's de 1979 Computers and Intractability: A Guide to NP-completeness. Un problema que satisface la segunda condicin pertenece a la clase NP-hard independientemente de que satisfaga la primera.

Teora de NP-Completitud
Ejemplos de Problemas NP-completo Un problema interesante en teora de grafos es el de isomorfismo de grafos: Dos grafos son isomorfos si se puede transformar uno en el otro simplemente renombrando los vrtices. De los dos problemas siguientes:

1.- Isomorfismo de grafos: Es el grafo G1 isomorfo al grafo G2? 2.- Isomorfismo de subgrafos: Es el grafo G1 isomorfo a un subgrafo del grafo G2?
El problema de isomorfismo de subgrafos es NP-completo. Se sospecha que el problema de isomorfismo de grafos no est ni en P ni en NP-completo, aunque est en NP. Se trata de un problema difcil, pero no tanto como para estar en NPcompleto. La forma ms sencilla de demostrar que un nuevo problema es NP-completo es primero demostrar que est en NP y luego transformar en tiempo polinmico un problema que ya est en NP-completo a ste. Para ello resulta til conocer algunos de los problemas para los que existe prueba de pertenencia a NP-completo.

Teora de NP-Completitud
Ejemplos de Problemas NP-completo Algunos de los ms famosos son: Problema de satisfacibilidad booleana (SAT) Problema de la mochila (knapsack) Problema del ciclo hamiltoniano Problema del vendedor viajero Problema de la clique

Teora de NP-Completitud
Lista de 21 problemas NP-completos de Karp Por Lista de 21 problemas NP-completos de Karp se entiende a una lista de 21 problemas computacionales famosos, que tratan sobre combinatoria y teora de grafos, y que cumplen la caracterstica en comn de que todos ellos pertenecen a la clase de complejidad de los NP-completos. Esta lista fue elaborada en 1972 por el informtico terico Richard Karp, en su trabajo "Reducibility Among Combinatorial Problems" (Reducibilidad entre Problemas Combinatorios),[1] como profundizacin del trabajo de Stephen Cook, quien en 1971 haba demostrado uno de los resultados ms importantes y pioneros de la complejidad computacional: la NP-completitud del Problema de satisfacibilidad booleana.[2] El descubrimiento de Karp de que todos estos importantes problemas eran NPcompletos, motiv el estudio de la NP-completitud y de la indagacin en la famosa pregunta, de si P = NP.

Teora de NP-Completitud : Los problemas


Mientras que la pertenencia del problema SAT o de satisfacibilidad booleana a la clase de los NP-completos fue demostrada utilizando mecanismos particulares, las pertenencias de los 21 problemas siguientes fueron demostradas mediante reducciones polinomiales. As, el problema SAT se redujo polinomialmente a los problemas 0-1 INTEGER PROGRAMMING, CLIQUE y 3-SAT, y estos a su vez se redujeron a otros varios. La lista completa es la que se muestra a continuacin. Las sangras denotan el hecho que la NP-completitud del problema fue demostrada por reduccin polinomial del problema en el nivel directamente superior. Note que los nombres de los problemas estn escritos con letras maysculas y corresponden a abreviaciones del nombre en ingls, como es lo usual; junto a ellos, entre parntesis, se escribe la traduccin del nombre en espaol.

Teora de NP-Completitud : Los problemas


SAT (Problema de satisfacibilidad booleana, para frmulas en forma normal conjuntiva) 0-1 INTEGER PROGRAMMING (Problema de la Programacin lineal entera) CLIQUE (Problema del clique, vase tambin Problema del conjunto independiente) SET PACKING (Problema del empaquetamiento de conjuntos) VERTEX COVER (Problema de la cobertura de vrtices) SET COVERING (Problema del conjunto de cobertura) FEEDBACK NODE SET FEEDBACK ARC SET DIRECTED HAMILTONIAN CIRCUIT (Problema del circuito hamiltoniano dirigido) UNDIRECTED HAMILTONIAN CIRCUIT (Problema del circuito hamiltoniano no dirigido)

Teora de NP-Completitud : Los problemas


SAT (Problema de satisfacibilidad booleana, para frmulas en forma normal conjuntiva) 3-SAT (Problema de satisfacibilidad booleana de 3 variables por clusula) CHROMATIC NUMBER (Problema de la coloracin de grafos) CLIQUE COVER (Problema de la cobertura de cliques) EXACT COVER (Problema de la cobertura exacta) HITTING SET STEINER TREE 3-DIMENSIONAL MATCHING (Problema del matching tridimensional) KNAPSACK (Problema de la mochila) JOB SEQUENCING (Problema de las secuencias de trabajo) PARTITION (Problema de la particin) MAX-CUT (Problema del corte mximo)

Importancia de la NP-Completitud
Quizs la razn de mayor peso por la cual los cientficos de la computacin creen que P es distinto de NP, es la existencia de la clase de problemas "NP-completos". Esta clase tiene la curiosa propiedad de que si algn problema NP-completo puede ser resuelto en tiempo polinomial, entonces todo problema en NP tiene una solucin en tiempo polinomial, es decir, P=NP. A pesar de aos de estudio, ningn algoritmo de tiempo polinomial se ha descubierto para ningn problema NP-completo. Desde el punto de vista terico, un investigador intentando mostrar que la clase P es distinta de la clase NP, pudiera enfocarse en un problema NP-completo. Si algn problema en NP requiere ms que un tiempo polinomial, entonces uno NP-completo tambin. Adems, un investigador intentando demostrar que P=NP, solo necesita encontrar un algoritmo de tiempo polinomial para un problema NP-completo para lograrlo. Desde el punto de vista prctico, el fenmeno de la NP-completitud puede prevenir la prdida de tiempo cuando se busca un algoritmo de tiempo polinomial no existente para resolver un problema determinado. An cuando no se posean los elementos matemticos para demostrar que cierto problema no se puede resolver en tiempo polinomial, creemos que P no es igual a NP, as que demostrar que el problema es NPcompleto, es una fuerte evidencia de su no "polinomialidad".