Académique Documents
Professionnel Documents
Culture Documents
ANLISIS DE EFICIENCIA
Anlisis de Eficiencia. Introduccin
2
Introduccin Introduccin
D d d l it l l i bl d f dif t
3
Dados dos algoritmos que resuelven el mismo problema de forma diferente
Cul es el mejor?. Cmo se decide que un algoritmo es mejor que otro?
Posibles respuestas:
El i ( d i bl d El que consuma menos memoria (nmero de variables, nmero y tamao de
estructuras de datos usadas).
El que vaya ms rpido (midiendo el tiempo que tarda en ejecutarse o el
nmero de operaciones elementales que realiza). nmero de operaciones elementales que realiza).
El que funcione adecuadamente.
El ms fcil para el humano de leer, escribir o entender.
Por qu deberamos preocuparnos por la calidad de un algoritmo si lo Por qu deberamos preocuparnos por la calidad de un algoritmo, si lo
nico que tenemos que hacer para que un programa vaya ms rpido es
utilizar un ordenador con ms potencia, o si ste consume mucha memoria,
aadirle algunos mdulos de memoria ms?
En todo caso, por qu queremos medir la calidad de un algoritmo si ya
hace lo que se le pide?
Introduccin Introduccin
C j l fi i i d l h d
4
Cmo mejorar la eficiencia cuando el hardware no es
suficiente
Para conseguir que un algoritmo resuelva problemas Para conseguir que un algoritmo resuelva problemas
de mayor tamao no bastar con ejecutarlo en un
hardware ms potente?
Qu ganancia se obtiene al duplicar la velocidad de
procesamiento?
Qu ganancia se obtiene al duplicar el nmero de Qu ganancia se obtiene al duplicar el nmero de
ncleos de procesamiento?
Cunto tiempo lleva a la industria ofrecer procesadores
l d bl d l id d l d bl d l l d bl con el doble de velocidad, el doble de ncleos o el doble
de memoria?
Introduccin Introduccin
P bl
5
Problema:
El aumento de las prestaciones no implica una clara mejora en el
tiempo de ejecucin.
Ejemplo:
Ejecucin de un programa con n datos en 10-42n segundos:
Si n=10 el programa terminar en 0'1 segundos Si n=10, el programa terminar en 0 1 segundos.
Si fuera 20, aproximadamente 10 minutos;
30, un da y
40 40, un ao.
Si cambiamos el ordenador que estamos usando por uno 100 veces
ms rpido:
Si n=45 datos, en un ao.
Slo se mejorara de manera importante si se modificara el diseo del
programa, sustituyendo este algoritmo anterior por uno ms eficiente
Introduccin Introduccin
A
6
Analicemos el algoritmo de las Torres de Hanoi:
Para 3 discos realiza 8 operaciones: 2
3
En general, para n discos: 2
n
operaciones
Tomemos una mquina capaz de realizar mil
millones de operaciones elementales por segundo millones de operaciones elementales por segundo
y veamos qu podramos hacer
Introduccin Introduccin
7
2773 l d d d l i ! 2773 veces la edad del universo!
Introduccin Introduccin
8
Tericamente la potencia de los ordenadores se
duplica cada 18 meses duplica cada 18 meses
Nos sirve un ordenador el doble de potente? 10 veces
ms potente? ms potente?
1.000.000 de veces ms potente?
Introduccin Introduccin
C d li l t di d l fi i i d
9
Cmo podemos realizar el estudio de la eficiencia de un
algoritmo?
Empricamente: programar los algoritmos y ejecutarlos varias veces con
di ti t d t d t d distintos datos de entrada.
Tericamente: determinar matemticamente la cantidad de recursos
(tiempo de ejecucin y memoria) requeridos por la implementacin en
funcin del tamao de la entrada funcin del tamao de la entrada.
Problemas del estudio emprico:
Dependencia de los resultados obtenidos del tipo de ordenador,
del lenguaje de programacin usado
del traductor con el que se obtenga el cdigo ejecutable,
de la pericia del programador. (si cambiamos alguno de estos p p g ( g
elementos probablemente se obtengan resultados diferentes, con lo cual
no podemos establecer una eficiencia emprica absoluta).
Introduccin Introduccin
E di E i
10
Estudio Emprico:
Existen algoritmos que pueden ser comparados con esta
tcnica slo cuando el nmero de datos con los que se tcnica slo cuando el nmero de datos con los que se
ejecutan es relativamente pequeo.
Ejemplo: el problema del viajante de comercio Ejemplo: el problema del viajante de comercio
(encontrar una ruta que una un nmero de ciudades
pero con coste mnimo, por ejemplo en kilmetros a
recorrer.)
10 20 poblaciones: solucin en pocos segundo.
100 poblaciones: no existe ordenador para encontrar la
solucin en un tiempo razonable.
Introduccin Introduccin
M di d i
11
Mediante mtodos empricos
Ejecucin del algoritmo con distintos tamaos del
problema y medida del tiempo empleado: problema y medida del tiempo empleado:
Al cambiar de mquina los resultados diferirn
El lenguaje escogido influir en la implementacin y el g j g p y
compilador usado optimizar ms o menos el cdigo
ejecutable
La ocupacin del sistema en el momento de la ejecucin La ocupacin del sistema en el momento de la ejecucin
tambin cambiar los resultados
Hay algoritmos que no pueden ser probados as para
d l i d j tamaos grandes por el tiempo que tardaran en ejecutarse
(ACO, genticos, etc.)
Introduccin Introduccin
M d d T i
12
Mediante mtodos Tericos
Ventajas del estudio terico:
Independencia con todos los factores anteriores.
Genrico para cualquier entrada
d l d l i i Depende slo de las instrucciones que componen el
algoritmo y del tamao del problema.
No es necesario ejecutar el algoritmo para conocer su No es necesario ejecutar el algoritmo para conocer su
eficiencia
Ofrece como salida una expresin matemtica que indica p q
cmo se produce el crecimiento del tiempo de ejecucin
conforme aumenta el tamao de entrada.
Introduccin Introduccin
13
De manera hbrida:
realizar un estudio terico y posteriormente estimar
ciertos parmetros de forma emprica.
Introduccin Introduccin
L t d d bl t
14
La entrada de un problema y su tamao.
Algoritmo de ordenacin de un vector de n enteros: n es el tamao de
los datos de entrada.
Algoritmo para el clculo del factorial de un entero: el valor de ese
nmero entero es el que nos determinara el tamao de nuestro
problema.
Algoritmo que resuelve el problema del viajante de comercio: el nmero
de ciudades y el de carreteras que unen a estas.
De manera general, el tamao de la entrada de un problema
vendr dado en funcin de un nmero entero que nos mide el
nmero de componentes de dicho ejemplo.
No existe una regla exacta para determinar el tamao de un
problema, sino que tendr que obtenerse segn las caractersticas
de cada uno.
Introduccin Introduccin
D t i l t d l bl
15
Determinar el tamao del problema
El primer paso es conocer el tamao del problema, un dato que
vendr expresado normalmente como un nmero entero n: p
Algoritmo de ordenacin de un vector de n enteros: n es el tamao de
los datos de entrada.
Algoritmo para el clculo del factorial de un entero: el valor de ese Algoritmo para el clculo del factorial de un entero: el valor de ese
nmero entero es el que nos determinara el tamao de nuestro
problema.
Para calcular un valor de la sucesin de Fibonacci n indica la posicin del p
trmino
La ordenacin de una lista de datos tiene como n al nmero de
elementos a ordenar
En el problema del TSP n es el nmero de ciudades, en las Torres de Hanoi
n es el nmero de discos, etc.
Introduccin Introduccin
16
Determinar el tamao del problema
No siempre es fcil determinar el valor de n. Ejemplo
la funcin:
ncsr(n, k) = ncsr(n- 1, k-1) + ncsr(n-1, k). ( , ) ( , ) ( , )
De manera general, el tamao de la entrada de un
problema vendr dado en funcin de un nmero entero que
nos mide el nmero de componentes de dicho ejemplo.
No existe una regla exacta para determinar el tamao de
un problema, sino que tendr que obtenerse segn las
caractersticas de cada uno.
Tiempo de ejecucin
17
Tiempo de ejecucin Tiempo de ejecucin
T( )
18
T(n)
Unidades de tiempo (segundos, milisegundos,...) que un algoritmo tardara
en ejecutarse con unos datos de entrada de tamao n.
Pero el tiempo de ejecucin depende
del ordenador utilizado
traductor con el que se genere el cdigo objeto traductor con el que se genere el cdigo objeto
Entonces T(n) representar: nmero de instrucciones simples (asignaciones,
comparaciones, operaciones aritmticas,...) ejecutadas.
O de manera equivalente: el tiempo de ejecucin del algoritmo en un O de manera equivalente: el tiempo de ejecucin del algoritmo en un
ordenador idealizado, donde cada una de las instrucciones simples
consume una unidad de tiempo.
T(n) no se expresa con unidades y para n0 T(n) es positivo
Tiempo de ejecucin Tiempo de ejecucin
C id l t d l bl h l l l l
19
Conocido el tamao del problema hay que calcular cul ser el
tiempo de ejecucin para n: T(n)
La medida se efecta en unidades de tiempo imaginarias, supuesto un
d d id l j t i t i i l id d d ordenador ideal que ejecutase una instruccin simple por unidad de
tiempo
En un ordenador real cualquiera, la ejecucin del mismo algoritmo para
el mismo tamao tardar un tiempo T1(n) el mismo tamao tardar un tiempo T1(n)
Ambas medidas no diferirn en eficiencia ms all de un factor
multiplicativo c, de forma que dadas dos medidas para el mismo
algoritmo (de dos ejecuciones en dos mquinas distintas) T1(n) y T2(n) algoritmo (de dos ejecuciones en dos mquinas distintas) T1(n) y T2(n)
se cumplir que:
T1(n) cT2(n) T1(n) y T2(n) (n) T1(n) cT2(n) T1(n) y T2(n) (n)
ste es el denominado principio de invarianza. p p
Tiempo de ejecucin Tiempo de ejecucin
P i i i d i i
20
Principio de invarianza:
Dos implementaciones distintas de un mismo algoritmo, que toman
t1(n) y t2(n) unidades de tiempo, respectivamente, para resolver
un problema de tamao n, no diferirn en eficiencia en ms de
una constante multiplicativa.
Existe un c>0 tal que t1(n) ct2(n). q ( ) ( )
Lo que implica que:
Un programa vaya 10 1000 veces ms rpido cambiando de
i mquina,
pero slo un cambio de algoritmo
permitir obtener una mejora mayor cuanto ms crezca el permitir obtener una mejora mayor cuanto ms crezca el
tamao de los ejemplos, lo que nos llevar a ignorar las
constantes multiplicativas a todos los efectos.
Tiempo de ejecucin Tiempo de ejecucin
U l it d j t d t d t d
21
Un algoritmo se puede ejecutar con datos de entrada
diferentes.
Hay datos con los que tarde ms, y y q , y
Datos con los que acabe antes.
Hay que indicar a qu situacin pertenece la expresin T(n)
l l d calculada:
Peor caso: lmite superior en el tiempo (mximo valor).
Generalmente es pesimista.
Mejor caso: lmite inferior en el tiempo (siempre se ejecutar por
encima de dicho tiempo).
Caso promedio: media ponderada de ambos casos. Caso promedio: media ponderada de ambos casos.
Salvo que se diga lo contrario, siempre trabajaremos con el
peor caso.
Tiempo de ejecucin Tiempo de ejecucin
Ej l 1 Al it d d i l i
22
Ejemplo 1: Algoritmo de ordenacin por seleccin:
Vector ordenado de forma creciente (mejor caso)
Vector ordenado de manera decreciente (peor caso) Vector ordenado de manera decreciente (peor caso)
32
Algoritmo eficiente como mucho un coste quasilineal.
Mejor orden es el logartmico: doblar el tamao del problema, no afecta
al tiempo y doblar el tiempo permite tratar problemas enormes. al tiempo y doblar el tiempo permite tratar problemas enormes.
rdenes quasilienal y lineal: duplicar el tamao del problema se duplica
aproximadamente el tiempo empleado, y anlogamente, al duplicar el
d bl d d l d bl d tiempo se pueden tratar problemas aproximadamente del doble de
tamao.
rdenes polinmicos: se necesita mucho tiempo para resolver un problema de es po cos: se eces a uc o e po pa a eso ve u p ob e a
que ha crecido relativamente poco en tamao.
Problemas de orden polinomial se consideran tratables.
Orden Orden
33
Crecimiento de algunas funciones conforme crece el tamao g
n del problema:
Orden Orden
34
Los rdenes de eficiencia son clases de equivalencia (basadas en el
principio de invarianza):
T1(n)= 2n
3
+ 4n
2
+ 5 T1(n) 2n 4n 5
T2(n)= n
3
- 4n,
k
(f(n)) = { g |c
0
R+ y n
0
N, n n
0
g(n) c
0
f(n) }
(f(n)) = { g |c
0
R+ y n
0
N, n n
0
g(n) c
0
f(n) }
Si g(n)
k
(f(n)) entonces f es una cota inferior de g desde un punto en adelante, o lo que
es lo mismo, ofrece un mnimo del cual nunca baja (g crece ms deprisa que f). Por otro
l d i ( ) (f( )) id d i fi i d i l fi i lado, si g(n)