Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La Eficiencia de Los Programas
La Eficiencia de Los Programas
ndice General
1 2 Introduccin .......................................................................................................................... 2 El coste temporal y espacial de los programas.................................................................... 2 2.1 2.2 2.3 3 El coste temporal medido en funcin de tiempos de las operaciones elementales .... 2 El coste como una funcin del tamao del problema .................................................. 3 La funcin de coste temporal definida por conteo de pasos ....................................... 4
Complejidad asinttica.......................................................................................................... 4 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 Comparacin de los costes de los algoritmos ............................................................. 4 Uso de la notacin asinttica ....................................................................................... 6 Anlisis por casos.................................................................................................... 6 Notacin asinttica en el mejor y peor caso............................................................ 6 Reglas generales ......................................................................................................... 6 Anlisis del coste de los algoritmos iterativos ......................................................... 7 Anlisis del coste de los algoritmos recursivos ....................................................... 7
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 espacial o medida del espacio que ocupa en memoria a lo largo de su ejecucin; sera la suma de los tamaos de todas las variables que implcita o explcitamente se utilizan. 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: en un entorno de programacin determinado y para un conjunto de datos de entrada adecuado.
Es importante recalcar que ambos tipos de anlisis son complementarios, y no excluyentes; realizar un anlisis terico de su coste evita en ocasiones implementaciones tan laboriosas como intiles. Ms an, la eficiencia es un criterio a incorporar en la estrategia de diseo de un programa; independientemente del entorno donde se ejecute, un programa debe ser eficiente. En lo que resta nos centraremos exclusivamente en el estudio del coste temporal y espacial a priori de los programas.
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: Coste del algoritmo A1: TA1 = ta + top donde ta es el coste de la operacin de asignacin y top es el coste de una operacin aritmtica, en concreto de una multiplicacin. Coste del algoritmo A2: TA2 = ta + ta + (n+1) * tc + n * ta + 2 * n * top donde tc es el coste de la comparacin y top es en este caso el coste de la suma. Coste del algoritmo A3: TA3 = ta + ta + (n+1) * tc + n * ta + n * (n+1) * tc + n2 * ta + 2 * n2 *top + n * top
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: Coste del algoritmo A1: TA1 = k1 de esta forma estamos indicando que el coste del algoritmo A1 es constante, independiente de n. Coste del algoritmo A2: TA2 = k2 * n + k3 de esta forma indicamos que el coste del algoritmo va a depender de n de una forma lineal. Coste del algoritmo A3: TA3 = k4 * n2 + k5 * n + k6 de esta forma indicamos que el coste del algoritmo va a depender de forma cuadrtica de n.
La decisin sobre qu es un paso en un determinado algoritmo o programa no es nica; en cualquier caso, la nica diferencia que podra haber entre diferentes anlisis por pasos seran constantes multiplicativas o aditivas. En el apartado siguiente veremos cmo estas diferencias no tienen importancia en el estudio que se propone.
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 c logn log n n nlogn n n 2
2 3 n 2
Nombre constante logartmica logartmica al cuadrado lineal 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:
La descarga de un fichero de 80 kbytes requiere 52 seg., la descarga de un fichero el doble de grande requiere del orden de 102 seg, es decir casi el doble. Esta propiedad, por la cual el tiempo de ejecucin es esencialmente proporcional al tamao de la entrada, caracteriza a un algoritmo lineal. Como puede verse en las grficas que se presentan a continuacin, las curvas no lineales conducen a tiempos de ejecucin mayores. Esto indica que el coste lineal es, de entre todos los que se muestran en estas grficas, el ms favorable.
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.
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.
Por tanto, utilizaremos la notacin asinttica O para catalogar el algoritmo en su comportamiento en el peor de los casos, y la notacin para el caso mejor: T(n) O(g(n)) T(n) (h(n)) => T(n) es como mximo del orden de g(n) => T(n) es como mnimo del orden de h(n)
Por ltimo, si caso mejor y peor coinciden, podremos utilizar la notacin (g(n)).
Determinar el tamao del problema; esto es, estudiar de qu parmetros va a depender el coste. Analizar si, para un tamao del problema fijo, existen instancias significativas para el coste. Obtener la funcin de coste. Si existen instancias significativas, el estudio de costes se particularizar para el caso peor y el caso mejor. El estudio de costes en el caso peor da una cota superior para el coste del algoritmo, utilizaremos en este caso la notacin O.