Sunteți pe pagina 1din 12

INSTITUTO TECNOLGICO SUPERIOR DE TIERRA BLANCA

INGENIERA EN SISTEMAS COMPUTACIONALES

ING. EVA MORA COLORADO

ESTRUCTURA DE DATOS

UNIDAD VII: ANLISIS DE LOS ALGORITMOS

JOS ERNESTO CASTRO CHVEZ

TIERRA BLANCA, VERACRUZ; 29 DE SEPTIEMBRE DE 2012


ESTRUCTURA DE DATOS Pgina 1

NDICE
INTRODUCCIN ............................................................................................................................. 3

UNIDAD 7: ANLISIS DE LOS ALGORITMOS................................................................................... 4

7.1 COMPLEJIDAD EN EL TIEMPO.............................................................................................. 6

7.2 COMPLEJIDAD EN EL ESPACIO............................................................................................. 8

7.3 EFICIENCIA DE LOS ALGORITMOS........................................................................................ 9

CONCLUSIN.............................................................................................................................. 12

ESTRUCTURA DE DATOS

Pgina 2

INTRODUCCIN

Un algoritmo es un conjunto prescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad.

En este reporte, se habla sobre la forma en que se crean o modifican los algoritmos, al igual que la complejidad y la forma en el que pueden estar implementados.

Los subtemas expuestos son Complejidad en el tiempo, Complejidad en el espacio y Eficiencia del algoritmo, de los cuales se tratar de dar una explicacin breve y entendible.

ESTRUCTURA DE DATOS

Pgina 3

UNIDAD 7: ANLISIS DE LOS ALGORITMOS

Un algoritmo es una secuencia de pasos lgica para encontrar la solucin de un problema. Todo algoritmo debe contar con las siguientes caractersticas: preciso, definido y finito. Por Preciso, entenderemos que cada paso del algoritmo tiene una relacin con el anterior y el siguiente; un algoritmo es Definido, cuando se ejecuta ms de una vez con los mismos datos y el resultado es el mismo; y Finito, indica que el algoritmo cuenta con una serie de pasos definidos o que tiene un fin. Hablando de estructuras de datos podemos decir que los algoritmos segn su funcin se dividen en: -Algoritmos de ordenamiento y -Algoritmos de bsqueda. Un algoritmo de ordenamiento, es el que pone los elementos de una lista o vector en una secuencia (ascendente o descendente) diferente a la entrada, es decir, el resultado de salida debe ser una permutacin (reordenamiento) de la entrada que satisfaga la relacin de orden requerida. Un algoritmo de bsqueda, es aquel que est diseado para encontrar la solucin de un problema booleano de existencia o no de un elemento en particular dentro de un conjunto finito de elementos (estructura de datos), es decir al finalizar el algoritmo este debe decir si el elemento en cuestin existe o no en ese conjunto, adems, en caso de existir, el algoritmo podra proporcionar la localizacin del elemento dentro del conjunto.

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
ESTRUCTURA DE DATOS Pgina 4

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. La mayora de los problemas que se plantean en la actualidad se pueden resolver con algoritmos que difieren en su eficiencia. Dicha diferencia puede ser irrelevante cuando el nmero de datos es pequeo pero cuando la cantidad de datos es mayor la diferencia crece. Ejemplo: Suma de 4 y 10 primero nmeros naturales. 1+2+3+4 = 10 3 tiempo 1+2+3+4+5+6+7+8+9+10 = 55 9 3 10*(10+1)/2 = 55 3 4*(4+1)/2 = 10

ESTRUCTURA DE DATOS

Pgina 5

7.1 COMPLEJIDAD EN EL TIEMPO


El factor tiempo de ejecucin de un algoritmo depende de la cantidad de datos que se quieren procesar. 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 El tiempo de ejecucin de un algoritmo, se refiere a la suma de los tiempos en los que el programa tarda en ejecutar una a una todas sus instrucciones, tomando en cuenta que cada instruccin requiere una unidad de tiempo, dicho tiempo se puede calcular en funcin de n (el numero de datos), lo que se denomina T(n). Si hacemos un anlisis de forma directa al programa para determinar el tiempo de ejecucin del mismo, debemos definir el conjunto de operaciones primitivas, que son independientes del lenguaje de programacin que se use. Algunas de las funciones primitivas son las siguientes:

Asignacin de un valor a una variable. Llamada a un mtodo. Ejecucin de una operacin aritmtica. Comparar dos nmeros. Poner ndices a un arreglo. Seguir una referencia de objeto. Retorno de un mtodo.

ESTRUCTURA DE DATOS

Pgina 6

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 nmero 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

ESTRUCTURA DE DATOS

Pgina 7

7.2 COMPLEJIDAD EN EL ESPACIO


La complejidad de espacio, se refiere a la memoria que utiliza un programa para su ejecucin; es decir el espacio de memoria que ocupan todas las variables propias del programa. Dicha memoria se divide en Memoria esttica y Memoria dinmica. Para calcular la memoria esttica, se suman la cantidad de memoria que ocupa cada una de las variables declaradas en el programa. Tomando en cuenta los tipos de datos primitivos del lenguaje de programacin java podemos determinar el espacio que requiere cada una de las variables de un programa, de acuerdo a lo siguiente: Tipo de dato primitivo byte char short int float long double Tamao en bits 8 16 16 32 32 64 64 Tamao en Bytes 1 2 2 4 4 8 8

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.

ESTRUCTURA DE DATOS

Pgina 8

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 ms 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 cmo 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.

ESTRUCTURA DE DATOS

Pgina 9

La Eficiencia que 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.

ESTRUCTURA DE DATOS

Pgina 10

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).

ESTRUCTURA DE DATOS

Pgina 11

CONCLUSIN
El anlisis de los algoritmos, sirve para decidir de forma ms segura, la mejor forma de implementar los algoritmos en un lenguaje, las condiciones y los tipos de datos que se usarn. Que es ms conveniente y que no durante la creacin de esto. Y por qu no, tambin la forma ms rpida y sencilla de crearlos. En cuanto a la complejidad en el tiempo, se dice solo del tiempo en el que se llevara a cabo la ejecucin de un algoritmo, la forma en la que se debe crear para que su ejecucin sea ms rpida y no ocupe mucho espacio, que es donde entra la complejidad en el espacio, donde decidiremos qu tipos de datos usar, de manera correcta, para que no haya un desperdicio de memoria.

ESTRUCTURA DE DATOS

Pgina 12

S-ar putea să vă placă și