Title: Bloque 1: Introduccion
1Bloque 1 Introduccion
- Unidad 1 Consideraciones acerca de la eficiencia
de algoritmos
2Noción de eficiencia
- Dados dos algoritmos distintos que solucionen en
mismo problema, sus propiedades son probablemente
distintas - Tardan tiempos distintos en solucionar el
problema (eficiencia temporal) - Precisan de tamaños de almacenamiento distintos
(eficiencia espacial) - Una pregunta obvia que surge a la hora de
considerar ambos algoritmos es cuál de ambos es
mejor? - Lógicamente, el que menos tiempo emplee y menos
espacio de almacenamiento necesite - Habitualmente, nuestro objetivo principal será
mejorar la eficiencia temporal - Existen dos formas de valorar la eficiencia de
los algortimos - EmpÃricamente
- AnalÃticamente (de forma teórica)
3Determinación empirica de la eficiencia
- Consiste en ejecutar cada algoritmo en una
máquina real, para instancias de diferente tamaño
del problema considerado, y obtener los
resultados de tiempos consumidos y espacios
utilizados - Posee varios inconvenientes
- Requiere una adecuada selección de los datos de
entrada, lo cual no es necesariamente fácil de
realizar - Requiere múltiples ejecuciones de un mismo
algoritmo, y por lo tanto, mucho tiempo - Está excesivamente ligado a una máquina concreta,
por lo que en algunos casos los resultados no son
extrapolables
4Determinación teórica de la eficiencia
- Consiste en determinar matemáticamente la
cantidad de recursos (tiempo, espacio) que
consume un algoritmo en función del tamaño de
las instancias de problemas que resuelve - Por tamaño se pueen entender varias cosas
Número de items de entrada, valor(es) de los
items, espacio de almacenamiento, etc. - Escogeremos en cada caso, dependiendo cuánto de
adecuadamente permita la entrada predecir la
eficiencia del algoritmo - La eficiencia se convierte en una función tn que
permite calcular el tiempo/espacio requerido por
el algoritmo para problemas de tamaño n
5Determinación de la función tn
- La función tn se identifica a partir de una o un
conjunto de operaciones básicas - Una operación básica es aquella tal que el
trabajo total realizado por el algoritmo (en
tiempo o espacio) es proporcional al número de
veces que se ejecuta dicha instrucción - Ejemplo (temporal) tn n
function busquedaLineal(aarray1..k of integer
xinteger)integer var iinteger begin
i 1 while i lt k and ai ltgt x do
i i1 if i gt k then
busquedaLineal 0 else busquedaLineal i
end
Posibles operaciones básicas
6Determinación de la función tn
- Otro ejemplo (temporal) tn ?log2n?1
function busquedaBinaria(aarray1..k of
integer xinteger)integer var inf, med,
sup, locinteger begin inf 1 supk
loc 0 while inf lt sup and loc 0 do
begin med (infsup) DIV 2 if
amed x then loc med
else if x lt amed then
sup med-1 else inf med1
end busquedaBinaria loc end
Posibles operaciones básicas
7Determinación de la función tn
- La operación básica seleccionada sólo tiene que
ser proporcional al trabajo que realiza el
algoritmo - Podemos obviar el tiempo exacto que tarda en
ejecutarse - Por ejemplo El algoritmo de búsqueda binaria
anterior realiza - ?log2n?1 operaciones med (infsup) DIV 2
- ?log2n?1 operaciones amed x
- Si suponemos que la primera operación emplea i
segundos y la segunda j segundos de cada vez, el
algoritmo tardará ((?log2n?1)i)
((?log2n?1)j) segundos - O lo que es lo mismo, (ij)(?log2n?1), esto es,
tn predice el tiempo consumido por el algoritmo
con la precisión de un multiplicador (ij) - tn determina la eficiencia temporal (o espacial)
del algoritmo a coste unitario
8Comparación de la eficiencia de algoritmos
- Dadas dos funciones tn y un que representan la
eficiencia temporal (o espacial) de dos
algoritmos t y u, el mejor algoritmo será el que
proporcione un menor valor de la función para un
n dado - Hablamos de una instancia concreta de un problema
- Es necesario tener en cuenta los multiplicadores
ocultos - En general, nos va a interesar el comportamiento
asintótico, esto es, para valores de n muy
grandes - Se obvia el efecto de las constantes
multiplicadoras - Se pasa al lÃmite
9Notas finales
- Un problema de la función tn es predice la
eficiencia con coste unitario - Esto es, su precisión está limitada por un
multiplicador constante - Un análisis empÃrico podrÃa determinar tiempos
exactos para instancias concretas - Ello proporcionarÃa (a priori) mejores resultados
en la práctica - La realidad es que, por el principio de
invariancia, dos implementaciones tn y un
similares del mismo algoritmo, funcionado en
máquinas distintas, pueden diferir en eficiencia
en función de un multiplicador constante para n
grandes - Esto es, si c y d son constantes
- tn lt c un
- un ltd tn
- En consecuencia, la determinación empÃrica posee
los mismos inconvenientes que la determinación
teórica de tn