Está en la página 1de 10

ASIGNATURA: ESTRUCTURA DE DATOS.

HORARIO DE LA CLASE: 12:00pm-13:00pm.

PROFESOR: ING. JORGE MANUEL LOPEZ TELIS.

ALUMNO: JOS NGEL SNCHEZ MORALES. No. DE CONTROL: 09320754

TRABAJO: INVESTIGACION DE LA UNIDAD I (ANALISIS DE ALGORITMOS).

ESPECIALIDAD: INGENIERIA EN SISTEMAS COMPUTACIONALES.

SEMESTRE: 3. GRUPO: IS1.

PERIODO ESCOLAR: AGOSTO-DICIEMBRE 2010.

FECHA: SEPTIEMBRE 2010.

TEMAS QUE SE ENCUENTRAN DESARROLLADOS 1.1 Concepto de Complejidad de Algoritmos.

1.2 Aritmtica de Notacin O.

1.3 Complejidad Algoritmo. 1.3.1 Tiempo de Ejecucin de un Algoritmo. 1.3.2 Complejidad en Espacio.

1.4 Seleccin de un Algoritmo.

INTRODUCCIN:
Antes de que se comiencen a desarrollar los temas antes citados, dar una breve explicacin o introduccin de lo que es un algoritmo. Tal vez al escuchar esta palabra muchas personas que no tienen conocimiento alguno sobre una ciencia computacional o en ocasiones aunque la tengan empiezan a cuestionarse, siendo que se encuentran en un contacto cotidiano con el significado de esta palabra. Al hacer nfasis en que las personas se encuentran en contacto cotidiano con el significado de la palabra es porque siempre tenemos que resolver algn problema, como ejemplo podemos citar un recetario el cual es usado por un chef, que sigue los pasos que se describen en el recetario para crear un cierto platillo, otro ejemplo son los instructivos que nos especifican los pasos para armar un cierto producto. A continuacin se define Qu es un algoritmo? Un algoritmo es una serie ordenada de instrucciones, procesos o pasos que llevan a la solucin de un determinado problema, este a su vez debe ser comprensible, preciso y finito, como as tambin debe tener una entrada un proceso y una salida. Comprensible: un algoritmo debe de ser claro en la funcin que realiza, de tal manera que sea entendible para aquel que ejecute los pasos del mismo ya sea hombre o maquina. Preciso: al hablar de precisin se implica determinismo, quiere decir que el orden en que se ejecutan las instrucciones debe estar perfectamente indicado. Finito: debe de ser finito ya que debe poder realizarse, es decir debe terminar despus de una cierta cantidad finita de pasos.

UNIDAD I. ANLISIS DE ALGORITMOS 1.1 CONCEPTO DE COMPLEJIDAD DE ALGORITMOS.


Como explique en la introduccin un algoritmo es una serie ordenada de pasos, que deben ser comprensibles, lgicos y finitos, que nos llevaran a la solucin de un determinado problema. Al hablar de complejidad de algoritmos no se refiere a la dificultad de elaborar los mismos. La complejidad de algoritmos es ms que nada una comparacin de la eficiencia de dos o ms algoritmos que tienen el mismo fin, para que de esta forma se pueda seleccionar adecuadamente el algoritmo que nos solucione el problema propuesto con el menor gasto de recursos, el anlisis de los algoritmos es muy importante en lo que a computacin (programacin) respecta, de tal manera que al medir la eficiencia de un determinado algoritmo es un factor fundamental. A s mismo es importante poder analizar los requisitos de tiempo y espacio (memoria) de un algoritmo, como as tambin las lneas de cdigo con que este cuente. El anlisis de la eficiencia de un algoritmo debe ser de manera muy independiente a la potencia con la que cuente la computadora donde podr ser ejecutado. Las principales consideraciones de eficiencia fundamentales son: el tiempo y el espacio. La complejidad del espacio de un programa no es nada ms y nada menos que la cantidad de memoria que este utilizara para su ejecucin hasta que sea finalizado. De igual forma la complejidad del tiempo es valga la redundancia la cantidad de tiempo que el programa (algoritmo) requerir para ejecutar su funcin hasta la finalizacin del mismo. Para hacer un poco ms entendible lo que es la complejidad de un algoritmo sera conveniente poder aplicar algn tipo de "puntuacin " a los algoritmos, y que cuanta ms puntuacin sacara un algoritmo, pues supondremos que es mejor, esto es en cierto modo, la complejidad. Saber si un algoritmo es mejor que otro puede estudiarse desde dos puntos de vista que ya se han mencionado: un algoritmo es mejor cuanto menos tarde en resolver un problema, o bien es tanto mejor cuanta menos memoria necesite. A la idea del tiempo que consume un algoritmo para resolver un problema se le llama complejidad temporal y a la idea de la memoria que necesita el algoritmo se le llama complejidad espacial.

UNIDAD I. ANLISIS DE ALGORITMOS 1.2 ARITMTICA DE NOTACIN O.


La notacin aritmtica O es en s como la funcin utilizada para diagnosticar la eficiencia de los algoritmos. O (f (n)) = {g: N R 0 | c > 0 y N0 N: (n N0 g(n) c * f (n))} Esto se basa en tres tipos de anlisis de la notacin O: peor caso, caso promedio, mejor caso. En base a una razn de crecimiento que es la razn a la cual el costo de un algoritmo crece conforme el tamao de la entrada crece. Peor de los casos: se corresponde con el peor tiempo. T(n) es el tiempo mximo sobre las entradas. Mejor caso: lmite inferior en el tiempo. T(n) es el menor de todas las posibles entradas. Caso promedio: Es el tiempo medio esperado sobre todas las posibles entradas de tamao n. Se considera una distribucin de probabilidad sobre las entradas.

Existen rdenes de complejidad que son referentes a la notacin O Se dice que O(f(n)) define un "orden de complejidad". Escogeremos como representante de este orden a la funcin f(n) ms sencilla del mismo. As tendremos: O(1) orden constante O(log n) orden logartmico O(n) orden lineal O(n log logaritmo lineal n) O(n2) orden cuadrtico orden polinomial (a O(na) > 2) orden exponencial (a O(an) > 2) O (n!) orden factorial Es ms, se puede identificar una jerarqua de rdenes de complejidad que coincide con el orden de la tabla anterior; jerarqua en el sentido de que cada orden de complejidad superior tiene a los inferiores como subconjuntos. Si un algoritmo A se puede demostrar de un cierto orden O1, es cierto que tambin pertenece a todos los rdenes superiores; pero en la prctica lo til es encontrar el menor orden de complejidad que lo cubra.

EJEMPLO: Obtengo que la complejidad de un algoritmo es 6n3+5n+1, es correcto decir que la complejidad de ese algoritmo es del orden de O (6n3+5n+1), ya que todas la funciones de ese orden, incluida 6n3+5n+1 estn asintticamente acotadas por ella. Pero con esas reglas, tambin podemos decir que la complejidad es del orden de O (6n3+5n), y tambin del O (6n3) y tambin del orden O (n3), porque: O (6n3+5n+1) O (6n3+5n) O (6n3) O (n3) Pero normalmente, nos basta con saber que un algoritmo tiene un orden O (n3), que es uno de los rdenes de uso comn en lugar de afinar ms y decir que el orden es O (6n3+5n+1).

UNIDAD I. ANLISIS DE ALGORITMOS 1.3 COMPLEJIDAD ALGORITMO.


Complejidad de algoritmos como ya se ha definido en el tema 1.1, es la comparacin de la eficiencia de dos o ms algoritmos que han sido creados para la solucin de un determinado problema, pero cundo ser ms eficiente un algoritmo? es una buena pregunta si hasta el momento no ha quedado comprendido el tema de complejidad pues un algoritmo ser ms eficiente que otro cuando consuma la menor cantidad de recursos posibles es decir memoria y tiempo. Para entender un poco ms a continuacin pongo un ejemplo que encontr en la red (si hago nfasis en que lo encontr en la red es para evitar malos entendidos) esperando que sirva para una mejor comprensin:
El problema: Supongamos que tenemos que escribir un programa para calcular potencias naturales de 2. Para ello podemos usar las operaciones aritmticas de suma y producto. Una solucin posible sera calcular:
n

20 = 1 2 = 2 * 2n 1, para n > 0

Una alternativa sera considerar el caso n > 0 de forma diferente: sumando dos veces 2n 1 en vez de multiplicando por 2. Esto es: 20 = 1 n n1 2 =2 + 2n 1, para n > 0 Puede verse claramente que ambas soluciones son matemticamente equivalentes. A continuacin, el cdigo en lenguaje pascal de las dos soluciones (pow1 y pow2, respectivamente). Por simplicidad se ha declarado el exponente a calcular como una constante igual a 10: pow1.pas pow2.pas 1-program pow1; 1-program pow2; 2-const exp = 10; 2-const exp = 10; 3-function pow(n: integer): integer; 3-function pow(n: integer): integer; 4-begin 4-begin 5- if n = 0 then 5- if n = 0 then 6pow := 1 6pow := 1 7- else 7- else 8- pow := 2 * pow(n-1); 8- pow := pow(n-1) + pow(n-1); 9-end; 9-end;

10-begin 11- writeln(pow(exp)); 12-end.

10-begin 11- writeln(pow(exp)); 12-end.

En el caso de pow1 vemos que la primera llamada a pow se hace asignando a n el valor inicial exp, y luego en cada llamada recursiva este valor se decrementa en 1. Esto significa que para calcular 2n se harn n llamadas recursivas (multiplicando en cada caso el valor resultante por 2), lo cual insumir n unidades de tiempo. En el caso de pow2 la situacin es diferente: en cada llamada a pow se hacen dos nuevas llamadas recursivas, para luego sumar los resultados. Esto significa que para calcular 2n se harn 2n llamadas recursivas (sumando en cada caso los valores resultantes), lo cual insumir 2n unidades de tiempo. De este anlisis se desprende que pow1 requiere de un tiempo del orden de n (lineal), en tanto que pow2 requiere de un tiempo del orden de 2n (exponencial). En trminos prcticos todo esto significa, que pow1 es un programa que resuelve el problema de forma razonable (aunque podra ser mucho ms eficiente), en tanto que pow2 es (al menos si pensamos en valores grandes de n) una decepcin. Supongamos que tenemos una computadora capaz de ejecutar 1.000 operaciones por segundo. La siguiente tabla muestra aproximadamente cunto tardara la ejecucin de cada uno de nuestros programas para distintos valores de n. n pow1 pow2 0,01 10 1 seg seg. 0,02 20 17 min seg 0,03 30 12 das seg 0,04 40 34 aos seg 0,05 50 35.700 aos seg 3.000 millones de 10 1 seg veces 0 la edad del universo

1.3.1 TIEMPO DE EJECUCIN DE UN ALGORITMO


El tiempo de ejecucin de un algoritmo se considera como la caracterstica ms importante al demostrar la eficiencia. El tiempo de ejecucin de un algoritmo debe medirse de acuerdo a la cantidad de datos que se introducirn para que este los procese, ya que no es lo mismo ordenar 100 datos que 100000 datos. Este tiempo de ejecucin se mide en base a N que vendra siendo el nmero de datos a procesar, que se llama T(N). El valor de esta funcin se puede calcular de dos formas: 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 para cada instruccin.

T(N)= t1+t2...+tn*N Donde: t1, t2tn: son el tiempo que lleva ejecutar la serie de sentencias a la que pertenecen. N: numero de datos. Un punto que tambin es necesario tener en mente al querer medir el tiempo de ejecucin es conocer del hardware (procesador, reloj, memoria, disco, etc.) y software (sistema operativo, lenguaje, compilador, etc.).

1.3.2 COMPLEJIDAD EN ESPACIO


La complejidad en el espacio es otro de los recursos para medir la eficiencia de un algoritmo, la eficiencia en la memoria es la cantidad de espacio que requerir el algoritmo para que pueda ser ejecutado, este espacio que se utiliza ms que nada es el que ocupan todas las variables definidas dentro del algoritmo. Pero como sabemos existen dos tipos de memoria, la esttica y la dinmica, para el clculo de memoria esttica que el algoritmo requerir se suma la cantidad de memoria que ocupen las variables declaradas dentro del algoritmo. Para la memoria dinmica el clculo tiende a ser ms complicado ya que la cantidad de memoria est en constante variacin o movimiento, dependiendo as de cada ejecucin del algoritmo.

UNIDAD I. ANLISIS DE ALGORITMOS 1.4 SELECCIN DE UN ALGORITMO.


La seleccin de un algoritmo puede parecer que es algo muy fcil de hacer, pero no lo es ya que tenemos que atender las caractersticas que debe poseer un algoritmo mencionadas al inicio (introduccin) como tambin la cantidad de recursos que este consume tiempo y espacio (memoria), para as poder elegir adecuadamente el mejor algoritmo. Porque antes de escoger un algoritmo hay que tomar en cuenta sus caractersticas, bueno pues es adecuado ya que debe ser entendible para cualquier tipo de persona y no solo para los programadores, debe de estar muy bien estructurado es decir que las instrucciones lleven un orden, y la ms importante es que tenga una finalizacin. Tambin al escoger un algoritmo debemos analizar que este use adecuadamente los recursos de la computadora donde se ejecutara con la mayor rapidez posible y con un uso eficaz de la memoria tanto dinmica como esttica.

CONCLUSIN
En conclusin la complejidad algortmica nos da a entender que antes de la elaboracin de un programa, es adecuado elegir un buen algoritmo, el cual utilice la menor cantidad de recursos, siendo los ms importantes el tiempo y el espacio, ya que no todos los algoritmos son iguales aunque tengan como propsito el solucionar un mismo fin. Todo esto atendiendo tambin a ciertas funciones que nos facilitan un poco ms el entender el trmino de complejidad.

LINCOGRAFIA

http://latecladeescape.com/w0/basico/que-es-lacomplejidad-de-un-algoritmo.html#ixzz0xy6iNiEf http://www.lab.dit.upm.es/~lprg/material/apuntes/o/inde x.html http://www.programacionfacil.com/estructura_datos_csha rp:tiempo_ejecucion_algoritmo www.lcc.uma.es/~av/Libro/CAP1.pdf

http://www.algoritmia.org/index.php? option=com_content&task=view&id=28&Itemid=1 http://www.monografias.com/trabajos27/complejidadalgoritmica/complejidad-algoritmica.shtml http://www.scribd.com/doc/2873588/Estructura-de-datosAntologia www.ganimides.ucm.cl/haraya/doc/Clases.ppt