Professional Documents
Culture Documents
Contenidos
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
ALGORITMO
SALIDA
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
ALGORITMO + TADs
PROGRAMA (escrito en un lenguaje de programacin)
SALIDA
DATOS DE SALIDA (retorno del programa)
10
11
12
13
14
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
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
Contenidos
16
17
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
18
19
20
21
22
23
1 2 3 4 5 6 7
24
25
= 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
26
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
28
29
tn log2N
30
31
tn N2/2
32
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)
Contenidos
34
35
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
36
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
38
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
40
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
42
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
44
45
1000000
500000
0 0 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600
46
47
1500
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
Contenidos
48
49
El anlisis de algoritmos consiste en determinar las funciones tn que describen alguna propiedad de inters:
tiempo consumido espacio utilizado
50
51
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
52
53
54
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)
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
56
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
58
59
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
60
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
62
63
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
64
65
66
67