Académique Documents
Professionnel Documents
Culture Documents
Objetivos
El anlisis de algoritmos es una parte importante
de la Teora de complejidad computacional ms
amplia, que provee estimaciones tericas para los
recursos que necesita cualquier algoritmo que
resuelva un problema computacional dado.
Estas estimaciones resultan ser bastante tiles en
la bsqueda de algoritmos eficientes.
A la hora de realizar un anlisis terico de
algoritmos es corriente calcular su complejidad
en un sentido asinttico, es decir, para una
tamao de entrada suficientemente grande.
Contenido
1. Introduccion
2. Tiempos de Algoritmos
3. Complejidad Algortmica
INTRODUCCION
En las Ciencias de la Computacin cuando se dice que un problema tiene solucin, significa que
existe un algoritmo susceptible de implantarse en una computadora, capaz de producir la respuesta
correcta para cualquier instancia del problema en cuestin.
Para ciertos problemas es posible encontrar ms de un algoritmo capaz de resolverlos, lo cual nos
enfrenta al problema de escoger alguno de ellos. La tarea de decidir cul de ellos es el mejor ,debe
basarse en criterios acordes a nuestros intereses. En la mayora de los casos la eleccin de un buen
algoritmo est orientada hacia la disminucin del costo que implica la solucin del problema; bajo
este enfoque es posible dividir los criterios en dos clases:
a) Criterios orientados a minimizar el costo de desarrollo: claridad, sencillez y facilidad de implantacin,
depuracin y mantenimiento.
b) Criterios orientados a disminuir el costo de ejecucin: tiempo de procesador y cantidad de memoria
utilizados.
Si el programa que implanta el algoritmo se va a ejecutar unas cuantas veces, el costo de desarrollo
es dominante, en este caso se debe dar ms peso a los primeros criterios.
Por el contrario, si el programa se va a utilizar frecuentemente, dominar el costo de ejecucin, y
por }e, se debe elegir un algoritmo que haga uso eciente de los recursos de la computadora, es
decir, se le debe evaluar prioritariamente bajo los criterios de la segunda clase.
En cualquier caso, ninguno de los criterios de evaluacin debe eliminarse por completo; pues, por
ejemplo, si se implanta un sistema con algoritmos muy eficientes pero confusos, puede suceder
que despus no sea posible darle el mantenimiento adecuado.
Los recursos que consume un algoritmo pueden estimarse mediante herramientas tericas y
constituyen, por lo tanto, una base contable para la eleccin de un algoritmo.
En las Ciencias de la Computacin, la actividad dedicada a determinar la cantidad de recursos que
consumen los algoritmos se le denomina anlisis de algoritmos.
Tiempos de Algoritmos
Definicin de Algoritmo
Un algoritmo es una serie finita de pasos para
resolver un problema.
Definicin de Algoritmo
Un algoritmo es una serie finita de pasos para resolver un problema.
Hay que hacer nfasis en dos aspectos para que un algoritmo exista:
1. El nmero de pasos debe ser finito. el algoritmo debe terminar en un
tiempo finito con la solucin del problema,
2. El algoritmo debe ser capaz de determinar la solucin del problema.
Asi, podemos definir algoritmo como un "conjunto de reglas operacionales
inherentes a un cmputo".
Sera un error creer que los algoritmos son exclusivos de la informtica.
Tambin son algoritmos los que apr}emos en la escuela para multiplicar y
dividir nmeros de varias cifras.
Siempre que se desee resolver un problema hay que plantearse qu
algoritmo utilizar. La respuesta a esta cuestin puede dep}er de
numerosos factores, a saber, el tamao del problema, el modo en que est
planteado y el tipo y la potencia del equipo disponible para su resolucin.
Definicin de Algoritmo
Caractersticas de un algoritmo
1. Entrada: definir lo que necesita el algoritmo
2. Salida: definir lo que produce.
3. No ambiguo: explcito, siempre sabe qu comando ejecutar.
4. Finito: El algoritmo termina en un nmero finito de pasos.
5. Correcto: Hace lo que se supone que debe hacer. La solucin es
correcta
6. Efectividad: Cada instruccin se completa en tiempo finito.
Cada instruccin debe ser lo suficientemente bsica como
para que en principio pueda ser ejecutada por cualquier
persona usando papel y lpiz.
7. General: Debe ser lo suficientemente general como para
contemplar todos los casos de entrada.
Definicin de Algoritmo
Su ejecucin requiere unos recursos.
0 ms 1 ms
ALGORITMO
entradas salidas
i=a
ri =
r1
i=1
i2 i2 di = (i3)/3 ] = (n3)/3
0 0
Definicin de Algoritmo
Conteo de instrucciones. Reglas bsicas:
Bucles WHILE y REPEAT: Estudiar lo que puede ocurrir. Existe
una cota inferior y superior del nmero de ejecuciones? Se
puede convertir en un FOR?
Llamadas a procedimientos: Calcular primero los
procedimientos que no llaman a otros. t1(n) , t2(n) , ...
IF y CASE: Estudiar lo que puede ocurrir. Se puede predecir
cundo se cumplirn las condiciones?
Mejor caso y peor caso segn la condicin.
Caso promedio: suma del tiempo de cada caso, por probabilidad
de ocurrencia de ese caso.
Definicin del Problema
Se desea comparar 2 algoritmos, A 1 y A 2 respecto a
su velocidad, asumio que A 1 y A 2 son equivalentes.
La velocidad de ejecucin es independiente de la
plataforma que esta utilizando, por ejemplo:
Si A 1 se ejecuta en una Pentium VI de 3Ghz y A 2
se ejecuta en una Pentium I de 800Mhz, entonces es
muy probable que A 1 se ejecute mucho mas rpido
siendo un algoritmo concebido lentamente
Tiempos de un Algoritmo
Para hacerlo indep}iente de la plataforma, se han ideado tiempos
enteros a cada sentencia del programa, utilizando una conjuncin:
Las llamadas a funciones o procedimientos tienen el tiempo que les
lleva a ellos ejecutarse.
Una asignacin simple tarda 1, por ejm:
1) x:=x+1; => 1
2) y:=2*x-1; => 1
3) y:=factorial(n); => No es Simple
Las comparaciones simples tardan 1, por ejm:
1) if (x=y) then => 1
2) if (x=3)or (y=5) then => 1
3) if (factorial(n)==120) then => Compuesta
Tiempos de un Algoritmo
Ejm 1: Encontrar el tiempo de ejecucin
Tabla de Conteo
Void uno(int n) Linea Tiempo
1 1
{ 2 1
x:=1; 3 1
Total 3
y:=x+1;
z:=0; Tuno(n) = 3
}
Tiempos de un Algoritmo
Ejm 2: Encontrar el tiempo de ejecucin
Tabla de Conteo
Linea Complejidad
1 O( f 1 (n))
2 O( f 2 (n))
n O( f n (n))
Total O( max{f 1 (n), f n (n)})
Complejidad Algortmica
Pero cual es la funcin mayor ?
La siguiente tabla se construye bajo el sustento terico
de los teoremas anteriores, por cada lnea se calcula su
complejidad y la complejidad total es obtenida
tomando la funcin mxima.
a (a>1) Mayor
n (k>=2)
n log n
n
log n
1 Menor
Complejidad Algortmica
Ejm 7: Tabla de Conteo
Encontrar la complejidad Linea Complejidad
procedure siete(int n) 1 1 = O(1)
{ 2 n-1+2 = O( n )
x:=7; 3 1*n = O( n )
4 (n-1)*n = O( n 2 )
for (i=1 ; i<= n; i++)
5 1*(n-2)*n= O( n 2 )
{ Total O(n2)
k:=k+1;
for (j=3 ; j<=n ; j++) Tsiete(n) = O(n2)
k:=k-1;
}
};
Complejidad Algortmica
Ejm 8: Encontrar la complejidad
Tabla de Conteo
Void ocho(v:array;int n)
Linea Complejidad
{
1 O(1)
mayor:=v[1];
2 O( n )
for (int i=2 ; i<=n ; i++) O( n )
3
{ 1 * O(n)
4
if(mayor>v[i]) O(n)
Total
{ Mayor:=v[i]; Tocho(n) = O(n)
}
}
};
Complejidad Algortmica
Teorema 5:
T QuickSort (n) = O( n log (n) )
T BusqBinaria (n) = O( n log 2 (n) )
T Hanoi (n) = O( 2 n )
T ShellSort (n) = O( n log (n) )
Teorema 6:
Sea Sort(n) un algoritmo de clasificacin para un vector V de N
elementos, luego:
T Sort (n) >= O( n log (n) )
Complejidad Algortmica
Ejm 9: Encontrar la complejidad Tabla de Conteo
Void nueve(int n) Linea Complejidad
{ for (int k=1 ; k<= n ; k++) 1 O(n)
2 O( n2 )
{
3 O( n 3 log n)
for (int i=k+1 ; i<= n; i++) 4 O(n log 2 n)
{ Total O(n3 log n)
Quicksort(k); Tnueve(n) = O(n3 log n)
}
p:=BusqBinaria(k)
}
}