Unidad 1 Est Dat - Analisis de Algoritmos

También podría gustarte

Está en la página 1de 6

ESTRUCTURAS DE DATOS

UNIDAD 1 ANLISIS DE ALGORITMOS


COMPLEJIDAD DE ALGORITMOS
La teora de complejidad de los algoritmos tiene que ver directamente con su
eficiencia. La Eficiencia de un algoritmo est determinada por la cantidad de
recursos que consume un programa durante su ejecucin. A menor consumo
de recursos (Tiempo/Espacio) ser mayor la eficiencia.
Los recursos son bsicamente dos:
1) El tiempo de procesador o Complejidad Temporal: Se denota por
T y expresa el tiempo que tarda en ejecutarse un programa. Esto
depender del nmero de instrucciones elementales que ejecuta y la
rapidez de cada una de las instrucciones.
2) Espacio en memoria o Complejidad Espacial: Se denota por la letra
E y expresa la cantidad de memoria que requiere un programa.
Depende principalmente del nmero de variables que utiliza y del
espacio que cada variable ocupa.
Factores de los que depende la eficiencia de un programa.
Los factores que determinan la eficiencia de un programa son:
a) El algoritmo utilizado.
b) El tamao de la entrada, que es una medida de la cantidad de datos que
se debern procesar.
El tiempo de ejecucin y el espacio en memoria requerida se expresan en
funcin del tamao de los datos de entrada, denotado por n. De esta manera
quien determina el consumo de los recursos ser la cantidad de datos
procesados, de ah que el tiempo y el espacio dependen de n, Tiempo en
funcin de n T( n) y Espacio en funcin de n E(n).
La nocin del tamao de los datos de entrada tiene una definicin para cada
problema en particular y una regla que suele funcionar es:
1) Si la entrada de datos es un solo entero, el tamao para n es el valor
del entero.
2) Si la entrada es una secuencia de datos , el tamao para n es la
cantidad de elementos de la secuencia.
3) Si la entrada de datos es estructurada, el tamao para n es el nmero
de elementos del dato.
Formas para medir la complejidad de un programa
Existen dos formas de medicin de la complejidad:
1

ESTRUCTURAS DE DATOS

1) Prueba emprica: Consiste en implementar el programa y probarlo por


medio de su ejecucin, midiendo el tiempo y el espacio en una mquina
concreta y con datos especficos.
2) Anlisis de Complejidad: Consiste en estimar el tiempo y el espacio a
partir del anlisis de las instrucciones que componen el algoritmo.
La comparacin de ambos mtodos nos da el siguiente resultado:
Para la prueba emprica:
a) El resultado es dependiente de la mquina
b) Es poco informativo
c) Requiere implementar el algoritmo y ejecutarlo varias veces
d) Nos da valores exactos, como el tiempo en segundos y el espacio de
memoria en bytes, pero solo para una mquina determinada y datos
concretos.
Para el anlisis del algoritmo:
a) Es independiente de la mquina
b) Es ms informativo
c) Se aplica sin necesidad de implementar el programa
d) Nos da valores aproximados
Notaciones Asintticas
Las notaciones asintticas son aquellas que permiten caracterizar el ritmo de
crecimiento de una funcin, en este caso las notaciones asintticas nos
permiten caracterizar el comportamiento de T(n) y E(n). Las notaciones
estudian el comportamiento de los algoritmos para volmenes de datos de
gran tamao que es justo cuando la eficiencia del algoritmo es ms crtica.
Con la notacin asinttica no se pretende establecer el tiempo exacto de
ejecucin o el espacio de memoria ocupado sino que simplemente se clasifica
el algoritmo en funcin del tamao de los datos de entrada. Las notaciones
Asintticas ms comunes son:
Notacin
O(f)
(f)
(f)

Definicin
Conjunto
de
funciones
cuyo
crecimiento es menor o igual a f
Conjunto de funciones cuyo ritmo de
crecimiento es mayor o igual a f
Conjunto de funciones con el mismo
ritmo de crecimiento en E(n) y T(n)
ARITMTICA DE LA NOTACIN O
2

ESTRUCTURAS DE DATOS

Ocupando el tamao de la entrada como el tamao o el parmetro que define


el tiempo de ejecucin de un programa es posible describir por ejemplo a la
funcin T(n)=n2+2n y esta funcin proporciona la informacin necesaria para
clasificarla en los diferentes algoritmos.

Reglas para el clculo de una funcin de tiempo


1) Sentencias simples: Se refiere a sentencias de asignacin, operaciones
aritmticas, entradas y salidas. Esta sentencia requiere un trabajo constante
siendo su orden de complejidad igual a 1.
Ejemplo:
Suma= 0

2) Ciclos: Su tiempo de ejecucin es al menos el tiempo de ejecucin de las


instrucciones dentro de l, multiplicado por el nmero de la iteraciones,
sumndole los componentes del ciclo.
Ejemplo
Suma= 0

For(i=0;i<n;i++)

1, n+1,n =

Suma+=i ;
una asignacin

2n

2n+2

T(n) = 4n+3

Esto es si n = 2

*Es dos porque se est realizando una suma y

3) Ciclos anidados: Se analizan desde el ciclo interno hasta el ms externo.


Una vez que se obtiene la complejidad del ciclo interno se multiplica por el
nmero de iteraciones del ciclo externo obteniendo la complejidad final para el
ciclo externo de la misma forma que un ciclo simple.
Ejemplo:
For(j=1;j<=n;j++)
4n2+4n+2

1, n+1, n

For(i=0;i<n;i++)

1, n+1,n =

Suma+=i ;

=
2n+2

2n+2 + 4n 2+2n

T(n)=

(4n+2)(n)= 4n2+2n

2n

4) Condicionales: La comparacin es de complejidad constante igual a 1 que


se debe sumar con el peor de los casos entre el verdadero y el falso.
Ejemplo:
If (n>i) 1+3 = 4
Suma+=i*j;

Else
3

ESTRUCTURAS DE DATOS

Suma=i; 1
Para simplificar el estudio de la complejidad se han adoptado ciertas
convenciones y una de ellas es la del concepto de ORDEN, que indica el grado
de Complejidad del algoritmo.
A partir de la funcin de tiempo, para determinar el orden el orden del
algoritmo se eliminan todos los trminos excepto el de mayor grado, despus
se elimina el coeficiente del trmino.
El concepto de orden de complejidad indica el grado o clasificacin de
complejidad del algoritmo, as para T(n)=7n 2+11n+6 tenemos que n2 es el
orden de complejidad del algoritmo, es decir O(n 2).
Ordenes de Complejidad
Entre los principales rdenes de complejidad se encuentran los siguientes:
O (1) Orden Constante
O (log n) Orden Logartmico
O(n) Orden lineal
O(n log n) Orden Cuasi-lineal
O (n2) Orden Cuadrtico
O (n3) Orden cbico
O (n a) Orden Polinomial
O (an) Orden Exponencial
O (n!) Orden Factorial
La complejidad constante: Indica cuando las instrucciones se ejecutan una
sola vez.
Complejidad Logartmica: Suele aparecer en determinados algoritmos y se
considera un caso especial pues en el doble de tiempo permiten resolver
problemas notablemente mayores y para resolver un problema doblemente
mayor solo hace falta un poco ms de tiempo pero nunca el doble.
Complejidad Lineal: Es una complejidad buena y tambin muy usual su
comportamiento es ms natural es decir con el doble de datos a procesar nos
dar el doble de tiempo de ejecucin. Aparece en la evaluacin de ciclos
simples siempre que la complejidad de las instrucciones anteriores sea
constante.
Complejidad Cuasi-lineal: Se encuentra en algoritmos de tipo divide y
vencers como el mtodo de ordenacin QuickSort. Se considera una buena
4

ESTRUCTURAS DE DATOS

complejidad si n se duplica el tiempo de ejecucin es ligeramente mayor de el


doble.
Complejidad Cuadrtica: Aparece en ciclos doblemente anidados y si n se
duplica el tiempo de ejecucin puede aumentar hasta 4 veces.
Complejidad Cbica: Se da en ciclos de triple anidacin si n se duplica el
tiempo de ejecucin se multiplica hasta 8 veces.
Complejidad Polinomial: Estos algoritmos se enfrentan con dificultad a
problemas de tamao creciente y se encuentran en el lmite de lo tratado. La
complejidad es bastante mala.
Complejidad Exponencial: Estos algoritmos no suelen ser muy tiles en la
prctica por el elevadsimo tiempo de ejecucin. Se dan en programas
recursivos que contienen dos o ms llamadas internas.
Ejemplo grafico de la comparacin de Complejidad Cuadrtica y
Exponencial

1000
800
600
400
200

Dado un algoritmo se debe conocer su complejidad temporal clasificndolo en


uno de los rdenes de complejidad anteriores.
COMPLEJIDAD
Dado un algoritmo de debe conocer su complejidad Temporal por medio de
alguna de las dos formas de medirla, recomendndose siempre el Anlisis del
Algoritmo. La Complejidad Espacial del algoritmo depender de la memoria que
requiera, y puede ser para diferentes conceptos:
a)
b)
c)
d)

Variables estticas y Locales


Variables dinmicas
Parmetros de funciones y mtodos
Indicadores de archivos

La cantidad de memoria que consume un programa durante su ejecucin


depende de las variables que haya creando dinmicamente y adems de la
sucesin de llamadas a funciones por lo que se puede
complicar
considerablemente el anlisis.

ESTRUCTURAS DE DATOS

El caso ms sencillo de analizar ser el de los algoritmos no recursivos que no


utiliza memoria dinmica y que siguen tres reglas para el clculo de su
complejidad espacial
1.- Una variable de tipo elemental ocupa una cantidad de espacio constante
que ser de acuerdo a su tipo.
2.- Una variable de tipo tupla ocupa la suma de sus campos.
3.- Una variable de tipo tabla con n elementos ocupara n veces el espacio de
cada elemento
SELECCIN DE UN ALGORITMO
El impacto relativo de los factores que determinan el consumo de recursos de
un proceso depende de la cantidad de datos a procesar y almacenar.
1.- Para un tamao de datos de entrada pequeo el lenguaje, el compilador y el
equipo tienen un impacto considerable en el tiempo de ejecucin. Esto se debe
a que si la entrada de datos es pequea, el nmero de instrucciones que se
ejecutan tambin ser menor por lo que la velocidad individual de cada
instruccin elemental determinar en mayor medida el tiempo de ejecucin
sobre todo al comparar el mismo algoritmo en un equipo diferente.
2:- Para un tamao de datos de entrada grande, el lenguaje, el compilador y el
equipo pierden importancia y lo ms importante pasa a ser el algoritmo, esto
se debe a que un cambio en el equipo afecta el tiempo de ejecucin en un
factor constante mientras que el cambio en el algoritmo puede llegar a
incrementar, duplicar, elevar al cuadrado, al cubo etc el tiempo de ejecucin.
3.- La eficiencia es especialmente importante en: Aplicaciones Interactivas,
Sistemas operativos multiproceso, Aplicaciones que se usan reiteradamente.

También podría gustarte