Está en la página 1de 11

Teora de la complejidad computacional

(Redirigido desde Complejidad computacional)

Este artculo o seccin posee referencias, pero necesita ms para


complementar su verificabilidad.
Puedes colaborar agregando referencias a fuentes fiables como se indica aqu. El
material sin fuentes fiables podra ser cuestionado y eliminado.

La Teora de la Complejidad Computacional es una rama de la teora de la computacinque


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
cmputomatemticos para el estudio de estos problemas y la cuantificacin de la cantidad de
recursos necesarios para resolverlos, como tiempo y memoria.
Uno de los fines 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
lateora de la computabilidad. 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.
ndice
[ocultar]

1 Historia

2 Problemas, algoritmos y complejidad


o

2.1 Problema computacional

2.2 Problemas de decisin

2.3 Algoritmos

2.4 Algoritmos de tiempo polinmico y problemas intratables

3 Clases de complejidad
o

3.1 Definiendo clases de complejidad

3.2 Mquinas de Turing deterministas y la clase P

3.3 Computacin no determinista y la clase NP

3.4 Clases de complejidad importantes

4 La pregunta P=NP

5 NP-Completitud
o

5.1 Reduccin polinomial

5.2 Problemas NP-completos

5.3 Importancia de la NP-Completitud

6 Haciendo frente a problemas NP

7 Vase tambin

8 Referencias
o

8.1 Artculos

8.2 Libros de texto

Historia[editar]
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.
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,
siP=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.
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[editar]


Para poder referirnos a problemas como "inherentemente intratables" y problemas de
dificultad "equivalente", es necesario comprender algunos trminos ms bsicos.

Problema computacional[editar]
Artculo principal: 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:
1. Una descripcin general de todos sus parmetros (pueden ser de entrada o de salida).

2. 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 de decisin[editar]
Artculo principal: Problema 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.

Algoritmos[editar]
Artculo principal: Algoritmo

Podemos decir informalmente, que los algoritmos son procedimientos paso-a-paso 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 [editar]


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[editar]
Artculo principal: Clase de complejidad

Una clase de complejidad es un conjunto de problemas que poseen la misma complejidad


computacional.

Definiendo clases de complejidad[editar]


Las clases de complejidad ms sencillas se definen teniendo en cuenta factores como:

El tipo de problema computacional: Los problemas ms comnmente 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[editar]


Artculo principal: P (clase de complejidad)

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[editar]


Artculo principal: NP (clase de complejidad)

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).
El algoritmo mencionado est compuesto por 2 etapas separadas. Dada una instancia del
problema I, la primera etapa simplemente "adivina" un candidato a solucin S. Entonces, la
etapa de verificacin recibe como entrada a I y a S, y procede a realizar el cmputo de una
manera determinista, finalmente detenindose con la respuesta "s", o con la respuesta "no", o
sigue computando sin detenerse.

Al igual que la clase P, la clase NP es insensible a la eleccin del modelo de cmputo no


determinista, debido a que dichos modelos son equivalentes polinmicamente.

Clases de complejidad importantes[editar]


Muchas clases de complejidad importantes pueden ser definidas acotando el tiempo o el
espacio utilizado por el algoritmo. Algunas de estas clases de problemas de decisin son:

Clase de
complejidad

Modelo de cmputo

Restriccin de
recurso

DTIME(f(n))

Mquina de Turing determinista

Tiempo f(n)

Mquina de Turing determinista

Tiempo poly(n)

EXPTIME

Mquina de Turing determinista

Tiempo 2poly(n)

NTIME(f(n))

Mquina de Turing no determinista Tiempo f(n)

NP

Mquina de Turing no determinista Tiempo poly(n)

NEXPTIME

Mquina de Turing no determinista Tiempo 2poly(n)

DSPACE(f(n))

Mquina de Turing determinista

Espacio f(n)

Mquina de Turing determinista

Espacio O(log n)

PSPACE

Mquina de Turing determinista

Espacio poly(n)

EXPSPACE

Mquina de Turing determinista

Espacio 2poly(n)

NSPACE(f(n))

Mquina de Turing no determinista Espacio f(n)

NL

Mquina de Turing no determinista Espacio O(log n)

NPSPACE

Mquina de Turing no determinista Espacio poly(n)

NEXPSPACE

Mquina de Turing no determinista Espacio 2poly(n)

La pregunta P=NP[editar]
Artculo principal: Clases de complejidad P y NP

La relacin entre las clases P y NP es fundamental para la teora de la NP-completitud.


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 es una de las ms importantes en el campo de las ciencias de la
computacin, debido a las grandes repercusiones que habra, en caso de encontrarse una
solucin. Si P=NP, cualquier problema polinmicamente verificable sera polinmicamente
decidible. La mayora de los investigadores cree que estas clases no son iguales, porque se
ha realizado bastantes esfuerzos, sin xito, para encontrar algoritmos de tiempo polinomial
para varios problemas en NP. 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.

NP-Completitud[editar]
Reduccin polinomial[editar]
Artculo principal: Transformacin polinmica

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.

Problemas NP-completos[editar]
Artculo principal: NP-completo

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.

Importancia de la NP-Completitud[editar]
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 NP-completo, es una fuerte evidencia de su no
"polinomialidad".

Haciendo frente a problemas NP[editar]


Teniendo en cuenta la definicin de problema intratable, si no se cumple que P=NP, entonces
los problemas NP-completos son intratables.
Muchos problemas de la prctica son NP-completos, y son muy importantes como para
desistir simplemente porque no sabemos cmo encontrar una solucin ptima en tiempo
polinomial. An si un problema es NP-completo, pueden haber esperanzas. Existen tres
estrategias fundamentales para lidiar con un problema NP-completo:

Si la entrada es pequea, un algoritmo con tiempo de ejecucin exponencial pudiera


ser perfectamente aceptable.

Se pudieran aislar algunos casos especiales que se pudieran resolver en tiempo


polinomial.

Podramos utilizar aproximaciones para encontrar soluciones lo suficientemente


cercanas al ptimo en tiempo polinomial. En la prctica, obtener soluciones cercanas al
ptimo es bastante aceptable. A estos algoritmos se les denomina algoritmos de
aproximacin, y en muchos casos se apoyan en heursticas y metaheursticas.

Vase tambin[editar]

Reduccin (complejidad)

Teorema de Cook-Levin

Lista de 21 problemas NP-completos de Karp

Clases de complejidad P y NP

Teorema de la jerarqua temporal

Computacin cuntica

Referencias[editar]
1.

Volver arriba Richard M. Karp, "Combinatorics, Complexity, and Randomness", 1985


Turing Award Lecture.

2.

Volver arriba Richard M. Karp (1972), Reducibility Among Combinatorial Problems,


en R. E. Miller and J. W. Thatcher (editors), Complexity of Computer Computations, New York:
Plenum, pp. 85103.

3.

Volver arriba Garey, Michael R., Johnson David S., (1979), Computers and
Intractability: A Guide to the Theory of NP-Completeness, W. H. Freeman, (page 4).

4.

Volver arriba Garey, Michael R., Johnson David S., (1979), Computers and
Intractability: A Guide to the Theory of NP-Completeness, W. H. Freeman, (page 8).

5.

Volver arriba Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. & Stein,
Clifford, (2010),Introduction to Algorithms, 3. edicin, MIT Press and McGraw-Hill, (page 1049).

6.

Volver arriba Garey, Michael R., Johnson David S., (1979), Computers and
Intractability: A Guide to the Theory of NP-Completeness, W. H. Freeman, (page 28).

7.

Volver arriba Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L. & Stein,
Clifford, (2010),Introduction to Algorithms, 3. edicin, MIT Press and McGraw-Hill, (page 1067).