Sie sind auf Seite 1von 8

Mario AldeaRivas

EstructurasdeDatos sep-12 1
Estructuras de Datos
Tema 1. Introduccin
Tema 2. Anlisis de Algoritmos
Tema 3. Tipos de Datos Abstractos Fundamentales
Tema 4. Pilas y Colas
Tema 5. rboles
Tema 6. TDAs ordenados
Tema 7. Mapas
Tema 8. Grafos
Tema2. Anlisis deAlgoritmos

Mario AldeaRivas
EstructurasdeDatos sep-12 2
Tema 2. Anlisis de Algoritmos
2.1. Qu es un algoritmo?
2.2. Eficiencia de los algoritmos
2.3. Notacin asinttica
2.4. Clculo de tiempos de ejecucin
2.5. Clculo de tiempos de ejecucin de algoritmos recursivos
2.6. Bibliografa
Tema2. Anlisis deAlgoritmos

Mario AldeaRivas
EstructurasdeDatos sep-12 3
Objetivos
Entender el concepto de algoritmo
Comprender las notaciones O( ), O( ) y O( )
Conocer los ritmos ms habituales de crecimiento del tiempo de
ejecucin de algoritmos
Conocer las tcnicas bsicas para el clculo del ritmo de
crecimiento del tiempo de ejecucin de un algoritmo
Saber calcular el tiempo de ejecucin de algoritmos iterativos
Saber calcular el tiempo de ejecucin de algoritmos recursivos
sencillos
Tema2. Anlisis deAlgoritmos
2.1 Ques un algoritmo?
Mario AldeaRivas
EstructurasdeDatos sep-12 4
2.1 Qu es un algoritmo?
Un algoritmo (de al-Jwarizmi, matemtico rabe del siglo
IX) es un conjunto finito de instrucciones o pasos que
sirven para ejecutar una tarea o resolver un problema
Un algoritmo debe ser:
Preciso: cada paso a seguir tiene un orden
Finito: tiene un determinado nmero de pasos, o sea, que tiene
un fin
Definido: si se sigue el mismo proceso ms de una vez
llegaremos al mismo resultado
El primer algoritmo escrito para computador fue el creado
en el siglo XIX por Ada Byron
clculo de los nmeros de Bernouilli para la mquina
analtica de Charles Babbage
Tema2. Anlisis deAlgoritmos
2.1 Ques un algoritmo?
Mario AldeaRivas
EstructurasdeDatos sep-12 5
Ejemplo de Algoritmos
Un problema se puede resolver utilizando diferentes algoritmos
Algoritmos para la multiplicacin con lpiz y papel:
Qu un algoritmo sea mejor que otro podra depender de:
el nmero de operaciones que haya que realizar
de lo compleja que sea cada operacin (multiplicacin de
nmeros de una cifra, suma, divisin y multiplicacin por 2, ...)
357
27
2499
714
9639
357
27
714
2499
9639
27 357 357
13 714 714
6 1428
3 2856 2856
1 5712 5712
9639
Clsico Ingls
la russe
Tema2. Anlisis deAlgoritmos
2.1 Ques un algoritmo?
Mario AldeaRivas
EstructurasdeDatos sep-12 6
Problemas y ejemplares
Los algoritmos propuestos para el problema de la multiplicacin
no slo son aplicables al caso 35727
sino que constituyen una solucin general
El producto 35727 es un ejemplar (o caso) del problema de la
multiplicacin de enteros positivos
otros ejemplares seran: 12430841 o 38
cada ejemplar ser ms o menos difcil de resolver
Los productos 467.2 o -72 no son ejemplares del problema
cuando especificamos un problema hay que definir su dominio
Un algoritmo que pretende resolver un problema es incorrecto si
es posible encontrar un ejemplar dentro dominio para el que el
algoritmo no produce una solucin correcta
Tema2. Anlisis deAlgoritmos
2.2 Eficienciadelos algoritmos
Mario AldeaRivas
EstructurasdeDatos sep-12 7
2.2 Eficiencia de los algoritmos
Un algoritmo es ms eficiente cuantos menos recursos consuma
Eficiencia espacial: cantidad de memoria extra requerida
Eficiencia temporal: tiempo consumido
El tiempo de ejecucin de un algoritmo depende de:
las caractersticas del propio algoritmo
las caractersticas del ejemplar a resolver
- especialmente su tamao
la velocidad del computador
Tiempo de ejecucin de un algoritmo:
T(n): tiempo de peor caso para un ejemplar de tamao n
T
avg
(n): tiempo promedio para un ejemplar de tamao n
Tema2. Anlisis deAlgoritmos
2.2 Eficienciadelos algoritmos
Mario AldeaRivas
EstructurasdeDatos sep-12 8
Tiempo de ejecucin de un algoritmo
mtodo busca(entero[1..n] a,entero e) retorna entero
desde i=1 hasta n hacer
si a[i] == e entonces
retorna i
fsi
fdesde
retorna -1
fmtodo
Suponemos que, en un ordenador dado, cada iteracin del lazo
tarda t unidades de tiempo
El tiempo de cmputo total T ser:
mejor caso (e==a[1]) T=t
caso promedio (e==a[n/2]) T
avg
(n)=tn/2
peor caso (e==a[n] v e=a[i], ie[1,n]) T(n)=tn
Tema2. Anlisis deAlgoritmos
2.3 Notacin asinttica
Mario AldeaRivas
EstructurasdeDatos sep-12 9
2.3 Notacin asinttica
En el anlisis y diseo de algoritmos nos importa el ritmo de
crecimiento del tiempo de cmputo (no su valor exacto)
Para expresar los ritmos de crecimiento se usa la notacin O( )
El tiempo de ejecucin de un algoritmo, T(n), es O(f(n))
si existen constantes c y n
0
tales que cf(n)>T(n) para todo
n>n
0
La notacin O( ) muestra una cota superior al ritmo de crecimiento
de un algoritmo
n
0
T(n)
f(n)
1f(n)> T(n), n>n
0

T(n) es O(f(n))
Tema2. Anlisis deAlgoritmos
2.3 Notacin asinttica
Mario AldeaRivas
EstructurasdeDatos sep-12 10
Cota superior del ritmo de crecimiento de busca
En el ejemplo del algoritmo busca visto anteriormente:
T(n)=tn
Diremos que T(n) es O(n)
- ya que existen c=2t y n
0
=0 tales que 2tn > T(n)para todo
n>0
esto se cumple independientemente del valor de t (es decir,
independientemente de la velocidad del ordenador)
2tn
T(n)=tn
Tema2. Anlisis deAlgoritmos
2.3 Notacin asinttica
Mario AldeaRivas
EstructurasdeDatos sep-12 11
Notacin asinttica(cont.)
La notacin O(n) nos da una cota inferior al ritmo de crecimiento
decimos que T(n) es O(f(n)) si existen constantes c y n
0

tales que T(n)> cf(n) para todo n>n
0
Cuando el ritmo de crecimiento es a la vez O(f(n)) y O(f(n)) se
dice que es O(f(n))
n
0
T(n)
cf(n)
T(n)> cf(n), n>n
0

T(n) es O(f(n))
T(n)

T(n) es O(f(n))
T(n)
cf(n)
c
1
f(n)
T(n) es O(f(n))
T(n) es O(f(n))
.
Tema2. Anlisis deAlgoritmos
2.3 Notacin asinttica
Mario AldeaRivas
EstructurasdeDatos sep-12 12
Ritmo de crecimiento de busca
En el ejemplo del algoritmo busca visto anteriormente:
T(n)=tn (como vimos T(n) es O(n))
Tambin podremos decir que T(n) es O(n)
- ya que existen c=t/2 y n
0
=0 tales que t/2n > T(n), n>0
por lo tanto en este ejemplo podemos decir que T(n) es O(n)
La notacin O( ) slo proporciona lmites a la velocidad de
crecimiento, ocultando las posibles constantes multiplicativas:
T
1
(n)=n y T
2
(n)=1000000n son ambas O(n)
2tn
T(n)=tn
t/2n
Tema2. Anlisis deAlgoritmos
2.3 Notacin asinttica
Mario AldeaRivas
EstructurasdeDatos sep-12 13
Ritmos de crecimiento ms habituales
O(1), o constante
O(log(n)), o logartmico
O(n), o lineal
O(nlog(n))
O(n
2
), o cuadrtico
O(n
x
), o polinmico
O(2
n
), o exponencial
constante log n n n log n n
2
n
3
2
n
1 0 1 0 1 1 2
1 1 2 2 4 8 4
1 2 4 8 16 64 16
1 3 8 24 64 512 256
1 4 16 64 256 4096 65536
1 5 32 160 1024 32768 4294967296
Tema2. Anlisis deAlgoritmos
2.3 Notacin asinttica
Mario AldeaRivas
EstructurasdeDatos sep-12 14
Importancia de encontrar un algoritmo eficiente
El ritmo de crecimiento se acaba imponiendo para valores de n
suficientemente grandes
En un da, un computador 100 veces ms rpido utilizando el
algoritmo T(n)=10
-4
2
n
- slo podra resolver un ejemplar de tamao n=37!
T(n) n=10 n=20 n=30 n=200
10
-4
2
n
0.1 seg 105 seg un da ms que la edad del universo
10
-2
n
3
10 seg 80 seg 4.5 minutos un da
10 20 n
T(n)
10
-4
2
n
10
-2
n
3
Tema2. Anlisis deAlgoritmos
2.4 Clculo detiempos deejecucin
Mario AldeaRivas
EstructurasdeDatos sep-12 15
2.4 Clculo de tiempos de ejecucin
Regla de las sumas:
si T
1
(n) es O(f(n)) y T
2
(n) es O(g(n)), entonces
T
1
(n)+T
2
(n) es O(max(f(n),g(n)))
Es decir: la ejecucin de dos algoritmos que se realizan
uno despus del otro tiene un ritmo de crecimiento igual al del
mximo de los dos
Regla de los productos:
si T
1
(n) es O(f(n)) y T
2
(n) es O(g(n)), entonces
T
1
(n) T
2
(n) es O((f(n) g(n)))
Es decir: la ejecucin de dos algoritmos anidados uno dentro del
otro tiene un ritmo de crecimiento igual al producto de los ritmos
de crecimiento de ambos
Tema2. Anlisis deAlgoritmos
2.4 Clculo detiempos deejecucin
Mario AldeaRivas
EstructurasdeDatos sep-12 16
Clculo detiempos deejecucin (cont.)
Instrucciones simples (asignacin y op. aritmticas): O(1)
Secuencia de instrucciones simples: O(max(1,1,1)) = O(1)
Instruccin condicional:
si es un if simple y no se conoce el valor de la condicin, se
supone que la parte condicional se ejecuta siempre
si es un if con parte else y no se conoce el valor de la
condicin, se elige la que ms tarde de las dos partes
Lazo: nmero de veces, por lo que tarden sus instrucciones
Tema2. Anlisis deAlgoritmos
2.4 Clculo detiempos deejecucin
Mario AldeaRivas
EstructurasdeDatos sep-12 17
Ejemplo sencillo
procedimiemto transponeMatriz(m : Real[1..n][1..n])
desde i=1 hasta n hacer
desde j=1 hasta n hacer
int tmp=m[i][j]
m[i][j]=m[j][i]
m[j][i]=tmp
fdesde
fdesde
fprocedimiemto
O(1)
O(1)
O(1)
O(n) O(n)
O(n)O(n)O(max(1,1,1))
O(n
2
)
Tema2. Anlisis deAlgoritmos
2.4 Clculo detiempos deejecucin
Mario AldeaRivas
EstructurasdeDatos sep-12 18
Ejemplo ms complicado: tiempo logartmico
Algoritmo de bsqueda binaria en un array ordenado
int binarySearch(int key, int[] a){
int mid, bottom= 0; int top=a.length-1;
while (bottom<=top) {
mid=(top+bottom)/2;
if (a[mid]==key) {
return mid;
} else {
if (a[mid]<key)
bottom =mid+1;
else
top=mid-1;
}
}
return -1;
}
Cuntas veces
ejecuta este lazo?
O(1)
mximo log
2
n veces
Tema2. Anlisis deAlgoritmos
2.4 Clculo detiempos deejecucin
Mario AldeaRivas
EstructurasdeDatos sep-12 19
Ejemplo ms complicado: tiempo logartmico (cont.)
En cada iteracin del lazo se divide entre dos la longitud del
subarray en el que podra estar el elemento buscado
peor caso: cuando hay que llegar a un subarray de longitud 1
(incluye cuando el elemento buscado no est en el array)
Nmero de veces que puede dividirse entre dos un nmero:
log
2
n
Eficiencia temporal del algoritmo:
3 6 23 24 27 30 42 44 45 56 58 60 63 64 65 69 72 73 77 79
iteracin 1
iteracin 2
iteracin 3
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
iteracin 4
iteracin 5
a
key=73
20
2
log 4 32 , 5 = =
O(log n)
Da igual decir O(log n) que O(log
2
n) ya que corresponden al
mismo ritmo de crecimiento puesto que slo se diferencian en una
log
2
n =
log n
log 2
constante
Tema2. Anlisis deAlgoritmos
2.5 Clculo detiempos deejecucin dealgoritmos recursivos
Mario AldeaRivas
EstructurasdeDatos sep-12 20
2.5 Clculo de tiempos de ejecucin de
algoritmos recursivos
En un algoritmo recursivo el tiempo para resolver un ejemplar de
tamao n
se calcula en funcin del tiempo necesario para resolver
ejemplares ms pequeos
En general para calcular el tiempo de ejecucin de un algoritmo
recursivo deberemos resolver una ecuacin de recurrencia:
P.e.: t(n) = at(n-b) + bt(n-c) + h(n)
En esta asignatura NO veremos la resolucin de ecuaciones de
recurrencia
En casos sencillos el tiempo se puede calcular directamente:
profundidad de las llamadas recursivas por lo que tarda cada
llamada
Tema2. Anlisis deAlgoritmos
2.5 Clculo detiempos deejecucin dealgoritmos recursivos
Mario AldeaRivas
EstructurasdeDatos sep-12 21
Ejemplo de algoritmo recursivo sencillo
procedimiemto factorial(n : Entero) : Entero
si i=0 o i=1 entonces
retorna 1
sino
retorna n * factorial(n-1)
fsi
fprocedimiemto
O(1)
O(n)O(1)
O(n)
(sin contar con la
llamada recursiva)
factorial(n)
factorial(n-1)
factorial(n-2)
...
factorial(2)
n llamadas recursivas anidadas
O(n)
factorial(1)
Tema2. Anlisis deAlgoritmos
2.5 Clculo detiempos deejecucin dealgoritmos recursivos
Mario AldeaRivas
EstructurasdeDatos sep-12 22
Caso especial de algoritmos recursivos: Divide y
Vencers
procedimiento divideYVencers(x) retorna y
si x es suficientemente sencillo entonces
// caso directo
retorna algoritmoDirecto(x)
fsi
// caso recursivo
descompone x en subproblemas x
1
, x
2
, .., x
s
desde i := 1 hasta s hacer
y
i
:= divideYVencers(x
i
) // llamadas recursivas
fhacer
// combina las soluciones
y := combinacin de las soluciones parciales (y
i
)
retorna y
fprocedimiento
Tema2. Anlisis deAlgoritmos
2.5 Clculo detiempos deejecucin dealgoritmos recursivos
Mario AldeaRivas
EstructurasdeDatos sep-12 23
Eficiencia de los algoritmos DyV
Se obtiene aplicando el Master Theorem que permite resolver
recurrencias del tipo:
t(n) = st(n/b) + g(n) (donde g(n) es O(n
k
))
Donde se supone que:
el algoritmo divide el problema en s subproblemas
- cada uno de un tamao aproximado n/b
g(n) es el tiempo necesario para realizar la descomposicin y
combinacin de resultados
Cuando g(n) es O(n
k
) puede demostrarse que t(n) es:
O(n
k
) si s<b
k
O(n
k
log n) si s=b
k
O(n
log
b
s
) si s>b
k
Tema2. Anlisis deAlgoritmos
2.6 Bibliografa
Mario AldeaRivas
EstructurasdeDatos sep-12 24
2.6 Bibliografa
[1] Aho A.V., Hopcroft J.E., Ullman J.D., Estructuras de datos y
algoritmos. Addison-Wesley, 1988.
[2] Weiss, Mark Allen., Estructuras de datos en Java : compatible
con Java 2 / Mark Allen Weiss. Addison-Wesley, [2000]
[3] Michael T. Goodrich, Roberto Tamassia. Data structures and
algorithms in Java. Hoboken, NJ : John Wiley & Sons, cop.
2006.
[4] Brassard G., Bratley P., Fundamentos de algoritmia. Prentice
Hall, 1997.

Das könnte Ihnen auch gefallen