Beruflich Dokumente
Kultur Dokumente
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.
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.
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.
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.
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".