Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La Eficiencia de Los Programas PDF
La Eficiencia de Los Programas PDF
ndice General
1
Introduccin .......................................................................................................................... 2
2.1
2.2
2.3
Complejidad asinttica.......................................................................................................... 4
3.1
3.2
3.2.1
3.2.2
3.3
3.3.1
3.3.2
1 Introduccin
Habitualmente se dispone de varios programas que resuelven un mismo problema. Para decidir
cul es el mejor, un criterio objetivo de comparacin es el de eficiencia: el programa ms
eficiente, el mejor, ser aquel que menos recursos requiera para su ejecucin. Visto que los
recursos bsicos de un ordenador son la memoria y el tiempo de CPU, la eficiencia de un
programa se expresa en trminos de:
su coste temporal o una medida del tiempo empleado por ste para ejecutarse y dar
un resultado a partir de los datos de entrada.
A partir de estas definiciones, los costes de un programa concreto dependen de dos tipos de
factores. A saber,
1. Factores propios del programa utilizado, como son su estrategia de resolucin o los tipos
de datos que emplea.
2. Factores que dependen del entorno de programacin donde se vaya a ejecutar el
programa, como son el tipo de computador, el lenguaje de programacin utilizado, el
compilador que se utiliza, la carga del sistema, etc.
Por tanto, se pueden seguir dos aproximaciones para establecer el coste de un programa dado:
1. Anlisis terico o a priori: clculo del coste en funcin de los factores propios del
programa, y por lo tanto, independiente del entorno de programacin.
2. Anlisis experimental o a posteriori: medida del tiempo, en segundos, y memoria, en
bytes, empleados en la ejecucin del programa:
Algoritmo A1:
m n*n;
Algoritmo A2:
m 0;
desde i 1 hasta n hacer
m m+n;
fin_desde
Algoritmo A3:
m 0;
desde i 1 hasta n hacer
desde j 1 hasta n hacer
m m+1;
fin_desde
fin_desde
Si se define el coste temporal de un algoritmo como la suma de los costes de las operaciones
que implica, tenemos los costes siguientes:
Si queremos comparar los costes de estos algoritmos resulta bastante difcil, ya que los
tiempos de las operaciones pueden variar significativamente en funcin del entorno de
programacin utilizado; por otra parte, el estudio de costes as planteado requiere un
considerable esfuerzo de conteo. Una primera simplificacin consiste en independizar las
funciones de coste de los tiempos de ejecucin de las operaciones elementales. De esta forma,
las funciones de coste anteriores quedaran:
3 Complejidad asinttica
3.1 Comparacin de los costes de los algoritmos
El coste de un algoritmo se expresa como una funcin T(n) no decreciente de la talla del
problema. Por lo tanto comparar costes es comparar funciones no decrecientes de las que nos
interesa slo su tasa de crecimiento. Por ejemplo, si T(n) es un polinomio, entonces el
monomio de mayor grado del mismo es el que da el aspecto de la curva de crecimiento.
En la siguiente tabla se muestran, en orden creciente de tasa de crecimiento, distintas
funciones que describen comnmente el tiempo de ejecucin de los algoritmos.
Funcin
Nombre
constante
logn
logartmica
log n
logartmica al cuadrado
lineal
nlogn
nlogn
cuadrtica
cbica
exponencial
Supongamos que se est descargando un fichero de Internet, de forma que hay un retraso
inicial de 2 seg. para establecer la conexin y despus la descarga se realiza a razn de 1.6
kbytes/seg. Si el tamao del fichero es de N kbytes, el tiempo de descarga viene descrito por la
frmula lineal:
Una funcin cbica es una funcin cuyo trmino dominante es n3 multiplicado por alguna
constante. Una funcin cuadrtica tiene como trmino dominante n2 por alguna constante, y
una funcin lineal tiene como trmino dominante n por alguna constante. El trmino dominante
de la funcin nlogn es n veces el logaritmo de n; la funcin logaritmo crece muy lentamente,
ms lentamente que cualquier raz.
En las figuras siguientes se presentan cuatro funciones tpicas en el anlisis de algoritmos:
lineal, nlogn, cuadrtico y cbico, sobre distintos tamaos del problema, la primera desde 1
hasta 100 y la segunda desde 1.000 hasta 10.000.
Coste del algoritmo en el caso peor: es la complejidad del mismo para la instancia del
problema que presente el coste mayor.
Coste del algoritmo en el caso mejor: es la complejidad del mismo para la instancia del
problema que presente el coste menor.
Coste promedio del algoritmo: a la media de los costes de todas las instancias del
problema.
En general, el estudio del coste promedio de los algoritmos es difcil de realizar, tanto analtica
como experimentalmente, la principal dificultad reside en conocer la distribucin de
probabilidad sobre las instancias del problema.
Diremos que el coste de un algoritmo T(n) pertenece a O(g(n)) cuando T(n) no superar,
para grandes tallas, un mltiplo de g(n). En otras palabras, T(n) no crece asintticamente
ms rpido que g(n), es decir, g(n) por una constante es una cota superior de T(n).
Diremos que el coste de un algoritmo T(n) pertenece a (h(n)) cuando T(n) superar, para
grandes tallas, un mltiplo de g(n). En otras palabras, T(n) crece asintticamente ms
rpido que h(n), es decir, h(n) por una constante es una cota inferior de T(n).
T(n) (h(n))
Por ltimo, si caso mejor y peor coinciden, podremos utilizar la notacin (g(n)).
Analizar si, para un tamao del problema fijo, existen instancias significativas para el
coste.