Вы находитесь на странице: 1из 3

Anlisis de algoritmos Un algoritmo es un conjunto de instrucciones claramente especificadas que el ordenador debe seguir para resolver un problema.

El anlisis de algoritmos nos permite determinar la cantidad de recursos, tales como tiempo y espacio que ocupara el algoritmo. El tiempo necesario para ejecutar un algoritmo depende casi siempre de la cantidad de datos que el mismo debe procesar (funcin del tamao de la entrada). Cuando el tiempo de ejecucin es esencialmente proporcional al tamao de la entrada, caracteriza un algoritmo lineal (funcin lineal), y es el escenario ms favorable. Una funcin cubica es una funcin cuyo termino dominante es N3 multiplicado por alguna constante, de igual manera, una funcin cuadrtica tiene como termino dominante N2 por alguna constante, y una funcin lineal tiene como termino dominante N por una constante. Se mide el ndice de crecimiento de las funciones y se justifica por estas 3 razones: Para un N suficientemente grande, el valor de la funcin esta completamente determinado por su trmino dominante. El valor exacto del coeficiente del trmino dominante no se conserva al cambiar de mquina. La notacin O nos permite establecer un orden relativo entre funciones, comparando los trminos dominantes (Utilizaremos la notacin O para representar el ndice de crecimiento).

Raramente existe un nico algoritmo para resolver un problema determinado, por lo que es importante que el programador sea capaz de reconocer y elegir el algoritmo ms eficiente. Funcin c log N log2 N N N log N N2 N3 2N Nombre Constante Logartmica Logartmica al cuadrado Lineal N log N Cuadrtica Cbica Exponencial

La eficiencia de un algoritmo es la propiedad la cual un algoritmo debe alcanzar la solucin al problema en el tiempo mas corto posible o utilizando la cantidad mas pequea de recursos fsicos y que sea compatible con su exactitud y correccin. La eficiencia del algoritmo se examina como una funcin del nmero de elementos que tiene que ser procesados, esto es: f(n) = eficiencia 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. Ejemplo: int suma = 0; for (int i = 1; i <= n; i++) suma = suma + n; 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: f(n) = n Bucles algortmicos Ejemplo: int i = 1; while( i < n) i = i * 2; El nmero de iteraciones es una funcin del multiplicador, en este caso 2. Generalizando el anlisis, se puede decir que las iteraciones de los bucles algortmicos de determinan por la siguiente frmula: f(n) = [log2n] Bucles anidados En los bucles anidados el total de iteraciones es 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. Y sus formulas respectivas son: Lineal logartmico f(n) = [nlog2n] Dependiente cuadrtica f(n) = n(n+1)/2 Cuadrtica f(n) = n2

La medida del rendimiento de un programa se consigue mediante la complejidad del espacio y el tiempo de un programa. La complejidad del espacio de un programa es la cantidad de memoria que se necesita para ejecutarlo hasta la complecin (terminacin). La complejidad del tiempo de un programa es la cantidad de tiempo de computadora que se necesita para ejecutarlos. Se utiliza una funcin, T(n), para representar el nmero de unidades de tiempo tomadas por un programa o algoritmo para cualquier entrada de tamao n. Es posible valorar T(n) como el nmero de

sentencias ejecutadas por el programa, y la evaluacin se podr efectuar desde diferentes puntos de vista: El peor caso, el mejor caso y el caso medio. Aunque la ecuacin de una funcin para obtener una funcin pueda ser compleja, el factor dominante que se debe considerar para determinar el orden de magnitud del resultado es el denominado factor de eficiencia. Por consiguiente, no se necesita determinar la medida completa de eficiencia, basta con calcular el factor que determina la magnitud. Este factor se define como O grande, que representa est en el orden y se expresa como O(n), es decir, en el orden de n. Con la notacin O se expresa una aproximacin de la relacin entre el tamao de un problema y la cantidad de proceso necesario para hacerlo. Por ejemplo, si f(n) = n2 -2n + 3 entonces f(n) es O(n2)

Una vez definido T(n) y O(n) se dice que T(n) es O(g(n)) si g(n) acota superiormente a T(n). De modo mas riguroso, T(n) es O(g(n)) si existe un entero n0 y una constante c > 0 tal que para todos los enteros n n0 se tiene que T(n) cg(n). Ejemplo: Dada la funcin f(n) = n4 + 2n3 + 3n2 + n + 5, encontrar su O grande Para valores de n 1 se puede demostrar que: f(n) = n4 + 2n3 + 3n2 + n + 5 n4 + 2n4 + 3n4 + n4 + 5n4 = 12n4 Escogiendo la constante c = 12 y n0 = 1 se satisface la desigualdad f(n) 12n4. Entonces se puede asegurar que: f(n) = O(n4) La notacin O grande se puede obtener de f(n) utilizando los siguientes pasos: 1. En cada trmino, establecer el coeficiente del trmino en 1. 2. Mantener el trmino mayor de la funcin y descartar los restantes. Los trminos se ordenan de menor a mayor: log2n n nlog2n n2 n3 ... nk 2n n! Ejemplo: Calcular la funcin O grande de eficiencia de la siguiente funcin: f(n) = (n(n-1))/2 = (n2 - n)/2 = n2/2 n/2 1. Se eliminan todos los coeficientes y se obtiene: n2 n 2. Se eliminan los factores mas pequeos: n2 3. La notacin O correspondiente es: O(f(n)) = O(n2)

Вам также может понравиться