Вы находитесь на странице: 1из 17

Anlisis de Algoritmos

El anlisis de algoritmos estima el consumo de recursos


de un algoritmo.

Esto nos permite comparar los costos relativos de dos o
ms algoritmos para resolver el mismo problema.

El anlisis de algoritmos tambin les da una
herramienta a los diseadores de algoritmos para
estimar si una solucin propuesta es probable que
satisfaga las restricciones de recursos de un problema.

El concepto de razn de crecimiento, es la razn a la
cual el costo de un algoritmo crece conforme el tamao
de la entrada crece.


Introduccin

Cmo comparar dos algoritmos para resolver un
mismo problema en trminos de eficiencia

El anlisis de algoritmos mide la eficiencia de un
algoritmo, conforme crece el tamao de la entrada.

!sualmente se mide el tiempo de e"ecucin de un
algoritmo, # el almacenamiento primario # secundario
que consume.
$e consideracin principal para estimar el desempeo
de un algoritmo, es el n%mero de operaciones bsicas
requeridas por el algoritmo para procesar una entrada de
cierto tamao.

E"emplo& algoritmo de b%squeda secuencial del
m'imo. ()n* + cn )donde c es el tiempo que lleva
e'aminar una variable*.

int largest )int, arra#, int n*
- int currlarge+./
for)int i + ., i 0 n/ i11*
if)arra#2i3 4 currlarge*
currlarge + arra#2i3/
return currlarge/
5

E"emplo& el tiempo requerido para copiar la primera
posicin de un arreglo es siempre c6
)independientemente de n*. 7si ()n* + c6.

E"emplo &

8um+. /
for)i+. / i0+ n / i11*
for)"+6/ " 0+ n/ "11*
sum11/

Cul es el tiempo de e"ecucin de este fragmento de
cdigo ()n* + c9 n
9
)c9 es el tiempo en incrementar una
variable*.
El concepto de razn de crecimiento es
e'tremadamente importante. :os permite comparar el
tiempo de e"ecucin de dos algoritmos sin realmente
escribir dos programas # e"ecutarlas en la misma
mquina.

!na razn de crecimiento de cn se le llama a menudo
razn de crecimiento lineal.


8i la razn de crecimiento tiene el factor n
9
, se dice que
tiene una razn de crecimiento cuadrtico.

8i el tiempo es del orden 9n se dice que tiene una razn
de crecimiento exponencial.

notemos que 9
n
4 9n
9
4log n

tambin para toda a, b 4 6, n
a
4 )log n*
b
# n
a
4 log n
b

para toda a, b 46, a
n
4 n
b


Mejor, peor y caso promedio

;ara algunos algoritmos, diferentes entradas )inputs*
para un tamao dado pueden requerir diferentes
cantidades de tiempo.

;or e"emplo, consideremos el problema de encontrar la
posicin particular de un valor <, dentro de un arreglo
de n elementos. )suponiendo que slo ocurre una vez*.
Comentar sobre el me"or, peor # caso promedio.

Cul es la venta"a de analizar cada caso. 8i
e'aminamos el peor de los casos, sabemos que al
menos el algoritmo se desempeara de esa forma.

En cambio, cuando un algoritmo se e"ecuta muchas
veces en muchos tipos de entrada, estamos interesados
en el comportamiento promedio o t=pico.
$esafortunadamente, esto supone que sabemos cmo
estn distribuidos los datos.

8i conocemos la distribucin de los datos, podemos
sacar provecho de esto, para un me"or anlisis # diseo
del algoritmo. ;or otra parte, sino conocemos la
distribucin, entonces lo me"or considerar el peor de los
casos.





Una computadora ms rpida o
un algoritmo ms rpido?



8i compramos una computadora diez veces ms rpida,
en qu tiempo podremos ahora e"ecutar una algoritmo


>a respuesta depende del tamao de la entrada de datos,
as= como en la razn de crecimiento del algoritmo.


8i la razn de crecimiento es lineal )i.e. ()n*+cn*
entonces por e"emplo, 6..,... n%meros sern
procesados en la nueva mquina en el mismo tiempo
que 6.,... n%meros en la antigua computadora.


$e que tamao )valor de n* es el problema que
podemos resolver con una computadora ? veces ms
rpida )en un intervalo de tiempo fi"o*


;or e"emplo, supongamos que una computadora
resuelve un problema de tamao n en una hora. 7hora
supongamos que tenemos una computadora 6. veces
ms rpida, de que tamao es el problema que
podemos resolver



f)n* n n@ cambio n@An
6.n 6... 6.... n@+6.n 6.
9.n B.. B... n@+6.n 6.
Bn log n 9B. 6CD9
)6.*n 0n@06.n
E.FE
9n
9
E. 99F
n@+)6.*n
F.6G
9
n
6F 6G n@+n1F HHHH

En la tabla de arriba, f)n* es la razn de crecimiento de
un algoritmo.
8upongamos que tenemos una computadora que puede
e"ecutar 6.,... operaciones bsicas en una hora.
>a segunda columna muestra el m'imo valor de n que
puede e"ecutarse con 6.,... operaciones bsicas en una
hora.
Es decir f)n*+total de op. bsicas en un int. de (iempo
;or e"emplo, f)n*+6.,... operaciones b. por hr.
8i suponemos que tenemos una computadora 6. veces
ms rpida, entonces podremos e"ecutar 6..,...
operaciones bsicas en una hora.
;or lo cual f)n@*+6..,... op. bas. por hr.
Comentar sobre la razn n@An seg%n el incremento de
velocidad de la computadora # la razn de crecimiento
del algoritmo en cuestin.

:ota& los factores constantes nunca afectan la me"ora relativa
obtenida por una computadora ms rpida.



Anlisis Asinttico

Comparemos la razn de crecimiento entre 6.n, 9.n, #
9n
9
, notaremos que 9n
9
, supera eventualmente a 6.n #
9.n, difiriendo solamente en un valor ma#or de n,
donde ocurre el corte.

;or las razones anteriores, usualmente se ignoran las
constantes cuando queremos una estimacin del tiempo
de e"ecucin u otros requerimientos de recursos del
algoritmo. Esto simplifica el anlisis # nos mantiene
pensando en el aspecto ms importante& la razn de
crecimiento. 7 esto se le llama anlisis asinttico del
algoritmo.

En trminos ms precisos, el anlisis asinttico se
refiere al estudio de un algoritmo conforme el tamao
de entrada Ise vuelve grandeJ o alcanza un l=mite )en
el sentido del clculo*.

8in embargo, no siempre es razonable ignorar las
constantes, cuando se compara algoritmos que van a
e"ecutar en valores relativamente pequeos de n.








Cotas superiores

>a cota superior de un algoritmo, indica una cota
o la m'ima razn de crecimiento que un algoritmo
puede tener. Keneralmente ha# que especificar si es
para el me"or, peor o caso promedio.

;or e"emplo, podemos decir& Ieste algoritmo tiene
una cota superior a su razn de crecimiento de n
9
en
el caso promedioJ.

8e adopta una notacin especial llamada O-grande
)bigHLh*, por e"emplo O(f(n)) para indicar que la
cota superior del algoritmo es f)n*.

En trminos precisos, si ()n* representa el tiempo de
e"ecucin de un algoritmo, # f)n* es alguna e'presin
para su cota superior, ()n* est en el con"unto
L)f)n**, si e'isten dos constantes positivas c # n
.
tales que M()n*M c Mf)n*M para todo n 4 n
.


E"emplo& Consideremos el algoritmo de b%squeda
secuencial para encontrar un valor especificado en un
arreglo. 8i el visitar # comparar contra un valor en el
arreglo, requiere c
s
pasos, entonces en el caso
promedio ()n*+c
s
nA9. ;ara todos los valores n46.
Mc
s
nA9M c
s
MnM. ;or lo tanto, por definicin, ()n* est
en L)n* para n
.
+6, # c+c
s
.

El slo saber que algo es L)f)n** slo nos dice que tan
mal se pueden poner las cosas. Nuizs la situacin no es
tan mala. $e la definicin podemos ver que si ()n* est
en L)n*, tambin est en L)n
9
* # L)n
F
*, etc.

;or lo cual se trata en general de definir la m=nima cota
superior.



Cota inferior


E'iste una notacin similar para indicar la m=nima
cantidad de recursos que un algoritmo necesita para
alguna clase de entrada. >a cota inferior de un
algoritmo, denotada por el s=mbolo , pronunciado
Iran OmegaJ o IOmegaJ, tiene la siguiente
definicin&

()n* est en el con"unto )g)n**, si e'isten dos
constantes positivas c # n
.
tales que M()n*M cMg)n*M para
todo n 4 n..

E"emplo& 8i ()n*+c6n91c9n para c6 # c9 4 ., entonces&

Mc
6
n
9
1c
9
nM Mc
6
n
9
M c
6
Mn
9
M

;or lo tanto, ()n* est en )n
9
*.

Notacin

Cuando las cotas superior e inferior son la misma,
indicamos esto usando la notacin )bigH(heta*. 8e
dice que una algoritmo es )h)n**, si est en L)h)n** #
est en )h)n**.

;or e"emplo, como un algoritmo de b%squeda
secuencial est tanto en L)n*, como en )n* en el caso
promedio, decimos que es )n* en el caso promedio.

$ada una e'presin aritmtica que describe los
requerimientos de tiempo para un algoritmo, las cotas
inferior # superior siempre coinciden. En general se usa
la notacin L # , cuando no conocemos e'actamente,
sino slo acotado de un algoritmo.


Reglas de simplifcacin

!na vez que se determina la ecuacin del tiempo de
e"ecucin para un algoritmo, es relativamente sencillo
derivar las e'presiones para& O-grande, # .

E'isten algunas reglas sencillas que nos permiten
simplicar las e'presiones&


6. 8i f)n* est en L)g)n** # g)n* est en L)h)n**,
entonces f)n* est en L)h)n**.

Esta regla nos dice que si alguna funcin g)n* es una
cota superior para una funcin de costo, entonces
cualquier cota superior para g)n*, tambin es una cota
superior para la funcin de costo.

:ota& Oa# una propiedad similar para la notacin
# .

9. 8i f)n* est en L)P g)n** para cualquier constante
P4., entonces f)n* est L)g)n**

El significado de la regla es que se puede ignorar
cualquier constante multiplicativa en las ecuaciones,
cuando se use notacin de O-grande.

F. 8i f
6
)n* est en L)g
6
)n** # f
9
)n* est en L)g
9
)n**,
entonces f
6
)n* 1 f
9
)n* est en L)ma')g
6
)n*,g
9
)n***.

>a regla e'presa que dadas dos partes de un
programa e"ecutadas en secuencia, slo se necesita
considerar la parte ms cara.

4. Si f
1
(n) est en O(g
1
(n)) y f
2
(n) est en O(g
2
(n)), entonces
f
1
(n)f
2
(n) est en O(g
1
(n)g
2
(n)).

Esta regla se emplea para simplifcar ciclos simples en
programas. Si alguna accin es repetida un cierto nmero de
!eces, y cada repeticin tiene el mismo costo, entonces el
costo total es el costo de la accin multiplicado por el nmero
de !eces "ue la accin tu!o lugar.

#omando las tres primeras reglas colecti!amente, se pueden ignorar
todas las constantes y todos los t$rminos de orden inferior para
determinar la ra%n de crecimiento asinttico para cual"uier funcin de
costo, ya "ue los t$rminos de orden superior pronto superan a los
t$rminos de orden inferior en su contri&ucin en el costo total, conforme
n se vuelve grande.



Ejemplos de clculo del tiempo de ejecucin de un programa


Qeamos el anlisis de un simple enunciado de
asignacin a una variable entera&

a + b/

Como el enunciado de asignacin toma tiempo
constante, est en )6*.
Consideremos un simple ciclo IforJ &

sum+./
for)i+6/ i0+n/ i11*
sum 1+ n/

>a primera l=nea es )6*. El ciclo IforJ es repetido n
veces. >a tercera l=nea toma un tiempo constante
tambin, por la regla de simplificacin )D*, el costo total
por e"ecutar las dos l=neas que forman el ciclo IforJ es
)n*. ;or la regla )F*, el costo por el entero fragmento
de cdigo es tambin )n*.


7nalicemos un fragmento de cdigo con varios ciclos
IforJ, algunos de los cuales estn anidados.

sum+./
for)"+6/ "0+n/ "11*
for)i+6/ i0+"/ i11*
sum11/
for)P+6/ P0+n/ P11*
72P3+ PH6/

Este cdigo tiene tres partes& una asignacin, # dos ciclos.

>a asignacin toma tiempo constante, llammosla c
6
. El
segundo ciclo es similar al e"emplo anterior # toma c
9
n+
)n*.
7nalicemos ahora el primer ciclo, que es un doble ciclo
anidado. En este caso traba"emos de adentro hacia fuera.
>a e'presin sum11 requiere tiempo constante,
llamemosle c
F
.

Como el ciclo interno es e"ecutado " veces, por la regla
)D*, tiene un cost de c
F
". El ciclo e'terior es e"ecutado n
veces, pero cada vez el costo del ciclo interior es diferente.
El costo total del ciclo es c
F
veces la suma de los n%meros
6 a n, es decir
n
i+6
" + n)n16*A9, que es )n
9
*. ;or la regla
)F*, )c
6
1c
9
n1c
F
n
9
* es simplemente )n
9
*.



Comparemos el anlisis asinttico de los siguientes
fragmentos de cdigo&

sum6+./
for)i+6/ i0+n/ i11*
for)"+6/ "0+n/ "11*
sum611/

sum9+./
for)i+6/ i0+n/ i11*
for)"+6/ "0+i/ "11*
sum911/

El primer fragmento de e"ecuta el enunciado sum611,
precisamente n
9
veces.

;or otra parte, el segundo fragmento de cdigo tiene un
costo apro'imado de R n
9
. 7s= ambos cdigos tienen un
costo de )n
9
*.

E"emplo, no todos los ciclos anidados son )n
9
*&

sum6+./
for)P+6/ P0+n/ P,+9*
for)"+6/ "0+n/ "11*
sum611/

0span st#le+SfontHsize&6C..pt/ msoHbidiHfontHsi

Вам также может понравиться