You are on page 1of 18

Contenidos

Estructuras de Datos y Algoritmos


Tema 6. Anlisis de algoritmos

Nocin de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Anlisis de algoritmos

Ivn Cantador Silvia Teresita Acua, Jos R. Dorronsoro


Escuela Politcnica Superior

Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Contenidos

Nocin de algoritmo. Definicin


Cmo hacer una paella?

Nocin de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Anlisis de algoritmos

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Nocin de algoritmo. Definicin


Receta: Paella valenciana
Ingredientes para 6 personas
- 425 gramos de arroz - 50 gramos de alcachofas - 150 gramos de pollo - 1,5 litros de agua - 50 gramos de judas verdes - 0,5 cucharitas de pimentn - 5 cucharadas de aceite - 3 cucharadas de tomate - 1 pizca de azafrn

Nocin de algoritmo. Definicin


Un algoritmo es una secuencia bien definida, ordenada y finita de operaciones que permiten hallar la solucin a un problema
Bien definida: las operaciones se enuncian en un lenguaje formal, atendiendo a una sintaxis arbitraria (acordada) Ordenada: las operaciones se ejecutan de manera secuencial, siguiendo un orden establecido Finita: el nmero de operaciones a ejecutar para resolver el problema asociado al algoritmo es limitado

Instrucciones de elaboracin
1. Se calienta el aceite en la paella, y cuando empieza a humear, se echa el pollo troceado, dorndolos a fuego medio. 2. A continuacin, se aade la verdura troceada y se sofre durante un par de minutos. 3. Seguidamente, haciendo un hueco en medio de la paellera, se sofre el tomate y cuando empieza a oscurecer, se echa el pimentn, con cuidado de que no se queme. 4. Se mueve bien y se aade agua hasta el borde de la paellera. 5. Se deja cocer la paella durante treinta minutos, rectificando de sal. 6. Se aade el arroz y las hebras de azafrn, teniendo cuidado de repartir bien todo el arroz por la paella, y se deja hervir a fuego vivo hasta que el arroz est en su punto y el caldo se evapore por completo. 7. Se deja reposar cinco minutos, tapada por un pao.
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Nocin de algoritmo. Elementos


Elementos de un algoritmo
Una definicin de la entrada del algoritmo
- En la receta de la paella: ingredientes, utensilios de cocina necesarios

Nocin de algoritmo. Elementos


Elementos de un algoritmo
Resolucin de un problema en la vida real
ENTRADA
ingredientes

ALGORITMO

EJECUTOR DEL ALGORITMO

SALIDA

Un lenguaje formal en el que definir el algoritmo


- En la receta de la paella: el castellano
receta cocinero utensilios de cocina plato

Una lista ordenada de sentencias con las que resolver el problema asociado al algoritmo
- En la receta de la paella: las instrucciones de preparacin del plato

Resolucin de un problema en un ordenador


ENTRADA
DATOS DE ENTRADA (argumentos, variables en memoria, etc.) FUNCIONES BSICAS (primitivas ofrecidas por el SO)

Una definicin de la salida del algoritmo


- En la receta de la paella: el plato en s si se hubiesen ejecutado satisfactoriamente todas las instrucciones de preparacin, o nada en caso de que alguna instruccin no se pudiera haber ejecutado con xito

ALGORITMO + TADs
PROGRAMA (escrito en un lenguaje de programacin)

EJECUTOR DEL ALGORITMO


CPU (ejecutando las instrucciones del programa)

SALIDA
DATOS DE SALIDA (retorno del programa)

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Nocin de algoritmo. Pseudocdigo


Pseudocdigo = pseudo(supuesto) + cdigo(instruccin)
Describe un algoritmo utilizando una mezcla de frases en lenguaje natural, instrucciones de programacin y palabras clave Su objetivo es permitir a una persona (al programador) centrarse en los aspectos lgicos de la solucin a un problema, evitando entrar en aspectos concretos de la sintaxis del lenguaje de programacin a usar Vara de un programador a otro pues no hay una estructura estndar Supone un mecanismo gil para el estudio y diseo de programas de ordenador
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Nocin de algoritmo. Pseudocdigo


Ejemplo: calcular la suma de los elementos de una lista de nmeros
Opcin 1
entrada: lista de nmeros enteros LISTA salida: nmero entero SUMA instrucciones: inicializar SUMA a 0 recorrer los elementos de LISTA para cada ELEMENTO recorrido: sumar ELEMENTO a SUMA devolver SUMA

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Nocin de algoritmo. Pseudocdigo


Ejemplo: calcular la suma de los elementos de una lista de nmeros
Opcin 2
entrada: lista de enteros LISTA salida: entero SUMA instrucciones: SUMA = 0 para cada ELEMENTO de LISTA hacer: SUMA = SUMA + ELEMENTO devolver SUMA

10

Nocin de algoritmo. Pseudocdigo


Ejemplo: calcular la suma de los elementos de una lista de nmeros
Opcin 3
entrada: entero LISTA[] salida: entero SUMA instrucciones: SUMA = 0 para i = 1 hasta longitud(LISTA) hacer: SUMA = SUMA + LISTA[i] i = i + 1 devolver SUMA

11

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Nocin de algoritmo. Pseudocdigo


Ejemplo: calcular la suma de los elementos de una lista de nmeros
Opcin 4
entero sumar(entero LISTA[]) SUMA = 0; para i = 1 hasta longitud(LISTA): SUMA = SUMA + LISTA[i]; i++; devolver SUMA;

12

Nocin de algoritmo. Pseudocdigo

13

Pseudocdigo = pseudo (supuesto) + cdigo(instruccin)


Es una expresin o representacin genrica de un algoritmo Captura el funcionamiento bsico de un algoritmo sin ceirse a las restricciones de un lenguaje Es cercano a la programacin: tiene ms o menos las mismas convenciones de legibilidad, concrecin (ordenacin y claridad de ideas) y comprensin

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Nocin de algoritmo. Pseudocdigo


Pseudocdigo - programacin estructurada

14

Nocin de algoritmo. Pseudocdigo

15

Secuencias: bloque de instrucciones elementales de ejecucin consecutiva. De por s slo se ejecutan una vez Selecciones o bifurcaciones: bloques secuenciales de ejecucin condicional Repeticiones: bloque secuencial que se ejecuta repetidamente mientras se cumple alguna condicin

Ejemplo: algoritmo de Euclides


// mcd: encuentra el mximo comn divisor de dos nmeros entero mcd(entero A, entero B) si B > A: // seleccin intercambiar A y B; // sentencia R = A % B; mientras R != 0: // repeticin A = B; B = R; R = A % B; devolver B;

Pseudocdigo - convenios
Sangrado/tabulado de bloques Definicin de entradas y salidas de procedimientos/funciones Delimitacin de secuencias (;) Delimitacin de selecciones y repeticiones (:) Comentarios
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Contenidos

16

Eficiencia de algoritmo. Nocin de eficiencia


Dados dos algoritmos distintos que solucionan un mismo problema, sus propiedades son probablemente distintas
Tardan tiempos distintos en solucionar el problema (eficiencia temporal) Precisan de tamaos de almacenamiento distintos (eficiencia espacial)

17

Nocin de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Anlisis de algoritmos

Una pregunta obvia que surge a la hora de considerar ambos algoritmos es: cul de ambos es mejor?
Lgicamente, el que menos tiempo emplee y menos espacio de almacenamiento necesite Habitualmente, nuestro objetivo principal ser mejorar la eficiencia temporal Cmo analizar el tiempo de ejecucin? Considerando el rendimiento: relacionar velocidad y tamao de entrada

Existen dos formas de valorar la eficiencia de los algoritmos


Empricamente Analticamente (de forma terica)
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Medida de la eficiencia


Determinacin emprica de la eficiencia de un algoritmo
Consiste en ejecutar el algoritmo en una mquina real para instancias de diferente tamao del problema considerado, y obtener los resultados de tiempos consumidos y espacios utilizados Inconvenientes
- Requiere una adecuada seleccin de los datos de entrada, lo cual no es siempre fcil de realizar - Est excesivamente ligado al compilador y a la mquina donde se realice la ejecucin, por lo que en algunos casos las medidas no son extrapolables - Puede depender de la pericia del programador - Requiere mltiples ejecuciones de un mismo algoritmo, y por lo tanto, mucho tiempo
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

18

Eficiencia de algoritmo. Medida de la eficiencia


Determinacin terica de la eficiencia de un algoritmo
Consiste en determinar matemticamente la cantidad de recursos (tiempo, espacio) que consume un algoritmo en funcin del tamao de las instancias de problemas que resuelve - Por tamao se puede entender varias cosas: nmero de tems de entrada, valor(es) de los tems, espacio de almacenamiento, etc. - La eficiencia se convierte en una funcin tN que permite calcular el tiempo/espacio requerido por el algoritmo para problemas de tamao de entrada N

19

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Medida de la eficiencia


Determinacin terica de la eficiencia de un algoritmo
Una opcin es analizar sobre el pseudocdigo o el cdigo tiempos abstractos de ejecucin (tae) Para analizar el tae hay que fijar una unidad de medida, que ser las sentencias bsicas esto independiza el anlisis de la mquina El tae se medir como el nmero veces que se ejecutan las sentencias bsicas - Es decir: dado un algoritmo A y una entrada I = (I1, I2, , Ip)
taeA(I) = nmero de veces que se ejecutan las sentencias bsicas del algoritmo A sobre la entrada I

20

Eficiencia de algoritmo. Clculo del tae


Ejemplo de clculo del tae: algoritmo de ordenacin por seleccin (SelectSort)
1 2 3 4 5 SelectSort(tabla T, indice P, indice U) i = P; mientras i < U: m = minimo(T, i, U); swap(T[i], T[m]); i++;

21

Para calcular taeSelectSort, se definen 1, 2, 4 y 5 como sentencias bsicas, y:


Se observa que 1 se ejecuta 1 vez Se observa que 3, 4, 5 se ejecutan U P veces Se observa que 2 se ejecuta U P + 1 veces Se observa que como la sentencia 3, m = minimo(T, i, U) no es una sentencia bsica (porque llama a una funcin), entonces hay que calcular primero taeminimo
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Clculo del tae


Ejemplo de clculo del tae: algoritmo de ordenacin por seleccin (SelectSort)
1 2 3 4 5 6 7 indice minimo(tabla T, indice A, indice B) m = A; i = A + 1; mientras i <= B: si T[i] < T[m]: m = i; i++; return m;

22

Eficiencia de algoritmo. Clculo del tae


Ejemplo de clculo del tae: SelectSort
Clculo de taeminimo
ltima vez que se ejecuta la comparacin (3)

23

taeminimo(T, A, B) = 3 + 4 * n iteraciones bucle + 1 = 4 + 4 * n iteraciones bucle = 4 + 4 * (B A) Como n iteraciones bucle = B A U P: taeminimo(T, P, U ) 4 + 4 (U P)


indice minimo(tabla T, indice A, indice B) m = A; i = A + 1; mientras i <= B: si T[i] < T[m]: m = i; i++; return m;

Para calcular taeminimo, se definen 1, 2, 3, 4, 5, 6, 7 como sentencias bsicas


Se observa que 1, 2, 7 se ejecutan 1 vez Se observa que 4, 6 se ejecutan B A veces Se observa que 5 se ejecutan B A + 1 veces Se observa que 5 se ejecuta <= B A veces
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

1 2 3 4 5 6 7

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Clculo del tae


Ejemplo de clculo del tae: SelectSort
Clculo de taeSelectSort
U 1 i=P

24

Eficiencia de algoritmo. Clculo del tae


Ejemplo de clculo del tae: SelectSort
Clculo de taeSelectSort
taeSelectSort(T, P, U) 2 + 8(U P) + 4 (U i )
i=P U 1

25

ltima vez que se ejecuta la comparacin (2)

taeSelectSort(T, P, U) = 1 + (4 + taeminimo (T , i,U )) + 1 = 1 + 4(U P) + taeminimo (T , i, U ) + 1


i=P U 1

= 2 + 8( N 1) + 4 ( N i )
P=1, U=N
i =1

N 1

1 + 4(U P ) + (4 + 4 (U i )) + 1
i=P

U 1

= 2 + 8( N 1) + 4 N 4 i
i =1 i =1

N 1

N 1

= 2 + 8(U P) + 4 (U i )
i=P

U 1

= 2 + 8 N 8 + 4 N ( N 1) 4

N ( N 1) 2

1 2 3 4 5

SelectSort(tabla T, indice P, indice U) i = P; mientras i < U: m = minimo(T, i, U); swap(T[i], T[m]); i++;

= 2 + 8N 8 + 4 N 2 4 N 2 N 2 + 2 N
taeSelectSort(T, P, U) 2 N 2 + 6 N 6

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Funcin tn


La funcin tn se identifica a partir de una o varias operaciones bsicas
Una operacin bsica (nueva unidad de medida de eficiencia) es aquella sentencia tal que el trabajo total realizado por un algoritmo (en tiempo o en espacio) es proporcional al nmero de veces que se ejecuta la sentencia Debe aparecer en el bucle ms interno donde se resuelve el algoritmo y debe ser relevante, representativa del algoritmo

26

Eficiencia de algoritmo. Funcin tn


Operacin bsica
Ejemplo: bsqueda lineal
indice BusquedaLineal(clave K, tabla T, indice P, indice U) { i = P; mientras i <= U: si K == T[i]: posibles operaciones bsicas return i; i++; return ERROR; }

27

De este modo, tae = A(I) = tn, con A(I) = tn = nmero de veces que A ejecuta su operacin bsica sobre I

tn = N

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Funcin tn


Operacin bsica
Ejemplo: bsqueda binaria (T ordenada de forma creciente)
ind BusquedaBinaria(tabla T, indice P, indice U, clave K) { mientras P <= U: M = (P + U) / 2; si T[M] == K: return M; posibles operaciones bsicas else si K < T[M]: U = M - 1; else: P = M + 1; return ERROR; }

28

Eficiencia de algoritmo. Funcin tn


Operacin bsica
Ejemplo: bsqueda binaria (T ordenada de forma creciente)
ind BusquedaBinaria(tabla T, indice P, indice U, clave K) { mientras P <= U: M = (P + U) / 2; si T[M] == K: return M; posibles operaciones bsicas else si K < T[M]: U = M - 1; else: P = M + 1; return ERROR; }

29

tn log2N

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Funcin tn


Operacin bsica
Ejemplo: ordenacin por seleccin
SelectSort(tabla T, indice P, indice U) i = P; mientras i < U: m = minimo(T, i, U); swap(T[i], T[m]); i++; indice minimo(tabla T, indice A, indice B) m = A; i = A + 1; mientras i <= B: si T[i] < T[m]: posibles operaciones bsicas m = i; i++; return m;

30

Eficiencia de algoritmo. Funcin tn


Operacin bsica
Ejemplo: ordenacin por seleccin
SelectSort(tabla T, indice P, indice U) i = P; mientras i < U: m = minimo(T, i, U); swap(T[i], T[m]); i++; indice minimo(tabla T, indice A, indice B) m = A; i = A + 1; mientras i <= B: si T[i] < T[m]: posibles operaciones bsicas m = i; i++; return m;

31

tn N2/2

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Eficiencia de algoritmo. Funcin tn


La operacin bsica seleccionada slo tiene que ser proporcional al trabajo realizado por el algoritmo

32

Eficiencia de algoritmo. Funcin tn

33

Permite evitar el clculo exacto del tiempo de ejecucin del algoritmo - Por ejemplo, el algoritmo de bsqueda binaria realiza log2N+1 operaciones M = (P + U) / 2 - Si para una ejecucin de esa operacin se emplean c segundos, el algoritmo tardara en ejecutarse c*(log2N+1) segundos - De este modo, tn predice el tiempo consumido por el algoritmo con la precisin de un multiplicador constante c

Dadas dos funciones tn y un que representan la eficiencia temporal (o espacial) de dos algoritmos
Instancia concreta del problema - El mejor algoritmo ser el que proporcione un menor valor de funcin tn, un para un N dado Caso general del problema - El mejor algoritmo ser el que proporcione un menor valor de funcin tn, un a nivel asinttico (cuando N tiende a infinito)

La funcin tn determina la eficiencia temporal (o espacial) de un algoritmo a coste unitario


Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Contenidos

34

Complejidad de algoritmos. Orden de complejidad


Una funcin tn es aquella que predice la eficiencia de un algoritmo con una precisin limitada por un multiplicador constante c

35

Nocin de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Anlisis de algoritmos

El anlisis terico de la eficiencia de algoritmos predice de forma aproximada el comportamiento (tiempo de ejecucin) real del algoritmo
tn c3tn c2tn c1tn

n
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Complejidad de algoritmos. Orden de complejidad


Interesa estudiar tn en los casos de n grandes Hay que buscar funciones que acoten (de forma asinttica) inferior y superiormente a tn
? tn c3tn c2tn c1tn ?

36

Complejidad de algoritmos. Cota superior: O grande


Dada una funcin f(n), O(f(n)) es el conjunto de funciones de complejidad g(n) para las cuales existe una constante real positiva c y un entero no negativo N tales que nN, g(n) cf(n)
tn cf(n) g(n)

37

Dado el problema inducido por los multiplicadores, es posible caracterizar el comportamiento de la funcin tn?

n
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

N
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Complejidad de algoritmos. Cota inferior:


Dada una funcin f(n), (f(n)) es el conjunto de funciones de complejidad g(n) para las cuales existe una constante real positiva c y un entero no negativo N tales que nN, g(n) cf(n)
tn

38

Complejidad de algoritmos. Orden:


O(f(n)) y (f(n)) son conjuntos de funciones
n, n+1, n2, n2+n pertenecen a O(n2) n2, n2+1, n2+n+1 pertenecen a (n2)

39

Una funcin (o conjunto de funciones) g(n) pertenece simultneamente a mltiples O(f(n)) y (f(n))
n2 pertenece a O(n2), O(n3), O(n4) n2 pertenece a (n2), (n), (c), con c constante real positiva

g(n) cf(n)

Por ello, O(f(n)) y (f(n)) caracterizan de forma gruesa a las funciones g(n)
El que g(n) O(f(n)), no aporta informacin sobre (f(n)) El que g(n) (f(n)), no aporta informacin sobre O(f(n))

N
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

n
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Complejidad de algoritmos. Orden:


Sera interesante obtener algn tipo de acotacin que implicara simultneamente a O y
Ello permitira acotar superior e inferiormente las funciones g(n), lo cual supondra una mejor caracterizacin de las mismas
tn cf1(n) g(n)

40

Complejidad de algoritmos. Orden:

41

Dada una funcin f(n), (f(n)) = O(f(n)) (f(n)) (f(n)) es el conjunto de funciones de complejidad g(n) para las cuales existen constantes reales positivas c y d, y un entero no negativo N tales que nN, cf(n) g(n) df(n)

df2(n)

n
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Complejidad de algoritmos. Orden:

42

Complejidad de algoritmos. Orden:


Propiedades del orden
Dualidad g(n) O(f(n)) f(n) (g(n)) Clasificacin g(n) (f(n)) f(n) (g(n)) Lmite
c R + , entonces f (n) ( g (n)) lim f (n) = 0, entonces f (n) O( g (n)), pero no a ( g (n)) n g ( n) , entonces f (n) ( g (n)), pero no a ( g (n))

43

(f(n)), al acotar superior e inferiormente las funciones g(n), permite identificar qu g(n) poseen una complejidad en el orden de f(n)
Asintticamente, las funciones g(n) tardarn ms o menos lo mismo que la funcin de eficiencia f(n), con la precisin de un multiplicador constante (u obviando ste, que es precisamente lo que se buscaba)
tn cf (n) g(n) df (n)

N
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

n
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Complejidad de algoritmos. Observaciones


Existen un conjunto de ordenes de complejidad de utilizacin habitual (1), (log n), (n), (nlog n), (n2), (nj), (nk), (an), (bn), (n!) donde 2 < j < k, y 1 < a < b
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

44

Complejidad de algoritmos. Observaciones


1500000

45

Grficas de funciones de complejidad habituales


n 2
n 3

1000000

500000

lgn , n y n lgn andan por aqu

0 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Complejidad de algoritmos. Observaciones


2000

46

Complejidad de algoritmos. Observaciones

47

Grficas de funciones de complejidad habituales


n lgn

1500

n 2 y n andan por ah arriba


n 3

1000

500

Puede suceder que el anlisis de la complejidad de un algoritmo no dependa nicamente de un parmetro n, sino de varios parmetros simultneamente Las definiciones de O, y pueden extenderse a mltiples parmetros con la misma formulacin para un nico parmetro

0 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Contenidos

48

Anlisis de algoritmos. Introduccin

49

Nocin de algoritmo Eficiencia de algoritmos Complejidad de algoritmos Anlisis de algoritmos

El anlisis de algoritmos consiste en determinar las funciones tn que describen alguna propiedad de inters:
tiempo consumido espacio utilizado

El anlisis tiene dos perspectivas distintas:


cmo debe realizarse, i.e. cmo determinar las funciones tn qu tipo de anlisis es conveniente realizar, i.e. desde qu punto de vista estudiar una cierta propiedad del algoritmo

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Determinacin de funciones tn


No existe una frmula o procedimiento general que permita identificar las funciones tn de un algoritmo
La identificacin exitosa de dichas funciones es altamente heurstica y depende, en gran medida, de la experiencia

50

Anlisis de algoritmos. Determinacin de funciones tn


Ejemplo: bsqueda lineal

51

En general, para identificar la funcin tn se debe:


Identificar la operacin bsica de inters
- Una operacin bsica es aquella sentencia tal que el trabajo total realizado por el algoritmo (en tiempo o espacio) es proporcional al nmero de veces que se ejecuta dicha sentencia

indice BusquedaLineal(clave K, tabla T, indice P, indice U) { i = P; mientras i <= U: si K == T[i]: return i; i++; return ERROR; }

Identificar el parmetro de entrada n Analizar desde dentro hacia fuera las estructuras de control que producen la ejecucin repetida de la operacin bsica
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Determinacin de funciones tn


Ejemplo: bsqueda lineal
parmetro de entrada n = U P + 1
indice BusquedaLineal(clave K, tabla T, indice P, indice U) { i = P; mientras i <= U: si K == T[i]: posibles operaciones bsicas return i; i++; return ERROR; }

52

Anlisis de algoritmos. Determinacin de funciones tn

53

En el anlisis se deben considerar:


Sentencias simples Bloques de sentencias Estructuras de control - Alternativas: if, if-else, switch - Repetitivas: for, while, do-while Invocaciones a funcin

estructuras de control involucradas

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Determinacin de funciones tn


Complejidad de una sentencia
sentencia

54

Anlisis de algoritmos. Determinacin de funciones tn


Complejidad de una estructura de control if
if (condicion) { bloque_1 } else { bloque_2 }

55

tn(sentencia) = 1 si la sentencia es operacin bsica y no es estructura de control o invocacin a funcin tn(sentencia) = 0 en otro caso (en realidad, es una constante de valor ms o menos alto, pero no relevante a efectos de anlisis asinttico)

Complejidad de un bloque de sentencias


sentencia_1 sentencia_2 sentencia_3 ... sentencia_k

tn(if) = max{tn(condicion) + tn(bloque1), tn(condicion) + tn(bloque2)} si la operacin bsica est incluida en la alternativa tn(if) = 0 en otro caso

tn(bloque) = tn(sentencia1) + tn(sentencia2) + + tn(sentenciak)


Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Determinacin de funciones tn


Complejidad de una estructura de control if
Ejemplo
operacin bsica
if (i > MAX-1) return -1; else return i

56

Anlisis de algoritmos. Determinacin de funciones tn


Complejidad de un bucle while (equivalente para for)
while (condicion) { bloque }

57

tn(if) = max{tn(condicion) + tn(bloque1), tn(condicion) + tn(bloque2)} = = max{tn(i>MAX-1) + tn(return -1), tn(i>MAX-1) + tn(return i)} = = max{1 + 0, 1 + 0} = 1

tn(while) = 0 si la operacin bsica NO est en el bloque del bucle tn(while) = tn(condicion) + tn(bloque) si la operacin bsica S est incluida en el bloque del bucle y las iteraciones NO dependen de n tn(while) = #iteraciones (tn(condicion) + tn(bloque) ) si la operacin bsica S est incluida en el bloque del bucle y las iteraciones S dependen de n
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Determinacin de funciones tn


Complejidad de una estructura de control while
Ejemplo
int BusquedaLineal(int x, int tabla[N]) { ... while (i <= N-1 && tabla[i] != x) i++; ... operacin bsica }

58

Anlisis de algoritmos. Determinacin de funciones tn

59

Complejidad de una invocacin a funcin


funcion(argumentos)

tn(while) = #iteraciones (tn(condicion) + tn(bloque)) = = N (tn(i<=N-1 && tabla[i]!=x) + tn(i++)) = = N (0 + 1) = N

tn(funcion) se determinar atendiendo a: - a la definicin de los argumentos de entrada de la funcin a partir de n - operaciones bsicas definidas dentro del bloque de la funcin - si la funcin es directa o indirectamente recursiva

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Tipos de anlisis

60

Anlisis de algoritmos. Tipos de anlisis


Anlisis para todos los casos
Este tipo de anlisis es el que se realiza cuando todas las instancias del problema que resuelve el algoritmo tienen la misma complejidad - No todos los algoritmos pueden analizarse desde este punto de vista - Cuando es posible analizar un algoritmo desde este punto de vista, los restantes tipos de anlisis no son aplicables Ejemplo
int FactorialIterativo(int n) { int i, factorial; factorial = 1; for (i = 1; i <= n; i++) factorial = factorial * i; return factorial; }
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

61

Al estudiar la complejidad de un algoritmo se debe determinar qu tipo de anlisis es conveniente realizar, i.e. desde qu punto de vista se desea conocer una determinada propiedad del algoritmo
Anlisis para todos los casos Anlisis para el caso mejor Anlisis para el caso peor Anlisis para el caso medio

operacin bsica tn = n para todos los casos

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Tipos de anlisis


Anlisis para el caso mejor/peor/medio
Estos tipos de anlisis pueden realizarse cuando instancias del problema que resuelve el algoritmo pueden tener complejidades diferentes Ejemplo: bsqueda lineal
int BusquedaLineal(int x, int tabla[N]) { int i = 0; while (i <= N-1 && tabla[i] != x) i++; operacin bsica if (i > N-1) return -1; Cunto vale tn cuando else return i; tabla[0] = x, }

62

Anlisis de algoritmos. Tipos de anlisis


Anlisis para el caso mejor/peor/medio

63

tabla[N/2] = x, tabla[N-1] = x, x no est en tabla?

Los tres tipos de anlisis son relevantes - Por ejemplo, dados dos algoritmos a1 y a2, con funciones de complejidad para los casos medio y peor similares (del mismo orden), pero donde tn(a1) es de menor orden que tn(a2) para el caso mejor, a1 ser preferible - Similares razonamientos se pueden realizar con otras combinaciones de los casos mejor, medio y peor Realizado cuidadosamente, el anlisis de complejidad en el caso medio es el ms realista Desde un punto de vista pesimista, el anlisis de complejidad en el caso peor es el preferible
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Tipos de anlisis


Anlisis para el caso mejor: Balg(N)
Consiste en determinar la complejidad para las instancias del problema ms favorables, i.e. en las que se emplean menos tiempo, menos iteraciones No suele ser realista y por ello es poco utilizado Ejemplo: bsqueda lineal
int BusquedaLineal(int x, int tabla[MAX]) { int i = 0; while (i <= MAX-1 && tabla[i] != x) i++; if (i > MAX-1) return -1; else return i; Si tabla[0] = x, entonces } BBLineal(N) = 1

64

Anlisis de algoritmos. Tipos de anlisis


Anlisis para el caso peor: Walg(N)
Consiste en determinar la complejidad para las instancias del problema ms desfavorables, i.e. en las que se emplean ms tiempo, ms iteraciones Es el que se realiza habitualmente, ya que proporciona una cota superior a la complejidad del algoritmo - Nunca se emplear ms tiempo que el del caso peor Ejemplo: bsqueda lineal
int BusquedaLineal(int x, int tabla[N]) { int i = 0; while (i <= N-1 && tabla[i] != x) i++; if (i > N-1) return -1; Si tabla[N-1] = x, entonces else return i; WBLineal(N) = N = O(N) }
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

65

Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Anlisis de algoritmos. Tipos de anlisis


Anlisis para el caso medio: Aalg(N)
Consiste en determinar la complejidad para las instancias del problema tpicas
- Es difcil determinar la tipicidad - Se suele hacer uso de conceptos de probabilidad Aalg(N) = I nalg(I)p(I) donde nalg(I) es el nmero de veces que se ejecuta la operacin bsica del algoritmo alg para la entrada I

66

Anlisis de algoritmos. Tipos de anlisis


Anlisis para el caso medio: Aalg(N)
Ejemplo: bsqueda lineal - Valores de entrada:
- tabla: puede ser una tabla de cualquier longitud N; se supone que no se repiten los valores en la tabla - x: puede ser cualquier valor; se supone que x est incluido en la tabla

67

Ejemplo: bsqueda lineal


int BusquedaLineal(int x, int tabla[N]) { int i = 0; while (i <= N-1 && tabla[i] != x) i++; if (i > N-1) Cules son los valores tpicos return -1; de x y de la tabla de entrada? else return i; }
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

- Qu probabilidad existe de que tabla[i] = x?


- Asumiendo una distribucin uniforme: p(lista[i]=x) = 1/N

- Complejidad en el caso medio


ABLineal(N) = I nBLineal(I) p(I) = = Ni=1 i 1/N = = 1/N Ni=1 i = 1/N N(N+1)/2 = = (N+1)/2 = O(N/2)
Estructura de Datos y Algoritmos Escuela Politcnica Superior Universidad Autnoma de Madrid

Estructuras de Datos y Algoritmos


Tema 6. Anlisis de algoritmos

Ivn Cantador Silvia Teresita Acua, Jos R. Dorronsoro


Escuela Politcnica Superior

Universidad Autnoma de Madrid

You might also like