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.
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.
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&