Upload
mortimer-echavarria
View
131
Download
2
Embed Size (px)
DESCRIPTION
Artículo acerca de la teoria de complejidad y las clases de problemas decidibles: P, NP, centrandose en NP-Completo.
Citation preview
Completitud NP Teoría de la complejidad Computacional y Clases de Problemas computables
2014
Anaitis Garcia 13-1009 Mortimer Echavarria 13-1001
2/24/2014
Universidad Iberoamericana
Mortimer Echavarría Mariñez 13-1001
Anaitis Cabrera García 13-1009
Lenguajes Formales y Estructura de Autómatas.
Profesor: Doc. Ing. Rina Familia
Articulo Científico: Completitud NP
24/02/2014
Santo Domingo, R.D
Resumen Ejecutivo
La teoría de la complejidad computacional estudia cuales recursos son
requeridos para resolver un problema como son el tiempo y el espacio. Por otro y lado
la teoría de la computabilidad se interesa en expresar los problemas como procesos
algorítmicos sin tener en cuenta cuales recursos son necesarios para resolver el
problema dado.
Los problemas de decisión pueden ser clasificados en conjuntos de complejidad
comparable los cuales son llamados clases de complejidad. Entre estas podemos
mencionar: L, NL, P, P-Completo, NP, NP-Completo, NP-Duro.
La clase de complejidad P es el conjunto de problemas de decisión que pueden
ser resueltos en una maquina determinista en tiempo polinomio lo cual responde por
instinto a problemas que puedan ser resueltos en el peor de sus casos.
Un algoritmo de tiempo polinomial tiene una complejidad tal que para el tamaño
de la entrada del problema existe un polinomio capaz de resolverlo. Esto quiere decir
que si por ejemplo, a un viajero le toma 10 minutos hacer un viaje de una ciudad a otra
en un recorrido de 10 ciudades, para 20 ciudades le tomara 20 minutos, para 30
ciudades 30 minutos, etc.
La clase de complejidad NP es el conjunto de los problemas de decisión que
pueden ser resueltos por una maquina no determinista en tiempo polinomio. En esta
clase se encuentran muchos problemas que se desean resolver en la práctica lo cual
incluye el problema de factibilidad booleana y el problema del viajante, el camino
hamiltoniano para recorrer todos los vértices una sola vez. La pregunta P=NP, la cual
busca responder si P y NP son iguales motivan la introducción de conceptos de “duro”
y “Completo” , así como también el concepto de intratabilidad que define los problemas
que pueden ser resueltos en teoría pero no en la práctica.
Introducción
En nuestra vida cotidiana cuando se observa un problema buscamos una
solución a través de un método. Este método normalmente se documenta para posibles
problemas futuros que puedan aparecer y/o evolucionar. En informática tenemos dos
componentes esenciales para la resolución de un problema: Primero está el algoritmo,
la base, el conjunto de métodos y/o pasos para resolver el problema y en segundo
lugar está el programa, el elemento codificado que se encuentra en el computador en el
cual esta expresado el algoritmo. Dichos componentes son muy importantes, pero se
debe destacar la importancia del algoritmo, pues este es lo que mueve el programa.
De forma práctica, estos programas que ejecutamos consumen recursos físicos,
esencialmente tiempo y espacio, por ello debemos tomar en cuenta la eficiencia del
algoritmo empleado, cual es el mejor camino hacia la solución? Es efectivo? Ocupa
mucho espacio? Más adelante se responderán preguntas acerca de este tema, que
más bien se refiere a una rama de la computación: La teoría de la complejidad
computacional.
Un problema de complejidad computacional tiene un tamaño X por la cantidad
de datos, esta incógnita puede tener un nivel de complejidad para resolverse
dependiendo la cantidad de datos que se tengan a mano. Pero, cabe destacar que no
todos los problemas tienen una solución posible o no todos tienen una solución óptima,
para entender esto, se estudiaran los conceptos de teoría de complejidad y sus clases,
tales como P, NP, etc.
Teoría de la Computación (Computabilidad)
La ciencia de la computación es el cuerpo sistematizado del conocimiento
relativo al cálculo. Sus principios base se remontan al diseño de algoritmos realizados
por Euclides, al uso de la complejidad asintótica, y a la deducibilidad por parte de los
antiguos babilonios.
La ciencia de la computación descansa sobre dos pilares fundamentales: Los
criterios fundamentales subyacentes al cálculo que dieron como resultado la existencia
de funciones probablemente no calculables o computables, en segundo lugar están, las
técnicas de ingeniería para la creación de sistemas de computación basados en
técnicas de diseño de algoritmos.
Brookshear (1993) dice que:
“un proceso computacional también llamado proceso algorítmico o algoritmo, es vital para la ciencia de la computación, puesto que un programa o computador no puede ejecutar un problema que no tenga una solución algorítmica. Así, cualquier limitación de las capacidades de los procesos computacionales constituye también una limitación de las capacidades la computadora.”
Según Grimaldi (1997):
“evaluar cuán eficiente es un algoritmo, tiene mucho que evaluar la complejidad intrínseca del mismo. En 1935, el matemático y lógico inglés Alan Mathison Turing (1912- 1954 ) se interesó en el problema de decisión de Hilbert, el cual preguntaba si podía existir un método general aplicable a cualquier enunciado, para poder determinar si este es verdadero. El enfoque de Turing lo llevó a plantear lo que hoy en día se conoce como la máquina de Turing.”
El tema de computabilidad tiene mucho que ver con la búsqueda de estructuras
que son necesarias en un lenguaje de programación, de tal forma que se asegure que
un lenguaje escrito en un lenguaje de programación X, pueda resolver cualquier
problema que tenga solución algorítmica.
Teoría de complejidad computacional
Es la rama de la ciencias de la computación ( Teoría de la computación) la cual
estudia de manera teórica, la complejidad inherente a la resolución de un problema
computable, así como, la optimización de recursos requeridos durante la ejecución de
un algoritmo para resolver un problema.
Dicho de manera simple, estudia los recursos que necesita utilizar un
computador para el cálculo de la solución de un problema.
Un cálculo resulta complejo si es difícil de realizar, en base a esto podemos
definir la complejidad de un problema X como la cantidad de recursos que se necesitan
para resolver dicho problema. Así, un cálculo difícil requerirá más recursos que una de
menor de dificultad menor.
Comúnmente, el análisis se basa en dos aspectos:
1) Tiempo: Se utiliza una aproximación al número y al tipo de pasos que ejecuta un
algoritmo X para resolver un problema computable.
2) Memoria: Un estimado de la cantidad de memoria utilizada para resolver un
problema computable.
Estos no son los únicos aspectos que pueden ser tomados en cuenta, se
pueden analizar de igual forma otros parámetros, como por ejemplo la cantidad de
procesadores necesarios para resolver el problema de forma eficiente (Procesamiento
en paralelo).
Un algoritmo que resuelve un problema pero que tarda mucho en hacerlo,
difícilmente será de mucha utilidad. Igualmente un algoritmo que necesite un gigabyte
de memoria para ser ejecutado, probablemente no será utilizado, a pesar de que
resuelve el problema.
Es importante resaltar que la teoría de la complejidad computacional, difiere de
la teoría de la computación en que esta nos proporciona información acerca de los
límites de la resolución algorítmica de los problema, introduciendo el concepto de
“computar” para mostrar que problemas son decidibles con distintos tipos de maquinas,
y diferentes modelos computacionales formales, mientras que la primera nos
proporciona estrategias de la medida de complejidad de cada proceso algorítmico
necesario para resolver un problema computable.
La teoría de la complejidad computacional responde a la siguiente pregunta:
Que hace a algunos problemas computacionalmente difíciles (o extremadamente
difíciles) y a otros problemas sencillos?
De tal suerte que esta teoría tiene como finalidad proporcionar mecanismos y
herramientas capaces de describir y analizar la complejidad innata de un algoritmo y la
complejidad intrínseca de un problema computable.
La complejidad intrínseca de un algoritmo, puede ser expresada como una
función del tamaño de la entrada del problema N.
Esto muestra la razón de crecimiento de los recursos con respecto a N:
● Razón del tiempo de ejecución temporal (Temporal) : T (n)
● Razón del espacio de almacenamiento requerido (Espacial) : S (n).
Si un cálculo requiere más tiempo que otro decimos que es más complejo y lo
llamamos complejidad temporal. Si un cálculo, por otro lado, requiere más espacio de
almacenamiento que otro problema, entonces decimos que es más complejo, pero esta
vez hablamos de complejidad espacial.
Es muy obvio, que el tiempo que se requiere para efectuar un cálculo en un
computador moderno es menor que el que se necesitaba para hacer el mismo en un
computador de años atrás, y es seguro que el tiempo para realizarlo en una máquina
de las próximas generaciones será menor.
Clases de problemas
El estudio de los problemas computacionales conduce a la clasificación de los
problemas en dos grandes clases: los problemas con solución y los problemas sin
solución. Los problemas solucionables, requieren una cantidad considerable de
recursos como memoria y espacio de almacenamiento. El análisis requerido para
estimar cual es el uso de recursos de un algoritmo es una cuestión teórica y necesita
un marco formal.
Los problemas cuya solución es una solución con orden de complejidad lineal
son problemas que son resueltos en un tiempo que está relacionado linealmente con su
tamaño. Hoy día, la gran mayoría de algoritmos que son resueltos por las maquinas
tienen como máximo o límite una complejidad o costo computacional polinómico, lo
cual expresa que la relación entre el tiempo de ejecución y el tamaño del problema es
polinómica. Estos son los problemas agrupados en la clase P (Polynomial-Time).
Se considera que un problema es P cuando este se puede resolver en tiempo
“polinomial” o sea cuando existe un algoritmo con una fórmula de base polinómica que
lo pueda resolver.
La clase P clasifica los problemas de decisión que una MT Determinista puede
resolver en un tiempo polinómico.
• Los problemas de complejidad polinómica son tratables, es decir en la practica se
pueden resolverse en tiempo razonable.
• La mayoría de los problemas corrientes (ordenación, búsqueda...) pertenecen a esta
clase.
Problemas para los cuales se ha encontrado algoritmos polinomiales.
Ordenamiento, búsqueda, caminos más cortos, componentes fuertes.
Circuito Euleriano
Multiplicación de Matrices.
Los problemas cuya relación entre el tiempo de ejecución y el tamaño del problema
no es polinomial, cuyo costo computacional no es polinomial están agrupados en la
clase NP (Non-Deterministic Polynomial-time). Esta clase contiene aquellos
problemas de decisión que una MT No Determinista puede resolver en Tiempo
polinómico. NP es la clase de todos los problemas decidibles en tiempo polinómico
indeterminista.
Estos problemas no tienen solución algorítmica, lo que quiere decir, que una
máquina no los puede resolver en un tiempo razonable.
Existe una escala para medir la complejidad, la que incluye entre otros:
P = Resoluble en tiempo polinómico.
P-Completo = Los mas difíciles de resolver en P.
NP = Problemas con respuestas positivas verificables en tiempo polinómico.
NP-Completo = Los problemas mas difíciles de resolver en NP.
Muchas de estas clases, tienen una co-clase, la cual contiene los problemas
complementarios a los de la clase original. Por ejemplo si X esta en NP, el
complemento de X esta en co-NP. Sin embargo es importante señalar que no debe
entenderse que NP y co-NP sean complementarios, ya que existen problemas que
pertenecen a ambas clases y otros que no están en ninguna de las dos clases.
Los problemas computacionales desde el punto de vista de la decisión se divide
en dos criterios.
Según la teoría de la computabilidad estos pueden ser:
-Decidible
-Parcialmente decidible
-No decidible
Según la teoría de la complejidad:
-L
-NL
-P
-P-Completo
-NP
-NP-Completo
-NP-Duro
Es necesario comprender el modelo teórico de las maquinas de Turing, para poder
obtener una clara comprensión de la clasificación de los problemas computacionales de
acuerdo a la teoría de la complejidad.
MT Determinista (Para cada par (estado, símbolo), existe como máximo una
transición a otro estado).
MT No Determinista (Existe al menos un par (estado, símbolo), con más de una
transición a estados diferentes).
En este artículo nos enfocaremos principalmente en los problemas NP-Completos.
Los problemas NP parecen intratables, un problema se dice si no se ha podido
descubrir un algoritmo de tiempo polinomial capaz de resolver el problema. Los
problemas que pueden ser resueltos en teoría pero no en la práctica, ser llaman
intratables.
Sin embargo nadie ha sabido demostrar que los NP son intratables.
Los problemas NP-Completos son todos equivalentes; lo cual quiere decir que si
se encuentra un algoritmo eficiente capaz de resolver un NP-Completo entonces
tendremos un algoritmo capaz de resolverlos eficientemente a todos.
Ahora bien si probamos que para “ NP- completo X ” no existe ningún algoritmo
eficiente entonces ningún problema de la clase NP lo tendrá, por eso decimos que los
problemas NP-Completos son equivalentes.
Podemos decir que los problemas NP, para
ser NP deben ser reducibles, es decir todos los
problemas NP pueden ser reducidos a un solo
problema NP en tiempo polinómico.
(Reducir es una manera de convertir un
problema en otro de tal manera que la solución al
segundo problema puede ser utilizada para
resolver el primer problema)
La pregunta P = NP
El saber si las clases P y NP son iguales es uno de los más importantes
problemas abiertos en las ciencias de la Computación Teórica.
Esta pregunta motivo la introducción de conceptos como difícil (Hard ) y
Completo.
Un conjunto dado de problemas X es hard con respecto a un conjunto de
problemas Y (‘Y’ pertenecientes a NP) Si X >Y o X = , es decir Y puede ser escrito
como un conjunto de soluciones de los problemas X. Simplemente, Y es más “sencillo
que X”. Aquí, el término sencillo es definido en cada caso particular. El conjunto hard
más importante es NP-hard. El conjunto X es completo para Y si es hard para y es
también un subconjunto de Y. El conjunto completo más importante es NP-Completo.
Ejemplos de Problemas NP Completos
A. El problema del viajante del comercio
B. El problema de hacer cierto un circuito booleano (Circuito SAT)
C. Asignación de procesadores (multiprocessor scheduling )
El problema del viajante
El problema del viajante es un problema clásico de los problemas NP-Completos
desde el punto de vista de la decisión y es NP-Duro desde el punto de vista de la
optimización, también llamado TSP por sus siglas en ingles “Travelling Salesman
Problem”.
Un viajero tiene una lista de ciudades, cada punto de ciudad a ciudad tiene su
propia distancia, ¿Cuál es el camino más corto para visitar cada ciudad una sola vez y
volver a la ciudad de inicio?
Como NP-Completo se ve de esta forma:
Se tiene un grafo con una distancia L, se debe concluir cuál es el grafo con
menos distancia hacia L.
Dados:
n el número de ciudades,
la matriz de distancias d(i, j) para 1<=i, j < = n, una longitud máxima k
¿Existe un camino que pasa por todas las ciudades con longitud como máximo k?
Circuito SAT
Dado: un circuito booleano con una única puerta de salida.
¿Existe una asignación de valores a las entradas para que la salida es “1”?
Asignación de procesadores (multiprocessor scheduling)
Dadas: N el número de tareas,
M número de procesadores
Dur (i) la duración de la tarea I (i<=n)
T tiempo máximo (deadline)
¿Existe una asignación de las tareas a los procesadores sin solapes y cumpliendo el
deadline?
Problema del clique
Este problema NP-Completo consiste en buscar sub-grafos completos dentro de
un grafo dado. Un subgrafo completo es aquel que tiene un conjunto de vertices
adyacentes de dos en dos.
En la imagen anterior podemos ver un ejemplo de clique. Los vértices 3, 4, 5 hacen un
clique ya que 4 y 3 forman un camino adyacente. Pero 1, 5, 6 no hacen clique porque 5
y 6 no son adyacentes.
El problema viene cuando tenemos una gran cantidad de vértices, para poder
determinar por decisión una ruta especificada de cliques.
Pongamos un ejemplo de la vida real, tenemos una red de computadoras a través de
internet, inmensa, de millones de ordenadores, necesitamos determinar la subred más
grande entre esta red, con subred nos referimos a una red con computadores que se
conocen entre ellos.
Tomaría demasiado tiempo determinar esto buscando por fuerza bruta entre cada
subred que existe en internet, realmente tomaría tiempo exponencial “EXP” y por ello
es un problema NP-Completo.
Problemas que se han probado ser intratables
Problemas no decidibles: Problema Halting.
Todos los circuitos amiltonianos de una gráfica
Problemas cuya intratabilidad no se ha probado.
Pero para los cuales tampoco se conoce un algoritmo de tiempo polinomial.
Circuito Hamiltoniano, TSP
Knapsack
Satisfactibilidad
Cliqué
Calendarización Optima (Job Scheduling)
Cubierta Mínima
Corte Máximo.
Conclusión
En conclusión la teoría de la complejidad busca abstraer los detalles de los sistemas
computacionales y encontrar un algoritmo para realizar cálculos sin tener que
preocuparse por los detalles de implantación; siendo así decimos que la función es de
carácter computable o calculable.
La clase NP se caracteriza por el hecho curioso de que aún no se ha encontrado un
algoritmo polinomio que pueda comprobar si una solución posible es válida o no, lo cual
lleva a métodos de resolución no deterministas que son aplicados a métodos de
investigación que brindan soluciones hipotéticas que son desestimadas o aceptadas a
ritmo polinomio como señalamos anteriormente los problemas de esta clase se
denominan NP, la N de No determinista y la P de Polinomio.
Los problemas NP-Completos presentan una gran variedad de problemas, algunos de
ellos tienen una complejidad extrema. Estos problemas NP se encuentran en la frontera
de la clase NP porque son los más difíciles de la clase NP. Lo interesante de estos
problemas es que son equivalentes en el sentido de que si se descubre una solución P
para un problema NP-Completo podríamos aplicar esta solución a todos los problemas
NP con lo cual desaparecería la clase NP-Completo del mundo científico ya que se
carecería de problemas de este tipo.