You are on page 1of 17

Anlisis de Algoritmos

Eficiencia de Algoritmos

10

Anlisis de Algoritmos

12

Complejidad

10

Tcnicas para la construccin de algoritmos eficientes

16

Algoritmos de Ordenacin y Bsqueda

18

Algoritmos de Grafos

14
Evaluacin

Eficiencia de Algoritmos
Pasos para resolver un problema usando algoritmos:
PASOS

ETAPA

DESCRIPCIN

Anlisis del
Problema

Estudiar, determinar y analizar posibles soluciones para identificar la


solucin a desarrollar.

Diseo del
Algoritmo

Se disea la solucin por medio de un cdigo escrito en forma de


algoritmo.

Codificacin

Implementar el algoritmo en un cdigo en un lenguaje de


programacin. Reflejar las ideas desarrolladas en las etapas de
anlisis y diseo.

Compilacin y
Ejecucin

Traduce el programa fuente a cdigo de mquina y lo ejecuta.

Verificacin

Verifica la sintaxis de la codificacin del programa fuente.

Depuracin

Busca errores en las etapas anteriores y los elimina.

Documentacin Comentarios, Etiquetas de texto, que facilitan la comprensin del


programa.

Anlisis de Algoritmos
Dos programas que hacen lo mismo, cmo se
podran comparar?
1. Eficiencia:
Tiempo de ejecucin.

Uso de espacios de memoria.


2. Facilidad de lectura, mantenimiento, rapidez para
codificarlo.

Complejidad: analizar diversos


factores tales como:
Tiempo de ejecucin
Consumo de memoria,
Entradas y salidas a disco
Lneas de cdigo
Bucles
Procesadores
etc.
Factores principales a estudiar son:
Tiempo de Ejecucin.
Memoria Principal
Cmo determinar el tiempo de ejecucin de un cdigo?
Depende del tipo de instrucciones utilizadas.
Instruccin 1;
Instruccin 2;

Instruccin k;

El tiempo total es la suma de los tiempos de cada instruccin:


Tiempo total = tiempo (instruccin 1) + tiempo (instruccin 2) + + tiempo (instruccin k)

Notacin Asinttica.

Es la notacin aceptada por la comunidad cientfica para describir el comportamiento en eficiencia (o complejidad) de un
algoritmo.
Describe en forma sinttica (sntesis) el comportamiento de la funcin que con la variable de entrada, determina el nmero de
operaciones que realiza el algoritmo.

Complejidad Temporal

Tiempo (o espacio) requerido por un algoritmo, expresado en base a una funcin que depende del tamao del problema.

Complejidad Temporal Asinttica

Mtodo de descripcin de la limitacin de comportamiento de un algoritmo.

Ejemplos de Anlisis de Algoritmos


Pasos

Ordenamiento por Seleccin

Ordenamiento por Insercin

WHILE i = 1 TO n-1
m = i
WHILE j = i+1 TO n
IF lista[j] < lista[m] THEN
m = j
END
intercambiar (i, m)
END

WHILE i = 2 TO n
aux = A[i]
j = i - 1
WHILE (j >= 0) AND (Aux < A[j])
A[j+1] = A[j]
j = j - 1
END
A[j+1] = aux
END

http://commons.wikimedia.org/wiki/File:Sel
ection-Sort-Animation.gif

http://commons.wikimedia.org/wiki/File:Insertion-sort-example300px.gif

Ventajas:

Desventajas:

Lento.
Realiza numerosas comparaciones.

Fcil implementacin.
No requiere memoria adicional.
Realiza pocos intercambios.
Rendimiento constante: poca
diferencia entre el peor y el mejor
caso.

Fcil implementacin.
Requerimientos mnimos de memoria

Lento.
Realiza numerosas comparaciones.
Algoritmo lento, pero puede ser de utilidad para listas que
estn ordenadas o semi ordenadas, porque realiza muy pocos
desplazamientos.

Objetivos del anlisis de algoritmos:


1. Mejorar las caractersticas
estructurales de los algoritmos
2. Facilitar el proceso de seleccin de
un algoritmo (entre varios
disponibles) para un problema
3. Predecir la cantidad de recursos
requeridos por un algoritmo para la
resolucin de un problema

Criterios para realizar anlisis de


algoritmos:
1. Correctitud
2. Cantidad de trabajo realizado
3. Cantidad de espacio utilizado
4. Simplicidad
5. Optimalidad

Mtodos para analizar dos o ms algoritmos que resuelven el mismo


problema, para determinar cul de ellos requiere menos recursos.
Enfoques para resolver este problema:
Benchmarking
Anlisis Matemtico de Algoritmos
Anlisis Asinttico de Algoritmos

Benchmarking
Consiste en implementar los algoritmos en cuestin, ejecutarlos y determinar
cul de ellos requiere menos recursos. Esta solucin parece ser la ms sencilla e
intuitiva, sin embargo tiene varios inconvenientes
Pueden existir muchos algoritmos para resolver un mismo problema, y resulta
muy costoso y tedioso implementarlos todos para poder llevar a cabo la
comparacin.
Es una tcnica muy especfica, ya que determina el desempeo de un programa
particular dependiendo de varios factores:
El computador
El lenguaje de programacin
El compilador
Las habilidades del programador
El conjunto de datos de entrada
A partir del Benchmark es difcil predecir el comportamiento de un programa en otro
ambiente

Anlisis Matemtico de Algoritmos


Consiste en tratar de asociar con cada algoritmo una funcin matemtica exacta
que mida su eciencia dependiendo slo de los siguientes factores:
Las caractersticas estructurales del algoritmo.
El tamao del conjunto de datos de entrada: El nmero de datos con los cuales
trabaja el algoritmo. Esta medida se interpreta segn el tipo de algoritmo sobre el
cual se est trabajando.
Se dene la funcin TA(n) como la cantidad de trabajo realizado por el algoritmo
A para procesar una entrada de tamao n y producir una solucin al problema
El anlisis matemtico de algoritmos es independiente de la implementacin, sin
embargo tiene varios inconvenientes:
La imposibilidad de determinar, para muchos problemas y cada una de las posibles
entradas, la cantidad de trabajo realizado
La dicultad para determinar TA(n) exactamente.

Anlisis Asinttico de Algoritmos


Tcnica derivada del anlisis matemtico de algoritmos basada en dos conceptos
fundamentales:

Caracterizacin de datos de entrada y


Complejidad asinttica.

Peor caso:
Los casos de datos de entrada que maximizan la cantidad de trabajo realizado
por un algoritmo.
Mejor caso:
Los casos de datos de entrada que minimizan la cantidad de trabajo realizado
por un algoritmo.
Caso promedio:
El valor medio de la cantidad de trabajo realizado por un algoritmo. Se debe
tener en cuenta la distribucin probabilstica de los datos de entrada que se
manejan.

Denicin:

Sea Dn el conjunto de datos de entrada de tamao n para un algoritmo,


Sea I Dn un elemento cualquiera.
Sea t(I) la cantidad de trabajo realizado por el algoritmo para procesar la entrada I.
Se denen entonces las siguientes funciones:
Complejidad del peor caso:

W(n) = max{t(I) : I Dn}

Complejidad del mejor caso:

B(n) = min{t(I) : I Dn}

Complejidad del caso promedio:

A(n) = IDn Pr(I) t(I),

Donde Pr(I) es la probabilidad de que ocurra la entrada I

Anlisis Asinttico de Algoritmos


nfasis en el peor caso, ya que representa una cota superior para la cantidad de trabajo
realizado por un algoritmo
La idea fundamental consiste en tratar de encontrar una funcin W(n), fcil de calcular
y conocida, que acote asintticamente el orden de crecimiento de la funcin TA(n)
Se estudia la eciencia asinttica de algoritmos: Cmo se incrementa la cantidad de
trabajo realizado por un algoritmo a medida que se incrementa (con valores
sucientemente grandes) el tamao de la entrada
Para realizar este procedimiento se necesitan
herramientas especiales: las notaciones
asintticas.
En matemtica, se le llama asntota a una lnea
recta que se aproxima continuamente a otra
funcin; es decir que la distancia entre las dos
tiende a ser cero (0), a medida que se extienden
indefinidamente.

Independiente del costo de cada operacin elemental.


El tiempo Utilizado en esta operacin se define PASO y es constante
Operaciones Consideradas un PASO
operaciones aritmticas

y = 2*x -1 x = x + 1

operaciones lgicas

c=a=b

comparaciones entre escalares

If (x = y) then

accesos a variables escalares

a=b

accesos a elementos de vectores o matrices

a = b(2) + 1

asignaciones de valores a escalares

a=1

asignaciones de valores a elementos de vectores o matrices

C(3,2) = 0

lectura de un valor escalar

read, input, get

escritura de un valor escalar

print, put

Llamado a Funciones o Procedimientos tienen un tiempo de acuerdo a lo que demoran en


ejecutarse Tiempo Compuesto:
y = FACTORIAL(x)

if (FACTORIAL(x) == 120) then

rdenes de Complejidad
Se dice que O(f(n)) define un "orden de complejidad. Escogeremos como representante
de este orden a la funcin f(n) ms sencilla del mismo. As tendremos

O(1)
O(log n)
O(n)
O(n log n)
O(n2)
O(na)
O(an)
O(n!)

orden constante
orden logartmico
orden lineal
orden cuadrtico
orden polinomial (a > 2)
orden exponencial (a > 2)
orden factorial

1)
void ejemplo1 (int n)
{
int i, j, k;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
C[i][j] = 0;
for (k = 0; k < n; k++)
C[i][j] += A[j][k] * B[k][j];
}
}

2)
long ejemplo2 (int n)
{
int i, j, k;
long total = 0;
for (i = 1; i < n; i++)
for (j = i+1; j <= n; j++)
for (k = 1; k <= j; k++)
total += k*i;
return total;
}

4)
int ejemplo4 (int n)
{
if (n <= 1)
return 1;
else
return (ejemplo4(n - 1) + ejemplo4(n - 1));
}

3)
void ejemplo3 (int n)
{
int i, j, x=0, y=0;
for (i = 1; i <= n; i++)
if (i % 2 == 1)
{
for (j = i; j <= n; j++)
x++;
for (j = 0; j < i; j++)
y++;
}
}

5)
int ejemplo5 (int n)
{
if (n == 1)
return n;
else
return (ejemplo5(n/2) + 1);
}

funcion ejemplo(n: entero):entero


empieza
variables: a, j, k enteros
para j desde 1 hasta n hacer
a=a+j
fin para
para k desde n hasta 1 hacer
a=a-1
a=a*2
fin para
devolver a
termina

funcion ejemplo2(n: entero):entero


empieza
variables: a entero
a=n*3
a=a+2
devolver a
termina

Ejemplo 8
siempre 3
instrucciones

Ejemplo 6
2 ciclos anidados.
c/u se ejecuta n veces
en el interior del segundo
hay 2 instrucciones.
Funcin: f(n) = 2n2+1.

7) Libro2.xlsx

Algoritmo

Tiempo

Complejidad

200

O(n)

O(n )

funcion ejemplo3(n:entero): entero


empieza
variables i, j, k enteros
para i=1 hasta n hacer
para j=n hasta 1 hacer
k=k+j
k=k+i
fin para
Ejercicio 9
fin para
2 ciclos anidados, c/u se
devolver k
termina
ejecuta n veces

Funcin: f(n) = 2n2+1.

funcion EstaEn(v: array[1..n] de enteros, x: entero):booleano


empieza
variables: i:entero, encontrado:booleano;
i=1;
encontrado=false;
mientras(NO(encontrado) Y x<=n) hacer
si v[i]==x entonces
encontrado=true;
fin si
i=i+1
fin mientras
devolver encontrado
termina

Ejemplo 10 Bsqueda

Mejor: O(3+2=5)
Peor: O(2n+3)

You might also like