2. Objetivos
• Comprender el concepto de TCC.
• Encontrar su relacion con los lenguajes formales y automatas.
• Analizar complejidades para desarrollar algoritmos efectivos.
3. 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.
4. 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.
5. 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).
6. 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?
7. 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.
8. 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.
9. 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.
10. 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.
11. 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.
12. 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.
13. 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.
14. 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.
15. 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.
16. 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.