Está en la página 1de 10

Anlisis de algoritmos

1. Anlisis de algoritmos ..............................................................................2


1.1. Qu es el anlisis de algoritmos? .................................................................................................. 2
1.2. Ejemplos de tiempos de ejecucin de diversos algoritmos .......................................................... 3
1.3. El problema de la suma mxima de una subsecuencia contigua ................................................. 3
1.3.1. El algoritmo obvio (N3) ............................................................................................................... 4
1.3.2. Un algoritmo O(N2) mejorado ....................................................................................................... 5
1.3.3. Un algoritmo lineal ........................................................................................................................ 5
1.4. Reglas generales para el clculo de cotas O mayscula ............................................................... 7
1.5. El logaritmo ......................................................................................................................................... 7
1.6. Problema de la bsqueda esttica .................................................................................................... 8
1.6.1. Bsqueda secuencial.................................................................................................................... 8
1.6.2. Bsqueda binaria .......................................................................................................................... 8
1.6.3. Bsqueda por interpolacin .......................................................................................................... 9
1.7. Comprobacin del anlisis de un algoritmo .................................................................................. 10
1.8. Limitaciones del anlisis O mayscula .......................................................................................... 10

Pgina 1

Anlisis de algoritmos

1. Anlisis de algoritmos
Un algoritmo es un conjunto claramente especificado de instrucciones que la computadora seguir para resolver
un problema.

Anlisis de
algoritmos

La cantidad de recursos, como por ejemplo tiempo y espacio de memoria, que el


algoritmo requerir.

1.1. Qu es el anlisis de algoritmos?


La cantidad de tiempo que cualquier algoritmo tarda en ejecutarse depende casi siempre de la cantidad de entrada
que deba procesar.

El algoritmo lineal es el ms eficiente.


Es importante disponer siempre de la curva ms eficiente?

Cuestiones
importantes

Cmo podemos comparar unas curvas con otras?


Cmo podemos determinar a qu curva corresponde un determinado algoritmo?
Cmo podemos disear algoritmos que eviten mostrar alguna de las curvas menos
eficientes?
Cbica trmino dominante es una cierta constante multiplicada por N3 10N3 +N2 +40N+80

Funciones

Cuadrtica trmino dominante es una cierta constante multiplicada por N2


Lineal trmino dominante que es igual a una constante multiplicada por N.
O(NlogN) trmino dominante es N veces el logaritmo de N.

Si tenemos dos funciones, cualquiera de ellas puede ser ms pequea que la otra en un punto determinado, as
que afirmar que, por ejemplo F(N) < G(N) no tiene sentido. En lugar de ello, lo que hacemos es medir la tasa de
crecimiento de las funciones.

Notacin O mayscula o notacin de Landau para


capturar el trmino ms dominante de una funcin
y para representar la tasa de crecimiento.
Algoritmo Cuadrtico deja de ser prctico para
entradas superiores a pocos miles de elementos
Algoritmo Cbico deja de ser prctico para entradas
superiores a pocos centenares de elementos

Pgina 2

Anlisis de algoritmos

1.2. Ejemplos de tiempos de ejecucin de diversos algoritmos


Intuicin acerca del anlisis de algoritmos:

Elemento mnimo de una matriz


Dada una matriz de N elementos, determinar el menor de ellos.
Puntos ms prximos en el plano

Problemas

Dados N puntos en un plano (es decir, en un sistema de coordenadas x-y), encontrar la pareja
de puntos ms prximos.
Puntos colineales en el plano
Dados N puntos en un plano (es decir, en un sistema de coordenadas x-y), determinar si
cualesquiera tres puntos forman una lnea recta.

Elemento mnimo de una matriz


1. Mantener una variable min que almacene el elemento mnimo.
2. Inicializar mi n con el valor del primer elemento.
3. Hacer un barrido secuencial de la matriz y actualizar mi n de la forma apropiada.

O(N) o lineal lo mejor que podemos esperar.


Puntos ms prximos en el plano
1. Calcular la distancia entre cada pareja de puntos.
2. Quedarse con la distancia mnima.
Clculo muy costoso, porque hay N(N - 1)/2 pares de puntos N2 pares de puntos.
Existen tambin algoritmos O(NlogN) y un algoritmo O(N).
Puntos colineales en el plano
Grupos de tres puntos distintos es N(N-1)(N - 2)/6 Algoritmo cbico. O(N3)

1.3. El problema de la suma mxima de una subsecuencia contigua


Problema de la suma mxima de una subsecuencia contigua
Dada una serie de enteros (posiblemente negativos) A1, A2, ..,AN, encontrar el valor mximo de
e
identificar la secuencia correspondiente. La suma mxima de una secuencia contigua es cero si todos los
enteros son negativos.
{- 2, 11, -4, 13, -5, 2} 20
{ 1, -3, 4, -2, -1 , 6} 7
La subsecuencia vaca, compuesta de cero enteros, tambin es una subsecuencia y su suma es claramente 0.

Pgina 3

Anlisis de algoritmos
1.3.1. El algoritmo obvio (N3)
Algoritmo de fuerza bruta

i=inicio escaneo
j=fin escaneo

k=puntero de scaneo

Expresiones:
1. La inicializacin k = i
2. La comprobacin test k <= j
3. El incremento thisSum+= a[ k ]
4. El ajuste k++

Valor de la suma
de la
subsecuencia
Trmino
dominante

Principio y fin de
la subsecuencia

{- 2, 11, -4, 13, -5, 2} 20

Algoritmo O(N3)
Tres bucles anidados, cada uno de los cuales se ejecuta secuencialmente a lo largo de una gran parte de una
matriz, tiene una gran probabilidad de exhibir un comportamiento O(N3)

Pgina 4

Anlisis de algoritmos
1.3.2. Un algoritmo O(N2) mejorado

Elimina bucle for interno

{- 2, 11, -4, 13, -5, 2} 20

1.3.3. Un algoritmo lineal


Para pasar de un algoritmo cuadrtico a un algoritmo lineal, necesitamos eliminar otro bucle
ms.
La mejor subsecuencia no puede nunca comenzar con un nmero negativo, por lo que si
a [ i ] es negativo podemos saltamos el bucle interno e incrementar i.

Pgina 5

Anlisis de algoritmos

El Teorema nos dice que, al detectar una subsecuencia negativa, no solo podemos salir con break del bucle
interno, sino que tambin podemos incrementar i a j+1.

Si detectamos una suma negativa,


podemos desplazar i ms all de j.

{- 2, 11, -4, 13, -5, 2} 20

Pgina 6

Anlisis de algoritmos

1.4. Reglas generales para el clculo de cotas O mayscula

No escribir T(N) = O(2N2) ni T(N)= O(N2 + N). La forma correcta es T(N) = O(N2).
La regla ms bsica es que el tiempo de ejecucin de un bucle es, como mximo, el tiempo de ejecucin de las
instrucciones contenidas dentro del bucle (incluyendo las comprobaciones) multiplicado por el nmero de
iteraciones.
El tiempo de ejecucin de las instrucciones contenidas dentro de un grupo de bucles anidados es igual al tiempo
de ejecucin de las instrucciones (incluyendo las comprobaciones del bucle ms interno) multiplicado por los
tamaos de todos los bucles.

1.5. El logaritmo
Para cualquier B, N > 0, logB N = K si BK = N
La base no importa. Para cualquier constante
B > 1, logB N = O (log N).
Es una funcin que crece lentamente.
El rendimiento de un algoritmo O (Nlog N) est
mucho ms prximo a un algoritmo lineal O (N)
que a uno cuadrtico O (N2).

Pgina 7

Anlisis de algoritmos

1.6. Problema de la bsqueda esttica


Bsqueda esttica Si no se permite que los datos varen.

1.6.1. Bsqueda secuencial

Una bsqueda secuencial recorre los datos secuencialmente hasta encontrar una correspondencia.
Una bsqueda secuencial es lineal.

No hay xito en la bsqueda Explorar todos los elementos de la matriz O (N)


xito en la bsqueda, peor caso Explorar todos los elementos de la matriz O (N)
xito en la bsqueda caso promedio explorar la mitad de la matriz N/2 O (N)

1.6.2. Bsqueda binaria


Si la matriz de entrada est ordenada, podemos utilizar la bsqueda binaria que se efecta partiendo del punto
medio de la matriz, en lugar de partir de uno de los extremos.

La bsqueda binaria es logartmica porque el rango de bsqueda se divide por dos en cada iteracin O (Nlog N).
No hay xito

Con xito

Pgina 8

Anlisis de algoritmos
1.6.3. Bsqueda por interpolacin
Para poder aplicarla se han de satisfacer dos suposiciones:
1. Cada acceso debe ser muy caro comparado con una instruccin tpica. Por ejemplo, la matriz puede estar
en un disco en lugar de en memoria y cada comparacin requiere un acceso a disco.
2. Los datos no solo deben estar ordenados, sino que tambin deben estar distribuidos de forma bastante
uniforme. Por ejemplo, una gua telefnica est distribuida de una manera bastante uniforme. Si los
elementos de entrada son {1, 2, 4, 8, 16, ... } , la distribucin no es uniforme.
La bsqueda por interpolacin requiere que invirtamos ms tiempo en tratar de realizar una estimacin precisa de
dnde puede estar el elemento que buscamos.
Suponga que el rango contiene 1.000 elementos, que el elemento ms bajo del rango es 1.000 y que el elemento
ms alto del rango es 1.000.000, y suponga tambin que estamos buscando un elemento de valor 12.000. Si los
elementos estn distribuidos uniformemente, entonces cabra esperar que encontrramos una correspondencia en
algn lugar cercano al duodcimo elemento. La frmula aplicable es:

Pgina 9

Anlisis de algoritmos

1.7. Comprobacin del anlisis de un algoritmo


Determinar si es correcto y si es lo mejor que podemos obtener:
1. Codificar el programa y ver si el tiempo de ejecucin observado empricamente se corresponde con el
tiempo de ejecucin predicho por el anlisis.
2. Otro truco comnmente utilizado para verificar que un cierto programa es O(F(N)) consiste en calcular los
valores T(N)/F(N) para un cierto rango de N (usualmente espaciado segn factores de 2).
T(N) es el tiempo de ejecucin empricamente observado.

Si F(N) constituye una estimacin aproximadamente precisa del tiempo de ejecucin, entonces los
valores calculados convergern hacia una cierta constante positiva.
Si F(N) es una sobreestimacin, entonces los valores convergern a cero.
Si F(N) es una subestimacin, y por tanto es incorrecta, entonces los valores divergirn.

Por ejemplo, suponga que escribimos un programa para realizar N bsquedas binarias utilizando el algoritmo de
bsqueda binaria. Puesto que cada bsqueda es logartmica, esperamos que el tiempo de ejecucin total del
programa sea O(N log N).
Subestimacin
Sobreestimacin

Columna convergente
Confirma el
anlisis

1.8. Limitaciones del anlisis O mayscula

El caso peor es en ocasiones bastante poco comn y puede ignorarse sin problemas.
En otras ocasiones, es muy comn y no puede ser ignorado.

NO es apropiado para entradas de pequeo tamao.


Los lmites de caso peor suelen ser ms fciles de determinar que los correspondientes casos promedio.

Pgina 10