Академический Документы
Профессиональный Документы
Культура Документы
Tomado del Curso de Estructura de Datos Ingeniera en Informtica. Universidad Carlos III de Madrid
ndice
3.1 Complejidad computacional y asinttica 3.2 Ejemplos de complejidad asinttica 3.3 La notacin O 3.4 Anlisis del caso mejor, peor y medio
Entrada
Algoritmo
Salida
Mito:
La capacidad de computacin es ilimitada, por qu preocuparse de la eficiencia si siempre podemos encontrar un sistema ms potente? Adems estaba la Ley de Moore
COMPLEJIDAD COMPUTACIONAL Indica el esfuerzo que hay que realizar para aplicar un algoritmo y lo costoso que ste resulta. Dicho coste que se puede medir de diversas formas (espacio (memoria), tiempo, numro, tipo de pasos, cantidad de unidades de procesamiento...)
El estudio a posteriori trata con programas. El estudio a priori trata con algoritmos
Ejemplos
102n + 105 es una funcin lineal 105n2 + 108n es una funcin cuadrtica
La notacin O
Dadas las funciones f(n) y g(n), se dice que f(n) es O(g(n)) si existen constantes positivas c y n0 tales que f(n) cg(n) para n n0 Ejemplo: 2n + 10 es O (n) 2n + 10 cn (c - 2) n 10 n 10/(c - 2) Elegir c = 3 y n0 = 10
La notacin O
Ejemplo:
5n3 + 3n2 +1 O(n3) tomando n0= 3, c= 6 tenemos que: 5n3 + 3n2 +1 6n3 Nota: Tambin pertenecera a O(n4), pero no a O(n2).
La notacin O
Existen diferentes notaciones para la complejidad asinttica Una de ellas es la notacin O, que permite especificar la cota superior de la ejecucin de un algoritmo La sentencia f(n) es O(g(n)) significa que la tasa de crecimiento de f(n) no es mayor que la tasa de crecimiento de g(n) La notacin O sirve para clasificar las funciones de acuerdo con su tasa de crecimiento
La notacin O
Ejemplo: la funcin n2 no es O(n)
n2 cn n c La desigualdad anterior no puede satisfacerse porque c debe ser una constante
La notacin O
La notacin O proporciona una cota superior para la tasa de crecimiento de una funcin
g(n) es O(f(n)) No S S
30
La notacin O
Sea {g(n)} la clase (conjunto) de funciones que son O(g(n)) Se tiene: {n} {n2} {n3} {n4} {n5} donde la inclusin es estricta
{n3} {n2} { n}
La notacin O
Propiedades de O(f(n)):
Reflexiva: f(n)O(f(n)) Transitiva: si f(n) O(g(n)) y g(n) O(h(n)), entonces f(n) O(h(n)) Eliminacin de constantes: O(cf(n)) = O(f(n)), para todo c. O(logan) = O(logbn), para todo a y b. Suma de rdenes: O(f(n)+g(n)) = O(max(f(n),g (n)) Producto de rdenes: O(f(n))O(g(n)) = O(f(n) g (n))
La notacin O
O(1) O(log n) O(n) O(nlog n) O(n2) O(n3) O(nk) k>3 O(kn) k>1 O(n!)
La notacin O
Jerarqua de rdenes de complejidad
La notacin O
Cambios en el entorno HW o SW afectan a factores constantes (principio de invarianza) pero no al orden de complejidad O(f(n)) Hay que buscar algoritmos con el menor orden de complejidad La eficiencia es un trmino relativo que depende del problema El anlisis de la eficiencia es asinttico slo es vlido para tamaos de problema suficientemente grandes
La notacin O
El anlisis asinttico de algoritmos determina el tiempo de ejecucin en notacin O Para realizar el anlisis asinttico
Buscar el nmero de operaciones primitivas ejecutadas en el peor de los casos como una funcin del tamao de la entrada Expresar esta funcin con la notacin O
Ejemplo:
Se sabe que el algoritmo maximoArray ejecuta como mucho 7n - 1 operaciones primitivas Se dice que maximoArray ejecuta en un tiempo O(n)
Como se prescinde de los factores constantes y de los trminos de orden menor, se puede hacer caso omiso de ellos al contar las operaciones primitivas
La notacin O
Reglas:
Si f(n) es un polinomio de grado d, entonces f(n) es O (nd), es decir, 1. Prescindir de los trminos de orden menor 2. Prescindir de los factores constantes Usar la clase ms pequea posible de funciones Decir 2n es O(n) en vez de 2n es O(n2) Usar la expresin ms simple para la clase Decir 3n + 5 es O(n) en vez de 3n + 5 es O(3n)
La notacin O
Reglas prcticas:
Operaciones primitivas: O(1) Secuencia de instrucciones: mximo de la complejidad de cada instruccin (regla de la suma) Condiciones simples: Tiempo necesario para evaluar la condicin ms el requerido para ejecutar la consecuencia (peor caso). Condiciones alternativas: Tiempo necesario para evaluar la condicin ms el requerido para ejecutar el mayor de los tiempos de las consecuencias (peor caso).
La notacin O
Reglas prcticas:
Bucle con iteraciones fijas: multiplicar el nmero de iteraciones por la complejidad del cuerpo (regla del producto). Bucle con iteraciones variables: Igual pero ponindose en el peor caso (ejecutar el mayor nmero de iteraciones posible). Llamadas a subprogramas, funciones o mtodos: Tiempo de evaluacin de cada parmetro ms el tiempo de ejecucin del cuerpo.
La notacin O
Ejemplo de anlisis asinttico para dos algoritmos de clculo de medias prefijas
La media prefija i-sima de un array X es la media de los primeros (i + 1) elementos de X A[i] = X[0] + X[1] + + X[i]/(i +1)
Computar el array A de medias prefijas de otro array X tiene aplicaciones en anlisis financiero
La notacin O
Medias prefijas (Cuadrtico)
mediasPrefijas1(vector,n) vector INICIO A nuevo Array de n enteros i0 MIENTRAS (i < n) s X[0] j1 MIENTRAS (j <= i) s s + X[j] jj+1 FIN-MIENTRAS A[i] s / (i + 1) ii+1 FIN-MIENTRAS DEVOLVER A FIN OPERACIONES n 1 n+1 n n 1,2,3,4,,n 1,2,3,,n-1 1,2,3,,n-1 n n n 1
La notacin O
Medias prefijas (Lineal)
mediasPrefijas2(vector,n) vector INICIO A nuevo Array de n enteros s0 i0 MIENTRAS (i < n) s s + X[j] A[i] s / (i + 1) ii+1 FIN-MIENTRAS DEVOLVER A FIN OPERACIONES n 1 1 n+1 n n n n 1