You are on page 1of 32

Algoritmia, Eficiencia y

Exactitud
Estructuras de Datos A
Aux. Mynor Marcos
Algoritmo
Es un mtodo, un proceso, un conjunto de instrucciones utilizadas para
resolver un problema especfico.

Un problema puede ser resuelto mediante muchos algoritmos. Un algoritmo
dado correcto, resuelve un problema definido y determinado.

Desde un punto de vista ms formal: "Un algoritmo es un conjunto
ordenado de pasos o instrucciones ejecutables y no ambiguas".
2 Estructuras de Datos A - Aux. Mynor Marcos
Propiedades de un Algoritmo
Especificacin precisa de la entrada
Un algoritmo debe dejar claros el nmero y valores de entrada y las condiciones iniciales
que deben cumplir esos valores de entrada para conseguir que las operaciones tengan
xito.
Especificacin precisa de cada instruccin
Cada etapa de un algoritmo debe ser definida con precisin, es decir, sin ambigedad.
Exactitud, correccin
Se debe poder demostrar que el algoritmo resuelve el problema. En otras palabras, se
debe calcular la funcin deseada y convertir cada entrada a la salida correcta. Se espera
que el algoritmo resuelva el problema
3 Estructuras de Datos A - Aux. Mynor Marcos
Etapas bien definidas y concretas
Un algoritmo se compone de una serie de etapas concretas, lo que significa que la accin
descrita por esa etapa est totalmente comprendida por la persona o mquina que debe
ejecutarlo. Cada etapa debe ser ejecutada en una cantidad finita de tiempo.
Nmero finito de pasos
Si la descripcin del algoritmo consta de un nmero infinito de etapas, nunca podr ser
implementado como un programa de computadora.
Un algoritmo debe terminar
Descripcin del resultado o efecto
Debe estar claro cul es la tarea que el algoritmo debe ejecutar. La salida esperada debe
estar especificada completamente
4 Estructuras de Datos A - Aux. Mynor Marcos
Programa
Normalmente se considera que un programa de computadora es una
representacin concreta de un algoritmo en un lenguaje de programacin.

El requisito de que "un algoritmo debe terminar" significa que no todos los
programas de computadora son algoritmos. Ej: Sistema operativo.
5 Estructuras de Datos A - Aux. Mynor Marcos
Para recordar
Un problema es una funcin o asociacin de entradas y salidas.
Un algoritmo es una "receta" para resolver un problema cuyas etapas son
concretas y no ambiguas.
Un algoritmo debe ser correcto y finito, y debe terminar para todas las
entradas.
Un programa es una "ejecucin" (instanciacin) de un algoritmo en un
lenguaje de programacin.
6 Estructuras de Datos A - Aux. Mynor Marcos
Eficiencia y Exactitud
Eficiencia es la propiedad mediante la cual un algoritmo debe alcanzar la
solucin al problema en el tiempo ms corto posible o utilizando la cantidad
ms pequea posible de recursos fsicos y que sea compatible con su
exactitud y correccin.

El mtodo ms sobresaliente es realizar un anlisis de algoritmos, que
permite medir la dificultad inherente de un problema.
7 Estructuras de Datos A - Aux. Mynor Marcos
Existen diferentes mtodos con los que se trata de medir la eficiencia de los
algoritmos, entre ellos, los que se basan en el nmero de operaciones que
debe efectuar un algoritmo para realizar una tarea; otros mtodos se
centran en tratar de medir el tiempo que se emplea en llevar a cabo una
determinada tarea. Sin embargo, estos mtodos presentan dificultades, ya
que cuando se trata de generalizar la medida, sta depende de factores
como la mquina en la que se efectu, el ambiente de procesamiento y el
tamao de la muestra, entre otros factores.
8 Estructuras de Datos A - Aux. Mynor Marcos
Algoritmia
Algoritmia: Estudio sistemtico de las tcnicas fundamentales utilizadas
para disear y analizar algoritmos eficientes.

El estudio en la eficiencia de los algoritmos se centra, fundamentalmente,
en el anlisis de la ejecucin de bucles, ya que en el caso de funciones
lineales, la eficiencia es funcin del nmero de instrucciones que contiene.
En este caso, su eficiencia depende de la velocidad de las computadoras y,
generalmente, no es un factor decisivo en la eficiencia global de un
programa.
9 Estructuras de Datos A - Aux. Mynor Marcos
NOTA: La eficiencia como factor espacio-tiempo debe estar estrechamente
relacionada con la buena calidad, el funcionamiento y la facilidad de
mantenimiento del programa.
10 Estructuras de Datos A - Aux. Mynor Marcos
Formato general de la eficiencia
En general, el formato se puede expresar mediante una funcin:
=

Es decir, la eficiencia del algoritmo se examina como una funcin del
nmero de elementos que tienen que ser procesados.
11 Estructuras de Datos A - Aux. Mynor Marcos
Bucles Lineales
En los bucles se repiten las sentencias del cuerpo del bucle un nmero
determinado de veces, que determina la eficiencia del mismo.
Normalmente, en los algoritmos los bucles son el trmino dominante en
cuanto a la eficiencia del mismo.
12 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 1 Bucles Lineales
Cuntas veces se repite el cuerpo del bucle en el siguiente cdigo?
1. i = 1
2. iterar (i <= n)
3. cdigo de la aplicacin
4. i = i + 1
5. fin_iterar

Respuesta: Si n es un entero, por ejemplo de valor 100, la respuesta es 100
veces. El nmero de iteraciones es directamente proporcional al factor del
bucle, n. Como la eficiencia es directamente proporcional al nmero de
iteraciones, la funcin que expresa la eficiencia es:
=
13 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 2 Bucles Lineales
Cuntas veces se repite el cuerpo del bucle en el siguiente cdigo?
1. i = 1
2. iterar (i <= n)
3. cdigo de la aplicacin
4. i = i + 2
5. fin_iterar

Respuesta: La respuesta no siempre es tan evidente como en el ejercicio
anterior. Ahora el contador i avanza de 2 en 2, por lo que la respuesta es n/2. En
este caso, el factor de eficiencia es:
=

2


14 Estructuras de Datos A - Aux. Mynor Marcos
Bucles Logartmicos
Consideremos un bucle en el que su variable de control se multiplique o se
divida dentro de dicho bucle. Cuntas veces se repetir el cuerpo del bucle
en los siguientes segmentos de programa?
1 i = 1 1 i = 1000
2 mientras (i < 1000) 2 mientras (i >= 1)
3 codigo de aplicacin 3 codigo de aplicacin
4 i = i * 2 4 i = i / 2
5 fin_mientras 5 fin_mientras


15 Estructuras de Datos A - Aux. Mynor Marcos
En ambos bucles se ejecutan 10 iteraciones. La razn es que, en cada
iteracin, el valor de i se dobla en el bucle de multiplicar y se divide por la
mitad en el bucle de divisin. Por consiguiente, el nmero de iteraciones es
una funcin del multiplicador o divisor, en este caso 2.

Bucle multiplicar 2

< 1000
Bucle dividir
1000
2

1

Generalizando el anlisis, se puede decir que las iteraciones de los bucles
especificados se determinan por la siguiente frmula:
= log
2

16 Estructuras de Datos A - Aux. Mynor Marcos
Bucles Anidados
En el caso de bucles anidados, se determinan cuntas iteraciones contiene
cada bucle. El total es entonces el producto del nmero de iteraciones del
bucle interno y el nmero de iteraciones del bucle externo.

Existen tres tipos de bucles anidados: lineal logartmico, cuadrtico
dependiente y cuadrtico.


17 Estructuras de Datos A - Aux. Mynor Marcos
Lineal Logartmica
Dependiente
Cuadrtica
Cuadrtica
= log
2

=
( + 1)
2

=
2

Anlisis de Rendimiento
La medida del rendimiento de un programa se consigue mediante la
complejidad del espacio y del tiempo de un programa.

Complejidad del espacio
Es la cantidad de memoria que se necesita para ejecutar un programa hasta su
terminacin.
Complejidad del tiempo
Es la cantidad de tiempo de una computadora que se necesita para ejecutar un programa.
18 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 1 Anlisis de Rendimiento
Tiempo de ejecucin lineal de una funcin que calcula una serie de n trminos.

double serie(double x, int n)
{
double s;
int i;
s = 0.0; // tiempo t1
for (i = 1; i <= n; i++) // tiempo t2
{
s += i * x; // tiempo t3
}
return s; // tiempo t4
}

La funcin T(n) del mtodo es: = 1 + 2 + 3 + 4
19 Estructuras de Datos A - Aux. Mynor Marcos
Notacin O-Grande
Debido a la complejidad para determinar la ecuacin para obtener la
funcin de eficiencia puede ser compleja, el factor dominante que se debe
considerar para determinar el orden de magnitud es denominado factor de
eficiencia. Debido a esto, no es necesario calcular toda la ecuacin , sino
solamente la magnitud. Este factor se defini como "O grande", que
representa "est en el orden de" y se representa O(n).

Esta notacin indica la cota superior del tiempo de ejecucin de un
algoritmo o programa.
20 Estructuras de Datos A - Aux. Mynor Marcos
Descripcin de tiempo de ejecucin con la
notacin O
Dada la funcin =
3
+ 3 + 1 encontrar su O grande (complejidad
asinttica).
Para los valores de 1 se puede demostrar que:
=
3
+3 + 1
3
+ 3
3
+
3
= 5
3


Escogiendo la constante = 5 y
0
= 1, se satisface la desigualdad 5
3
. Entonces se
puede asegurar que:
=
3


Se puede asegurar que la funcin podra tomar cualquier valor mayor a 3, pero lo que importa
es tomar la cota ms ajustada que informa la tasa de crecimiento
21 Estructuras de Datos A - Aux. Mynor Marcos
Para recordar
La funcin de eficiencia de un algoritmo se simplifica con la funcin O
grande.
22 Estructuras de Datos A - Aux. Mynor Marcos
Determinar la notacin O
La notacin O se puede obtener de f(n) utilizando los siguientes pasos:
En cada trmino, establecer el coeficiente del trmino en 1.
Mantener el trmino mayor de la funcin y descartar los restantes.
23 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 1 Determinar la notacin O
Calcular la funcin O de eficiencia de la funcin:
=
1
2
+ 1 =
1
2

2
+
1
2


1. Se eliminan todos los coeficientes y se obtiene:

2
+
2. Se eliminan los factores ms pequeos:

2

3. La notacin O correspondiente es:
= (
2
)
24 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 2 Determinar la notacin O
Calcular la funcin O de eficiencia de la funcin:
=

+
1

1
+ +
2

2
+
1
+
0


1. Se eliminan todos los coeficientes y se obtiene:

+
1
+ +
2
+
2. Se eliminan los factores ms pequeos:


3. La notacin O correspondiente es:
= (

)
25 Estructuras de Datos A - Aux. Mynor Marcos
Complejidad de las sentencias bsicas
Al analizar la complejidad de un mtodo no recursivo, se han de aplicar las propiedades de la
notacin O y las siguientes consideraciones relativas al orden que tienen las sentencias,
fundamentalmente las estructuras de control.
Las sentencias de asignacin, son de orden constante O(1).
La complejidad de una sentencia de seleccin es el mximo de las complejidades del bloque
then y del bloque else.
La complejidad de una sentencia de seleccin mltiple (switch) es el mximo de las
complejidades de cada uno de los bloques case.
Para calcular la complejidad de un bucle, condicional o automtico, se ha de estimar el nmero
mximo de iteraciones para el peor caso; entonces, la complejidad del bucle es el producto del
nmero de iteraciones por la complejidad de las sentencias que forman el cuerpo del bucle.
La complejidad de un bloque se calcula como la suma de las complejidades de cada sentencia
del bloque.
La complejidad de la llamada a un mtodo es de orden 1, complejidad constante. Es necesario
considerar la complejidad del mtodo invocado.
26 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 1 Complejidad de Sentencias Bsicas
Determinar la complejidad del mtodo:
double mayor(double x, double y){
if (x > y)
return x;
else
return y;
}
Respuesta: El mtodo consta de una sentencia de seleccin, cada alternativa
tiene complejidad constante O(1); entonces, la complejidad del mtodo
mayor() es O(1).
27 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 2 Complejidad de Sentencias Bsicas
Determinar la complejidad del siguiente mtodo:
void escribeVector(double[] x, int n){
int j;
for (j = 0; j < n; j++){
System.out.println(x[j]);
}
}
Respuesta: El mtodo consta de un bucle que se ejecuta n veces, O(n). El
cuerpo del bucle es la llamada a println(), complejidad constante O(1). Como
conclusin, la complejidad del mtodo es O(n)*O(1) = O(n).
28 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 3 Complejidad de Sentencias Bsicas
Determinar la complejidad del mtodo:
double suma(double[] d, int n){
int k; double s;
k = s = 0;
while (k < n){
s += d[k];
if (k == 0)
k = 2;
else
k = 2 * k;
}
return s;
}
29 Estructuras de Datos A - Aux. Mynor Marcos
suma() est formado por una sentencia de asignacin mltiple, O(1), de un bucle condicional y
la sentencia que devuelve control de complejidad constante, O(1). Por consiguiente, la
complejidad del mtodo est determinada por el bucle. Es necesario determinar el nmero
mximo de iteraciones que va a realizar el bucle y la complejidad de su cuerpo. El nmero de
iteraciones es igual al nmero de veces que el algoritmo multiplica por dos la variable k. Si t es
el nmero de veces que k se puede multiplicar hasta alcanzar el valor de n, que hace que
determine el bucle, entonces = 2

.
Tomando, entonces, logaritmos: log
2
; por consiguiente, el mximo de iteraciones es
= log
2
.
El cuerpo del bucle consta de una sentencia simple y una sentencia de seleccin de complejidad
O(1), por lo que tiene complejidad constante. Con estas consideraciones, la complejidad del
bucle y del mtodo es:
log
2
1 = log
2

Complejidad logartmica: (log )
30 Estructuras de Datos A - Aux. Mynor Marcos
Ejemplo 4 Complejidad de Sentencias Bsicas
Determinar la complejidad del mtodo:
void traspuesta (float[][] d, int n){
int i, j;
for (i = n-2; i > 0; i--){
for (j = i+1; j < n; j++){
float t;
t = d[i][j];
d[i][j] = d[j][i];
d[j][i] = t;
}
}
}
31 Estructuras de Datos A - Aux. Mynor Marcos
El mtodo consta de dos bucles for anidados. El bucle interno est formado por
tres sentencias de complejidad constante, O(1). El bucle externo siempre realiza
n-1 veces el bucle interno. A su vez, el bucle interno hace k veces su bloque de
sentencias, k vara de 1 a n-1, de modo que el nmero total de iteraciones es:
=
1
=1

El desarrollo de la sumatoria produce la expresin:
1 + 2 + +1 =
1
2

Aplicando las propiedades de la notacin O, se deduce que la complejidad del
mtodo es
2
. El trmino que domina en el tiempo de ejecucin es
2
, se
dice que la complejidad es cuadrtica.
32 Estructuras de Datos A - Aux. Mynor Marcos

You might also like