140 likes | 369 Views
Diseño y análisis de algoritmos. Análisis de Algoritmos I. Introducción. Análisis de Algoritmos I Complejidad Introducción Métrica de complejidad: polinomio. Métrica de complejidad: exponencial. Análisis asintótico y gran O. Complejidad. Introducción.
E N D
Diseño y análisis de algoritmos Análisis de Algoritmos I
Introducción • Análisis de Algoritmos I • Complejidad • Introducción • Métrica de complejidad: polinomio. • Métrica de complejidad: exponencial. • Análisis asintótico y gran O
Complejidad Introducción • Los computadoras no son los máquinas con recursos infinitos, y estimar cuánto tiempo toma para resolver un problema de un tamaño particular es, por consiguiente importante. • Los recursos consumidos (principales) que son de interés medir, cuando se ejecuta un algoritmo son: • Tiempo: complejidad temporal • Cantidad de memoria requerida: complejidad espacial • Intuición: la complejidad debe depender del “tamaño del problema” • Ejemplo: Cantidad de datos de entrada, facturas a imprimir, cantidad de archivos a procesar, en análisis numérico se puede resolver un sistema de ecuaciones lineales, por ende, el tamaño sería la cantidad de ecuaciones del sistema (y sus variables)
Complejidad Introducción • Aunque los computadores de hoy en día son más baratos y eficientes, no debe cometerse el error de que por este hecho, no se debe preocuparse por los recursos, pues estos sigüien i seguirán siendo escasos. • Ejemplo: Existen algunos algoritmos, que se verán en en el transcurso del ramo, para los cuales el tiempo requerido, independiente del poder computacional de la máquina, es extremadamente alto. • Dada la naturaleza de estos problemas, incluso, no existe ningún algoritmo eficiente ni efectivo que logre llegar a una solución completa en un tiempo razonable. • Def1: Un análisis de complejidad de tiempo (de un algoritmo), puede ser hecho independientemente de las características del computador en que éste se ejecutará.
Complejidad Introducción • Def2: Se requiere de una métrica para poder establecer este tipo de compeljidad a cualquier algoritmo. No es necesario que sea absolutamente precisa, basta con tener una cota aproximada que permita comprar dos o más soluciones (algoritmos) para el mismo problema. • Por ejemplo, si se tiene un algoritmo para calcular para y • se requiere una “función” o métrica dependiente de n que describa cuan rápido entrega el resultado un algoritmo dado. • Esa métrica de complejidad debe permitir comparar dos algoritmos que resuelvan un mismo problema y determinar cual es “mejor” • A continuación se verá una aproximación informal a esta o estas funciones de complejidad temporal
Complejidad Métrica de complejidad: polinomio • Def3: Cualquier función de la siguiente forma siguiente se llama un polinomio: • f(X) = aO + a1 X + a2 X + ...+ an X, • Si an es distinta de cero, entonces, se dice que, el polinomio es de grado n • Para utilizar esta definición en complejidad computacional, son relevantes los polinomios de grado 3 o menos: • Funciones constantes (f (X)) = polinomio de grado 0 • Funciones lineales (f (X)) = polinomio de grado 1 • Funciones cuadráticas (f (X)) = polinomio de grado 2 • Funciones cúbicas (f (X)) = polinomio de grado 3 • Def4: Si X correspondiera al “tamaño” del problema, entonces se podría asociar un polinomio a la forma en la cual el tiempo variaría en base a la cantidad de datos. • Ejemplo: si el tiempo de ejecución se incrementa “proporcionalmente”, con respecto al tamaño del problema, entonces se llama a este algoritmo “complejidad lineal”, y se puede decir que el tiempo de resolución es corto. n 2 O 1 2 3
Complejidad Métrica de complejidad: polinomio • Def5: De la misma manera se puede decir que un algoritmo tiene un “tiempo de resolución” cuadrático o cúbico. Todos estos son algoritmos “acotados” en cuanto a su tiempo de solución, por una función de tipo polinomio o polinomial. • Ejemplos: • Algoritmos lineales: cálculo de IVA para una factura. • Fragmento de Pascal : lineal • suma := 0; • for i := 1 to n suma := suma + a[i] • Algoritmos cuadráticos: la entrada consiste en una canitdad de números2n, ai, i = l..n y bi, i = l..n, el problema es evaluar el producto de ai*bj para todo i y j. Todos estos cálculos se pueden realizar en un doble loop, usando for, donde el total de operaciones necesarias es entonces n. • Si n se considera como la “medida” de la dificultad o el “tamaño” del problema, entonces la complejidad temporal está dada por f (n) = n. • Ejercicio, mostrar que la omplejidad temporal para multiplicar dos matrices cuadradas de nXn es n 2 2 3
Complejidad Métrica de complejidad: exponencial • Def6: Cualquier función de la siguiente forma siguiente se llama una función exponencial: • f(X) = Ca, • ase llama la base y x es el exponente. Si n pert domm |N,la funciónf(X) = a, • puede ser definida en forma recursiva, como siguie, • a° = 1 • a = a * a • Esta expresión recursiva enfatiza el rasgo esencial de la función exponencial: su valor para n+1 es a veces su valor * n. Por ejemplo, el crecimiento de la población tiende a ser exponencial, porque el número de las personas en el año n + 1 tiende a ser un múltiplo del tamaño de la población presente. X X n+l n
Complejidad Métrica de complejidad: exponencial • Es matemáticamente conveniente usar el número e como la base para la función exponencial dónde e se define: • Cuando esta base es usada, se puede construir la exponencial como: • Ejemplos: f(n)= 2 , • en un árbol completo, cada nodo de la rama tiene dos subárboles, y el número de nodos dobla en • cada nivel, hay 2 nodos terminales de dónde n es la altura del árbol. • cuento del inventor de ajedrez, un grano de trigo en el pimer cuadrado, dos en el segundo, cuatro en el tercero, 8 en el cuarto..... 64 casilleros- cuantos granos ??? n n - 1
Complejidad Análisis asintótico y gran O • Def7: Sea f,g Z+ R. Se dice que gdomina f (o f es dominado por g) si existe constantes y tal que | f(n)| <= m|g(n)| para todo • donde n >= k • Note que como se consideran los valores de f(1), g(1), f(2),g(2),....., hay un punto (llamado k) después del cual el tamaño de f(n) esta acotado inferiormente por un múltiplo positivo (m) del tamaño de g(n). También cuando g domina f, entonces |f(n)/g(n)| <= m (esto es, el tamaño del cuociente f(n)/g(n) esta acotado por m) para aquellos donde n >=k y g(n) <> 0 • Definición 8: Cuando f es dominado por g se dice que f es de orden (al menos) g y la notación de esta idea es lo que se llama gran-O. • Formalmente , donde O(g) se lee “orden de g” o “gran-O” de g. • Esta notación , O(g) representa el conjunto de todas las funciones con dominio Z+ y codominio R que son dominadas por g.
Complejidad Análisis asintótico y gran O • Ejemplo1: Sea f,g Z+ R, funciones , para . Si se calcula f(n) y g(n) para encontramos f(1)=5, g(1)=1,......,f(4)=20, g(4)=16. Sin embargo a partir de ,por lo que encontramos que • .Entonces con m=1 y k=5 , tenemos que para , • . De acuerdo con la def. 7 , g domina a f y • También para Las constantes k y m, no necesitan ser únicas. Se puede demostrar,el mismo problema para k=1 y m=5. Se tiene que • Ejercicio: Generalie la demostración para f(n)=an y • Ejemplo2: Para las mismas funciones del ejemplo 1, mostrar que • Por contradicción, basta con probar que no existe m que acote a partir de un cierto k . Es claro que siempre va a existir un n para el cual , por lo que |g(n)/f(n)| no está acotada mor ningún m.
Complejidad Análisis asintótico y gran O • Ejemplo3: Sea f,g Z+ R, funciones . Entonces • para todo , así que con m= 16 y k=1, se demuestra que f es dominada por g , y , o . • Al contrario también es verdad, f domina a g , pues 7n – 4 > 0 para todo , se puede escribir para cualquier . Entonces se puede escribir , por lo tanto . • En este caso
Fundamentos (Parte 4) Análisis asintótico y gran O • Generalización. • Sea f:Z+ R una función polinomial donde f(n) es un polinomio ya definido. • Para aO , a1 , a2 + ...+ at, pert |R , at <> 0 , n pert |N, entonces • | f(n) | = |aO + a1 n + a2 n + ...+ at n, | • <= |aO | + |a1 n| + |a2 n| + ...+ |at n, | • = |aO | + |a1 |n + |a2 |n + ...+ |at |n, • <= |aO | n + |a1 |n + |a2 |n + ...+ |at |n, • = (|aO | +| a1 | + |a2 |+ ...+ |at |) n • Usando la def7 , sea m = (|aO | +| a1 | + |a2 |+ ...+ |at |) y k =1, y sea g: Z+ R dada por g(n) = n . Entonces |f(n)| <= m|g(n)| para todo n >= k, asi f esdominada por g, o 2 t 2 t 2 t n n n t t n
Fundamentos (Parte 4) Análisis asintótico y gran O • Aplicación de O en el analisis de algoritmos • Lo que se busca es encontrar la mejor o más cercana cota • Tabla de órdenes más comunes • Forma O(x) Nombre • ------------------------------------------- • O(1) Constante • O(log x) Logarítmico • O(x) Lineal • O(xlog x) xLogarítmico • O(x) Cuadrático • O(x) Cúbico 2 2 2 3 • O(x ), m=0,1,2,3 Polinomial m x • O(C ), c>1 Exponencial • O(n!) Factorial