17
Teoría de Complejidad Computacional (TCC) JAVIER GONZALEZ 15-0532 YARED REDMAN 14-0620

Teoría de complejidad computacional (tcc).pptx

Embed Size (px)

Citation preview

Teoría de Complejidad Computacional (TCC)JAVIER GONZALEZ 15-0532YARED REDMAN 14-0620

Objetivos

• Comprender el concepto de TCC.

• Encontrar su relacion con los lenguajes formales y automatas.

• Analizar complejidades para desarrollar algoritmos efectivos.

Definición de TCC• Es una rama de la teoría de la computación que se centra en la

clasificación de los problemas computacionales de acuerdo a su dificultad inherente, y en la relación entre dichas clases de complejidad.

• La teoría 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 imposición de restricciones sobre estos recursos, es lo que la distingue de la teoría de la computabilidad, la cual se preocupa por qué tipo de problemas pueden ser resueltos de manera algorítmica.

Relacion de las TCC con la TAYLF

¿Cuáles son las capacidades y limitaciones de los ordenadores?

Para ello se vale de otras teorías como teoría de autómatas, teoría de computabilidad y teoría de complejidad computacional.

Esto ayuda bastante a la hora de desarrollar algoritmos para facilitar el manejo de un ordenador y tambien para crear teorias que mejoren las tareas que deben de manejar.

Inicios de la teoria de computabilidad

La historia de la teoría computacional comienza con uno de los aportes más influyentes como lo fueron las Máquinas de Turing en 1936, las cuales resultaron ser una noción de computadora muy flexible y robusta.

En los inicios, los investigadores trataban de entender las nuevas medidas de complejidad, y cómo se relacionaban unas con otras. En 1965, Edmonds definió un algoritmo en el cual un polinomio acotaba el tiempo de ejecución (viniendo de ahi lo que se conoce como tiempo polinomico).

Creacion de conceptos

Uno de los conceptos más importantes de la teoría de la complejidad computacional:

La NP-completitud y su pregunta fundamental, si ¿P=NP? lo que en palabras simples se pregunta si acaso es posible “verificar” rápidamente soluciones positivas a un problema del tipo SI/NO.

Y de ser afirmativa la respuesta ¿es que entonces también se pueden “obtener” las respuestas rápidamente?

Analizar el problema

El objetivo principal de esta teoría es la creación de mecanismos y herramientas capaces de describir y analizar la complejidad de un algoritmo y la complejidad intrínseca de un problema. En otras palabras, busca la respuesta a ¿Qué hace a algunos problemas computacionalmente difíciles y a otros sencillos?Para ello, considera los 2 tipos de recursos requeridos durante el cómputo para resolver un problema: tiempo y espacio.

Complejidad espacial

• Complejidad Espacial: Memoria que utiliza un programa para su ejecución, La eficiencia en memoria de un algoritmo indica la cantidad de espacio requerido para ejecutar el algoritmo; es decir, el espacio en memoria que ocupan todas las variables propias al algoritmo.

• Para calcular la memoria estática de un algoritmo se suma la memoria que ocupan las variables declaradas en el algoritmo. Para el caso de la memoria dinámica, el cálculo no es tan simple ya que, este depende de cada ejecución del algoritmo.

Complejidad Temporal

• Complejidad Temporal o Tiempo de ejecución: Tiempo de cómputo necesario para ejecutar algún programa.

Este análisis se basa en las Complejidades Temporales, con este fin, para cada problema determinaremos una medida N, que llamaremos tamaño de la entrada o número de datos a procesar por el programa, intentaremos hallar respuestas en función de dicha N.

Ejemplo:

• S1;for(x = 0; x < N; x++)• S2;Demanda: T(N) = t1 + t2 * N• Donde t1 es el tiempo que lleva ejecutar la serie

S1 de sentencias, y t2 es el que lleva la serie S2.

Clases de complejidad

Clase L: Es el conjunto de los problemas de decisión que pueden ser resueltos en espacio log(n) (sin contar el tamaño de la entrada), donde n es el tamaño de la entrada, por una máquina de Turing determinista tal que la solución si existe es única.

Clase NL: La clase de complejidad NL (espacio logarítmico no determinista) es el conjunto de los problemas de decisión que pueden ser resueltos en espacio log(n) (sin contar el tamaño de la entrada), donde n es el tamaño de la entrada, por una máquina de Turing no determinista tal que la solución si existe es única.

Clases de complejidad

Clase P: Son todos aquellos problemas de decisión que pueden ser resueltos en una máquina determinista secuencial en un período de tiempo polinómico en proporción a los datos de entrada.

Clase NP: Es el conjunto de problemas que pueden ser resueltos en tiempo polinómico por una máquina de Turing no determinista. La importancia de esta clase de problemas de decisión es que contiene muchos problemas de búsqueda y de optimización para los que se desea saber si existe una cierta solución o si existe una mejor solución que las conocidas. Un ejemplo es el clásico problema del viajante.

Ejemplo: Problema del Viajante

Dada una lista de ciudades y las distancias entre cada par de ellas, ¿cuál es la ruta más corta posible que visita cada ciudad exactamente una vez y regresa a la ciudad origen? Este es un problema NP-duro dentro en la optimización combinatoria, muy importante en la investigación de operaciones y en la ciencia de la computación.

Descripcion del problema

En el problema se presentan N! rutas posibles, aunque se puede simplificar ya que dada una ruta nos da igual el punto de partida y esto reduce el número de rutas a examinar en un factor N quedando (N-1)!. Como no importa la dirección en que se desplace el viajante, el número de rutas a examinar se reduce nuevamente en un factor 2. Por lo tanto, hay que considerar (N-1)!/2 rutas posibles.

Desarrollo del problema

En la práctica, para un problema del viajante con 5 ciudades hay 12 rutas diferentes y no necesitamos un ordenador para encontrar la mejor ruta, pero apenas aumentamos el número de ciudades las posibilidades crece exponencialmente (en realidad, factorialmente):

- Para 10 ciudades hay 181.440 rutas diferentes- Para 30 ciudades hay más de 4·10^31 rutas posibles.

Conclusion del problema

Un ordenador que calcule un millón de rutas por segundo necesitaría 10^18 años para resolverlo. Dicho de otra forma, si se hubiera comenzado a calcular al comienzo de la creación del universo (hace unos 13.400 millones de años) todavía no se habría terminado.

Puede comprobarse que por cada ciudad nueva que incorporemos, el número de rutas se multiplica por el factor N y crece exponencialmente (factorialmente). Por ello el problema pertenece a la clase de problemas NP-completos.

Referencias

• http://www.monografias.com/trabajos27/complejidad-algoritmica/complejidad-algoritmica.shtml

• https://es.wikipedia.org/wiki/Teor%C3%ADa_de_la_complejidad_computacional

• https://es.wikipedia.org/wiki/Problema_del_viajante

• https://prezi.com/2plomktu5bfa/teoria-computacional/

• https://frikosfera.wordpress.com/2015/03/13/la-teoria-de-la-complejidad-computacional-en-palabras-no-tan-complejas/