Sie sind auf Seite 1von 14

INSTITUTO TECNOLGICO DE TUXTEPEC

ESTRUCTURA DE DATOS

L.I. THOMAS TORRES RAMREZ

UNIDAD VII ANLISIS DE LOS ALGORITMOS

PRESENTA: OSVALDO APOLINAR GONZALEZ

ING. EN INFORMTICA

3ER SEMESTRE GRUPO A

TUXTEPEC OAXACA A 3 DE DICIEMBRE DE 2011

CONTENIDO:
Introduccin..3 7. Anlisis de los algoritmos .4 7.1 Complejidad en el tiempo6 7.2 Complejidad en el espacio..9 7.3 Eficiencia de los algoritmos...10 Conclusin..13 Bibliografa..14

INTRODUCCIN:
La siguiente investigacin esta basada en el tema algoritmos. Entendemos por algoritmo como un conjunto finito de instrucciones no ambiguas y efectivas que indican cmo resolver un problema, producen al menos una salida, reciben cero o ms entradas y, para ejecutarse, necesitan una cantidad finita de recursos. Una instruccin es no ambigua cuando la accin a ejecutar est perfectamente definida. El tema principal de la investigacin es el anlisis de los algoritmos: estudia la complejidad espacial y temporal de los algoritmos.

7. ANLISIS DE LOS ALGORITMOS


El anlisis de algoritmos es una parte importante de la Teora de complejidad computacional ms amplia, que provee estimaciones tericas para los recursos que necesita cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones resultan ser bastante tiles en la bsqueda de algoritmos eficientes. A la hora de realizar un anlisis terico de algoritmos es comn calcular su complejidad en un sentido asinttico, es decir, para un tamao de entrada suficientemente grande. La cota superior asinttica, y las notaciones omega y theta se usan con esa finalidad. Por ejemplo, la bsqueda binaria decimos que se ejecuta en una cantidad de pasos proporcional a un logaritmo, en O(log(n)), coloquialmente "en tiempo logartmico". Normalmente las estimaciones asintticas se utilizan porque diferentes implementaciones del mismo algoritmo no tienen porque tener la misma eficiencia. No obstante la eficiencia de dos

implementaciones "razonables" cualesquiera de un algoritmo dado estn relacionadas por una constante multiplicativa llamada constante oculta.

Tareas en el Anlisis de Algoritmos: - Determinar qu operaciones se emplean y su costo relativo. - Determinar conjuntos de datos para exhibir todos los patrones posibles de comportamiento. - Anlisis a priori: se determina una funcin (de ciertos parmetros) que acote el tiempo de cmputo del algoritmo. - Anlisis a posteriori: estadsticas reales sobre tiempo y memoria.

Tipos de Algoritmos: * Algoritmos determinsticos: El resultado de cada operacin est definido en forma nica. * Algoritmos no-determinsticos. El resultado de cada operacin esta determinado

por un conjunto de posibilidades. * Algoritmo polinomial. Es un algoritmo de complejidad polinomial o inferior. * Algoritmo No-Polinomial. Es un algoritmo de complejidad exponencial o mayor.

COMPLEJIDAD DE ALGORITMOS Si un conjunto de instrucciones tiene todas las caractersticas de un algoritmo, excepto ser finito en tiempo se le denomina proceso computacional. Los sistemas operativos son el mejor ejemplo de proceso computacional, pues estn diseados para ejecutar tareas mientras las haya pendientes, y cuando stas se terminan, el sistema operativo entra en un estado de espera, hasta que llegan ms, pero nunca termina. La funcin complejidad, f(n), donde n es el tamao del problema, da una medida de la cantidad de recursos que un algoritmo necesitar al implantarse y ejecutarse en alguna computadora. Puesto que la cantidad de recursos que consume un algoritmo crece conforme el tamao del problema se incrementa, la funcin complejidad es montona creciente (f(n) > f(m) n > m) con respecto al tamao del problema. La memoria y el tiempo de procesador son los recursos sobre los cuales se concentra todo el inters en el anlisis de un algoritmo, as pues distinguiremos dos clases de funcin complejidad: a) Funcin complejidad espacial. Mide la cantidad de memoria que necesitar un algoritmo para resolver un problema de tamao n. b) Funcin complejidad temporal. Indica la cantidad de tiempo que re- quiere un algoritmo para resolver un problema de tamao n; viene a ser una medida de la cantidad de CPU que requiere el algoritmo.

7.1 COMPLEJIDAD EN EL TIEMPO


El tiempo de Ejecucin de un programa se mide en funcin de N, lo que designaremos como T(N). Esta funcin se puede calcular fsicamente ejecutando el programa

acompaados de un reloj, o calcularse directamente sobre el cdigo, contando las instrucciones a ser ejecutadas y multiplicando por el tiempo requerido por cada instruccin. As, un sencillo cdigo como: S1; for(x = 0; x < N; x++) S2; Demanda: T(N) = t1 + t2 * N Donde t1 es el tiempo que lleva ejecutar la serie S1 de sentencias, y t2 es el que lleva la serie S2. Habitualmente todos los algoritmos contienen alguna sentencia condicional o selectiva, haciendo que las sentencias ejecutadas dependan de la condicin lgica, esto hace que aparezca ms de un valor para T(N), es por ello que debemos hablar de un rango de valores. Cuando se habla del tiempo de ejecucin de un algoritmo debe tenerse presente que el tiempo de ejecucin exacto de un programa depende de varios factores: 1.- Los datos de entrada 2.- La calidad del condigo generado por el compilador 3.- La maquina donde se ejecuta el programa 4.- La complejidad del tiempo del algoritmo base del programa

En el momento de disear y elegir entre posibles alternativas, sin embargo, los tres primero factores generalmente o no se conocan o nos vienen dados. Por lo tanto, el estudio de un algoritmo se centra en su complejidad de tiempo de ejecucin. Mejorar su eficiencia generalmente implica reducir su complejidad de tiempo de ejecucin. Cuando se estudia la complejidad de tiempo de ejecucin de un algoritmo se

define esta en funcin de los datos de entrada. El estudio sin embargo, depende del tamao de los datos de entrada, no de los datos concretos. Por ejemplo, supongamos que se requiere estudiar un algoritmo de ordenacin que, dada una lista de numero, devuelva la misma lista ordenada ascendentemente. As, si se quisiera ordenar la lista {2, 1, 3, 1, 5, 8}, se hablara de una entrada de tamao de n=6. Denotemos, pues T(n) la funcin del tiempo de ejecucin de un algoritmo con entrada de tamao n. T(n) se expresa sin unidades, ya que el tiempo de ejecucin exacto depende de muchos otros factores. T(n) representa el numero de operaciones elementales que realiza el algoritmo para obtener la solucin. Se consideran operaciones elementales las asignaciones, comparaciones,

operaciones aritmticas, etc.

Notacin asinttica: Se a descrito la eficiencia de un algoritmo mediante su funcin de ejecucin, T(n). Debido a que el tiempo de ejecucin exacto depende de factores diversos, cuando se escribe que T(n) es una determinada funcin f(n), por ejemplo f(n)=n 2 , o f(n)=n* log (n), debe entenderse nicamente que T(n) es proporcional a f(n). Este concepto de proporcionalidad entre funciones se puede representar formalmente mediante lo que se llama notacin asinttica. Esta es la notacin que se utiliza cuando se quiere describir la eficiencia de un algoritmo. Intuitivamente, la notacin asinttica sirve para indicar la velocidad de crecimiento de la funcin del tiempo de ejecucin de un algoritmo. Se dice que T(n) es O(f(n)), ledo O grande f(n), cuando la velocidad de crecimiento de T(n) esta acotada superiormente por f(n). As O (f(n)) representa el conjunto de todas las funciones g(n) que crecen, como mucho, tan rpidamente como f(n). Formalmente, este conjunto de funciones se puede definir como se muestra en la siguiente ecuacin:

Tcnicas para estimar el tiempo de ejecucin:

Para estimar el tiempo de ejecucin, se utiliza la tcnica de anlisis. Esta estimacin, se har en funcin del numero de operaciones elementales que realiza dicho algoritmo para un tamao de entrada dado. Entendiendo por operaciones elementales como aquellas operaciones cuyo tiempo de ejecucin se puede acortar superiormente por una constante. As se consideran como operaciones elementales: - Operaciones aritmticas bsicas (+. -, *, /, %) - Asignaciones variables (=) - Comparaciones lgicas o relacionales {&&, l l, <>, >=, =<, ==, !=) - Acceso a estructuras de datos estticas y dinmicas - Parmetros que llegan a los mtodos - Instrucciones de salto (break, contine) - Retorno de valores (return) - Referencia a objetos - Instrucciones condicionales - Creacin de objetos - Expresiones que con incrementos y decrementos

Complejidad Temporal: Parmetro de medicin: Se toma el tamao de la entrada n (descripcin de la instancia) para medir los requerimientos de tiempo de un algoritmo. El tiempo de ejecucin se describe como una funcin de la entrada T(n) Ejemplo: T(n)=n2+2n

7.2 COMPLEJIDAD EN EL ESPACIO


La misma idea que se utiliza para medir la complejidad en tiempo de un algoritmo se utiliza para medir su complejidad en espacio. Decir que un programa es O(N) en espacio significa que sus requerimientos de memoria aumentan

proporcionalmente con el tamao del problema. Esto es, si el problema se duplica, se necesita el doble de memoria. Del mismo modo, para un programa de complejidad O ( N2 ) en espacio, la cantidad de memoria que se necesita para almacenar los datos crece con el cuadrado del tamao del problema: si el problema se duplica, se requiere cuatro veces ms memoria. En general, el clculo de la complejidad en espacio de un algoritmo es un proceso sencillo que se realiza mediante el estudio de las estructuras de datos y su relacin con el tamao del problema. El problema de eficiencia de un programa se puede plantear como un compromiso entre el tiempo y el espacio utilizados. En general, al aumentar el espacio utilizado para almacenar la informacin, se puede conseguir un mejor desempeo, y, entre ms compactas sean las estructuras de datos, menos veloces resultan los algoritmos. Lo mismo sucede con el tipo de estructura de datos que utilice un programa, puesto que cada una de ellas lleva implcitas unas limitaciones de eficiencia para sus operaciones bsicas de administracin. Por eso, la etapa de diseo es tan importante dentro del proceso de construccin de software, ya que va a determinar en muchos aspectos la calidad del producto obtenido.

7.3 EFICIENCIA DE LOS ALGORITMOS


Con mucha frecuencia se plantea la necesidad de tener que decidir que algoritmo se debe utilizar para resolver un determinado problema, de entre un conjunto de algoritmos posibles. Una estrategia para decidir que algoritmos escoger consistira en implementar todos estos algoritmos, ejecutarlos, y escoger el mas eficiente. Esta aproximacin tiene principalmente dos inconvenientes. Por un lado, es necesario implementar un conjunto de algoritmos, aunque en realidad solo se necesita uno, lo que representa un esfuerzo considerable (generalmente prohibitivo). Por otro lado, el hecho de ejecutar una implementacin de un algoritmo en una maquina concreta y por un conjunto de datos de prueba especficos, no necesariamente aporta suficiente informacin para saber como se comportara el mismo algoritmo en una maquina diferente o con entradas diferentes. As pues el objetivo consiste en estudiar las propiedades del algoritmo a priori, e implementar solo lo que se considere mejor. La calidad de un algoritmo normalmente se mide en funcin de su eficiencia, pero tambin hay que valorar el coste de escribirlo, entenderlo y modificarlo.

La Eficiencia nos la da el Anlisis de Algoritmos: Dimensin Temporal: Medida del tiempo empleado. Dimensin Espacial: medida de los recursos invertidos.

Encontrar Algoritmos eficientes puede definir si Existe o no una Solucin al

Problema. Al Anlisis de Algoritmos se centra en el estudio de los Bucles, del cual en

ltima instancia, dependern las instrucciones a ser ejecutadas.

No se puede realizar un anlisis del nmero de Instrucciones pues son dependientes de las tecnologas (RISK, CISC). Eficiencia = F(n) Siendo n la cantidad de elementos a ser procesados

Medicin de la Eficiencia: La estimacin debe ser independiente de la plataforma y la Lenguaje con que se codificar pero debe reflejar sus diferencias. - Usamos el Orden de Magnitud (O-grande) de la Eficiencia del Tiempo y de los recursos. - Se lo complementa con la Tasa de crecimiento del programa para evaluar su comportamiento Futuro.

Cmo comparar la Eficiencia Real de 2 Algoritmos? - Programndolos, implementndolos y midiendo para el mismo lote de Prueba: el tiempo de ejecucin y los recursos utilizados. - Suele ser caro, y una vez realizado no suele ser sencillo volver atrs y corregir.

Anlisis de Rendimiento: Mediante la complejidad en el Tiempo y en el Espacio Tiempo de Ejecucin: depender del programa y de su entrada (carga de trabajo). - El tiempo medio suele ser mas realista. Para usar todos los tipos de entradas son equiprobables. - El Tiempo Mximo depende de la Carga Mxima: y no siempre se puede establecer con claridad o es estadsticamente variable

Asntotas: El anlisis de la eficiencia algortmica nos lleva a estudiar el comportamiento de los algoritmos frente a condiciones extremas. Matemticamente hablando, cuando N tiende al infinito Y , es un comportamiento asinttico. Sean g(n) diferentes funciones que determinan el uso de recursos, pudiendo existir infinidad de funciones g. Estas funciones g sern congregadas en familias, usando como criterio de agrupacin su comportamiento asinttico, este comportamiento asinttico

es similar cuando los argumentos toman valores muy grandes. Una familia de funciones que comparten un mismo comportamiento asinttico ser llamada un Orden de Complejidad. Estas familias se designan con O( log (n)). Para cada uno de estos conjuntos se suele identificar un miembro f(n) que se utiliza como representante de la familia, hablndose del conjunto de funciones g que son del orden de f(n).

CONCLUSIN:
El anlisis de algoritmos es una parte importante de la Teora de complejidad computacional mas amplia, que provee estimaciones tericas para los recursos que necesita cualquier algoritmo que resuelva un problema computacional dado. Estas estimaciones resultan ser bastante tiles en la bsqueda de algoritmos eficientes. A la hora de realizar un anlisis terico de algoritmos es conveniente calcular su complejidad en su sentido asinttico, es decir, para un tamao de entrada suficientemente grande. Lo esencial de la investigacin era hacer hincapi en la complejidad en el tiempo y espacio, as como la eficiencia de los algoritmos. Como ya se menciono anteriormente la complejidad de tiempo es mas que nada el calculo del tiempo que tarda en ejecutarse el algoritmo de igual manera la complejidad de espacio, es la memoria que ocupa dicho algoritmo y por ultimo la eficiencia nos ayuda a saber cuales son las medidas adecuadas a tomar para el uso de estos tipos de algoritmos de acuerdo al problema a resolver.

BIBLIOGRAFA:

Thomas H. Cormen, Charles E. Leiserson, Ronald R. Rivest, & Clifford Estein. Introduccin a Algoritmos, Segunda Edicin. MIT Press and McGraw-Hill, 2001. JOYANES AGUILAR, Luis. Fundamentos de Programacin, Algoritmos y Estructuras de datos. Espaa, Seg. Edicin McGraw-Hill. 1996

JESS BISBAL RIERA MANUAL DE ALGORITMOS Recursividad, Complejidad y Diseo de algoritmos Editorial UOC

Das könnte Ihnen auch gefallen