Está en la página 1de 71

INTELIGENCIA ARTIFICIAL

Complejidad Computacional

Mg. Samuel Oporto Daz

Mapa Conceptual del Curso


Conocimiento Agentes de Bsqueda

Sistemas Inteligentes

Agentes

Diseo de Agentes

Agentes Mviles

Complejidad

Otros tipos de agentes

2 /60

COMPLEJIDAD ALGORITMICA

3 /60

Algoritmo
Un algoritmo es un procedimiento computacional bien definido, que toma un conjunto de valores de entrada y produce valores de salida. Tambin podemos ver a un algoritmo como una herramienta para resolver un problema computacional especfico.

4 /60

Complejidad
La complejidad de un algoritmo es una medida de la cantidad de recursos que consume. Recurso: Tiempo Espacio Memoria Disco

5 /60

Complejidad de Algoritmos
La Eficiencia nos la da el Anlisis de Algoritmos:
Dimensin Temporal: Medida del tiempo empleado. Dimensin Espacial: medida de los recursos invertidos.

Encontrar Algoritmos eficientes puede definir si Existe o no una Solucin al Problema. Al Anlisis de Algoritmos se centra en el estudio de los Bucles, del cual en ltima instancia, dependern las instrucciones a ser ejecutadas. No se puede realizar un anlisis del nmero de Instrucciones pues son dependientes de las tecnologas (RISK, CISC). Eficiencia = F(n) siendo n la cantidad de elementos a ser procesados
6 /60

Utilidad del Anlisis


Cuando desarrollamos un algoritmo nos interesados en: Tener un idea qu tan bien puede esperarse que trabaje Cmo se comparara con el desempeo de otros algoritmos en el mismo problema. El anlisis de un algoritmo nos puede ayudar comprenderlo mejor, y nos puede sugerir mejoras. a

Entre ms complicado sea un algoritmo, ms complicado es su anlisis.

7 /60

Ejemplo 1
Calcular la complejidad de un algoritmo para encontrar el mayor valor en un arreglo de tamao N.
public class buscador { public static int busca_max(int L[]) { int Max = L[0]; for (int i = 1; i < L.length; i++) { if (L[i] > Max) { Max = L[i]; } } return Max; } public static void main(String[] args) { int L[] = { 3, 6, 1, 8, 4, 2, 8, 4, 9, 23, 5, 3 }; int Max; Max = busca_max(L); System.out.println(Max); } } 8 /60

Ejemplo 1
En el mejor de los casos

En el caso promedio

En el peor de los casos

9 /60

Complejidad
Qu medimos?: Tiempo de ejecucin De qu depende?: Tamao de la entrada Otros factores (HW y SW) Velocidad de la mquina Calidad del compilador Calidad del programa

Cmo medirlo?: Experimentalmente Estimndolo matemticamente


10 /60

Medicin de la Eficiencia
Una buena estimacin de la Eficiencia debe ser independiente de aspectos de implementacin (la plataforma y el Lenguaje con que se codificar) pero debe reflejar sus diferencias. Usamos el Orden de Magnitud de la Eficiencia del Tiempo y de los Recursos. Se lo complementa con la Tasa de crecimiento del programa para evaluar su comportamiento a Futuro.

11 /60

1. Medicin Experimental
Midiendo el tiempo de ejecucin en funcin del tamao de la entrada No podemos probar con todas las entradas Es necesario implementar el algoritmo Depende del software y el hardware Busquemos otra medida Ms abstracta Ms fcil de obtener

12 /60

Medicin de la Eficiencia
Cmo comparar la Eficiencia Real de 2 Algoritmos?

Programndolos, implementndolos y midiendo para el mismo Lote de Prueba: el tiempo de ejecucin y los recursos utilizados. Suele ser caro, y una vez realizado no suele ser sencillo volver atrs y corregir

13 /60

2. Estimacin Matemtica
Asociamos a cada algoritmo una funcin f(n) Emplearemos el caso peor para caracterizar el tiempo de ejecucin Es ms fcil de calcular Interesa la velocidad de crecimiento del tiempo de ejecucin en funcin del tamao de la entrada Comportamiento asinttico Asociamos a cada operacin primitiva un tiempo de ejecucin constante:
Asignacin Operacin aritmtica Seguir una referencia Etc. - Llamada a mtodo - Indexacin en array - Volver de un mtodo

14 /60

Ejemplo 2
Calcular la complejidad de un algoritmo para calcular el factorial de un nmero n.
public static int iterative(int n) { int fact = 1; for (int i = 1; i <= n; i++) fact *= i; return fact; }

15 /60

Ejemplo 3
Calcular la complejidad de un algoritmo para calcular la serie de fibonacci
public class fibonacci { public static long fibonacci_multiple(long N) { if (N <= 1) return 1; else return fibonacci_multiple(N - 1) + fibonacci_multiple(N - 2); }
} public static void main(String[] args) { long F1; F1 = fibonacci_multiple(10); System.out.println(F1); } }
16 /60

Ejemplo 3

17 /60

Ejemplo 3
f(n)= 1+f(n-1)+ f(n-2) n 2 Puede observarse que f(n) es una funcin creciente a partir de n 2 y entonces, para esos valores, se satisface: f(n)= 1+f(n-1)+ f(n-2) > 2 f(n-2)

y aplicando esta misma propiedad a f(n-2) y sucesivos f(n-i) deberamos tener que:
f(n) >22f(n-4) > 222f(n-6)>...> 2 i f(n-2i) > 2 [n/2] por induccin n, f(n) > 2 [n/2] para todo n 2.

18 /60

Tiempo de clculo
Asumiendo que cada trmino se puede calcular en 1 nano segundo (10-9 segundos)

19 /60

Ejemplo 4
Calcular la complejidad de un algoritmo para calcular la serie de fibonacci
public class fibonacci { public static long fibonacci_iterativo(long N) { if (N <= 1) { return 1; } else { int n0 = 1, n1 = 1, n2 = 0; for (int i = 1; i < N; i++) { n2 = n1 + n0; n0 = n1; n1 = n2; } return n2; } } public static void main(String[] args) { long F2; F2 = fibonacci_iterativo(10); System.out.println(F2); } }
20 /60

Ejemplo 5

21 /60

Ejemplo 5

22 /60

Ejemplo 5

23 /60

Ejemplo 5

24 /60

COMPLEJIDAD ASINTOTICA

25 /60

Complejidad asinttica
Cuando se hace el anlisis terico de algoritmos es comn calcular su complejidad en un sentido asinttico, es decir, para una tamao de entrada suficientemente grande. Las estimaciones asintticas se utilizan porque diferentes implementaciones del mismo algoritmo no tienen porque tener la misma eficiencia.

26 /60

Complejidad asinttica
En el caso de la bsqueda binaria, el algoritmo se ejecuta en una cantidad de pasos proporcional a un logaritmo, en O(log(n)), coloquialmente "en tiempo logartmico". La eficiencia de dos implementaciones "razonables" cualesquiera de un algoritmo dado estn relacionadas por una constante multiplicativa llamada constante oculta.

27 /60

Complejidad Asinttica

28 /60

Complejidad Asinttica
Para un n suficientemente grande, el valor de la funcin est completamente determinado por su trmino dominante. El valor del coeficiente del trmino dominante no se conserva al cambiar de mquina. Los valores pequeos de n generalmente no son importantes.

29 /60

Ejemplos

30 /60

Tamao mximo de un problema

Suponernos que cada operacin puede realizarse en 1 s.

31 /60

Limitaciones del anlisis asinttico


No es apropiado para pequeas cantidades de datos.

El coeficiente del trmino dominante puede intervenir cuando un algoritmo es suficientemente complejo A veces el anlisis asinttico es una sobreestimacin.
La cota de tiempo de ejecucin en el caso promedio puede ser significativamente menor que la cota en el caso peor El caso peor es en ocasiones poco representativo por lo que puede ser ignorado
32 /60

ORDEN DE MAGNITUD

33 /60

Eficiencia (Ordenes de Magnitud)


Bucles Lineales: E = F(n)= n Bucles logartmicos: avance i*=a E = F(n)= Log2 n E = F(n)= Loga n
i=0 Mientras i<n Cdigo i++ Fin M

i=1 Mientras i<n Cdigo i*=2 Fin M

Bucles Anidados: para y bucles de n iteraciones c/u E = F(n)= n1*n2*..ny= ny Recursividad: se invoca K veces a si mismo con un lote inicial n E = F(n)= kn
34 /60

Logaritmos
Notacin: log n = log 2 n ln n = log e n Propiedades: a = b log b a, log c (ab) = log ca + log c b log b a n = n log b a log b a = log c a / log c b,

log b (1/a) = - log b a,


log b a = 1 / log a b,

a log b n = n log b a

35 /60

Notacin O()
7n-3 es O(n)
c=7, n0=1 7n-3 7n

log n O(na), a > 0

nk O(c n), c > 1

20n3 + 10N log(n) +5 es O(n3) 3log(n) + Iog(log(n)) es O(log(n)) 2100 es O(1) 5/n es O(1/n)

36 /60

Ejercicio 6
Ordenar las siguientes funciones con respecto de su orden de crecimiento. log n 4 log n 2n 22 1/n (3/2) n

37 /60

Ejercicio 7
Ordenar las siguientes funciones con respecto de su orden de crecimiento.

2 (log n)/2
en (3/2) n 2n

log( log n)
n! 2 log n 22

n
n log(log n) n2 4 log n

n3
n log n n 2n (n+1) !

n 1/log n

(log n)

log n

2 2n +1

38 /60

Orden de magnitud de un algoritmo


Tiempos ms comunes de los algoritmos: O(1) < O(log n) < O(n) < O(n log n) < O(n2) < O(n3) < O(2n)

39 /60

CLASES DE PROBLEMAS

40 /60

Problema de Decisin
Problema de decisin Leng. recursivo enumerable Problema decible ESPACIOP Co-NP BQP P NC P-completo NP NP-completo Problema indecible

41 /60

Clases de Problemas

Problemas decibles

Problemas indecibles

42 /60

Problema de Decisin
Es un conjunto de frases de longitud finita que tienen asociadas frases resultantes tambin de longitud finita. Un problema de decisin es un problema en donde las respuestas posibles son SI o NO. Un problema de decisin tambin se puede formalizar como el problema de decidir si una cierta frase pertenece a un conjunto dado de frases, tambin llamado lenguaje formal. El conjunto contiene exactamente las frases para las cuales la respuesta a la pregunta es positiva. Cierto nmero entero es primo? Una instancia de este problema sera: 17 es primo?.
43 /60

Ejemplo de problemas
Las frases sobre el alfabeto {a, b} que contienen alternadas las letras a y b. Las frases sobre el alfabeto {a, b, c} que contienen igual nmero de letras a y b. Las frases que describen un grafo con aristas etiquetadas con nmeros naturales que indican su longitud, dos vrtices del grafo y un camino en el grafo que es el camino ms corto entre esos dos vrtices.

todos los problemas matemticos pueden ser redactados para que tomen la forma de un problema de decisin. Las soluciones al problema de decisin y al problema original se diferencian a lo sumo por un factor lineal.

44 /60

1. Problema Decible
Si existe un algoritmo que pueda decidir para cada posible frase de entrada si esa frase pertenece al lenguaje, entonces se dice que el problema es decidible, de otra forma se dice que es un problema indecidible. Se estudia cuanto recurso necesita un algoritmo decidible para ejecutarse (tiempo, espacio, procesadores, mquina) Estos pueden ser:
Problemas intratables No se pueden resolver en tiempo polinmico O(kn) Problemas tratables Se resuelven con algoritmos polinmicos O(nk)

45 /60

2. Problemas indecibles
O "problemas no solucionables en forma algortmica. Son problemas que se pueden describir, pero no se pueden representar o resolver. Ejemplo: Problema de la parada. No existe ningn algoritmo que diga si un programa va a parar en tiempo finito con una entrada dada:

F(x)

PP

ciclado?

46 /60

Post

47 /60

3. Problemas NP
Su nombre viene de Polinmico no determinista (NonDeterministic Polynomial-time). Es el conjunto de problemas que pueden ser resueltos en tiempo polinmico por una mquina de Turing no determinista. La importancia de esta clase de problemas de decisin es que contiene muchos problemas de bsqueda y de optimizacin para los que se desea saber si existe una cierta solucin o si existe una mejor solucin que las conocidas.
48 /60

3.1. Problemas P
Un problema pertenece a la clase P si puede ser resuelto en tiempo polinomial en una computadora determinstica. Ejemplos: Quicksort, bsqueda binaria, multiplicacin matricial. Esto es si el tiempo de ejecucin del algoritmo es menor que un cierto valor calculado a partir del nmero de variables implicadas (variables de entrada) usando una frmula polinmica.
Si determinar el camino ptimo que debe recorrer un cartero que pasa por N casas necesita menos de 50*N+N segundos, entonces el problema es resoluble en un "tiempo polinmico".

49 /60

3.2. Problemas NP-completo


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 NPcompleto.

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 de NP-completo, todos los problemas de NP tendran tambin una solucin en tiempo polinmico.
50 /60

3.2. Problemas NP-completo


Todos los algoritmos conocidos para problemas NPcompletos utilizan tiempo exponencial con respecto al tamao de la entrada. Todos los algoritmos requeridos para resolverlos requieren tiempo exponencial en el peor caso. Es decir, son sumamente difciles de resolver.

Ejemplos: el problema del agente viajero, O(n22n)

51 /60

Ejemplo
Suma de subconjuntos:

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.
El problema de satisfacibilidad booleana es NP-completo.

52 /60

P vs NP
La clase P contiene problemas que pueden resolverse rpidamente. La clase NP contiene problemas cuya solucin puede verificarse rpidamente. En 1971 se plante la pregunta: Es P = NP? Desde entonces, sigue siendo una pregunta abierta para los tericos. Se cree que P != NP

53 /60

P=NP?
Observa que si hubiera un algoritmo polinmico para cualquier problema en NP-C entonces P=NP. La hiptesis ms aceptada es que PNP.

Si queremos enfrentar un problema NPC es nejor buscar alternativas (simplificaciones, aproximaciones, etc.).

54 /60

SOLUCIONES APROXIMADAS

55 /60

Soluciones aproximadas
Se desconoce si hay mejores algoritmos, por la cual, para resolver un problema NP-completo de tamao arbitrario se utiliza uno de los siguientes enfoques: Aproximacin: Probabilstico: Casos particulares: Heursticas: Algoritmo gentico:

56 /60

Soluciones aproximadas
Aproximacin: Un algoritmo que rpidamente encuentra una solucin no necesariamente ptima, pero dentro de un cierto rango de error. En algunos casos, encontrar una buena aproximacin es suficiente para resolver el problema, pero no todos los problemas NP-completos tienen buenos algoritmos de aproximacin. Probabilstico: Un algoritmo probabilstico obtiene en promedio una buena solucin al problema planteado, para una distribucin de los datos de entrada dada. Casos particulares: Cuando se reconocen casos particulares del problema para los cuales existen soluciones rpidas. Heursticas: Un algoritmo que trabaja razonablemente bien en muchos casos. En general son rpidos, pero no existe medida de la calidad de la respuesta. Algoritmo gentico: Algoritmos que mejoran las posibles soluciones hasta encontrar una que posiblemente est cerca del ptimo. Tampoco existe forma de garantizar la calidad de la respuesta.
57 /60

EJEMPLO

58 /60

Problema (TSP)
Sea: un conjunto de ciudades. Una ciudad origen O. Un conjunto de aristas que une las ciudades, con costos asociados. Problema del viajante: recorrer todas las ciudades, comenzando en O y terminando en O, al menor costo posible.

2 2 3

2
O

59 /60

Ejemplo
Problema Una solucin ptima (de valor 8)

2
2 3

2
2

2
2

60 /60

Mtodos de aproximacin
Encuentra solucin con error mximo conocido a priori. En algunos casos, error de aproximacin fijo. En otros, posible elegir trade-off entre error de aproximacin y esfuerzo computacional (mayor esfuerzo, menor error).

61 /60

Mtodo goloso (greedy)


Idea: tratar de construir una solucin eligiendo de manera iterativa los elementos componentes de menor costo. Para algunos problemas con estructura particular, la solucin construida es una solucin ptima. En general, no es el caso.

62 /60

Aplicacin al TSP

5
10 3 5 2 o 7

63 /60

Aplicacin al TSP
Elijo la ciudad ms prxima (menor costo) entre las an no visitadas.

5
10 3 5 2 o 7

64 /60

Aplicacin al TSP

5
10 3 5 2 o 7

65 /60

Aplicacin al TSP

5
10 3 5 2 o 7

66 /60

Aplicacin al TSP

5
10 3 5 2 o 7

67 /60

Aplicacin al TSP

5
10 3 5 2 o 7

68 /60

Aplicacin al TSP

5
10 3 5 2 o 7

Solucin: costo 22
69 /60

Aplicacin al TSP

5
10 3 5 2 o 7

Solucin alternativa: costo 19


70 /60

PREGUNTAS

71 /60

También podría gustarte