Você está na página 1de 5

1.

1 Complejidad del algoritmo


Algoritmo
Secuencia finita de instrucciones, reglas o pasos que describen de forma precisa las operaciones de un ordenador debe realizar para llevar a cabo un tarea en un tiempo ms finito. [Donald E. Knuth, 1968] Descripcin de un esquema de comportamiento expresado mediante un reportorio finito de acciones y de informaciones elementales, identificadas, bien comprendidas y realizables a priori. Este repertorio se denomina lxico [Pierre Scholl, 1988]

Un algoritmo es un conjunto finito de pasos definidos, estructurados en el tiempo y formulados con base a un conjunto finito de reglas no ambiguas, que proveen un procedimiento para dar la solucin o indicar la falta de esta a un problema en un tiempo determinado. [Rodolfo Quispe-Otazu, 2004]

http://www.rodolfoquispe.org/blog/que-es-un-algoritmo.php

Clases de Complejidad
Clase P Problemas de decisin computables: Por una Mquina de Turin o un algoritmo determinista. Estos se solucionan en tiempo polinmicos. Clase NP Problemas de decisin No computables: Por una Mquina de Turin o un algoritmo determinista. Estos se solucionan en tiempo polinmicos. Problemas NP difcil Este tipo de problemas se pueden reducir en tiempo polinmico problemas NP NP-Completo Son NP difciles y estn en NP. Ejemplos de problemas:

Viajante de comercio Ciclo hamiltoniano Buscaminas Tetris Sudoku

Complejidad temporal

EXPTIME : complejidad exponencial NEXPTIME : tiempo exponencial para una mquina determinista

Complejidad espacial

L : espacio logartmico con tiempo ilimitado NL : espacio logartmo en mquina no determinista

PSPACE : espacio polinmico en mquina no deternista EXPSPACE: espacio exponencial con tiempo ilimitado

http://campusvirtual.unex.es/cala/epistemowikia/index.php?title=L%C3%ADmites_de_la_computaci%C3%B3n#Clase s_de_Complejidad

Eficiencia del algoritmo.


La caracterstica bsica que debe tener un algoritmo es que sea correcto, es decir, que produzca el resultado deseado en tiempo nito. Adicionalmente puede interesarnos que sea claro, que este bien estructurado, que sea fcil de usar, que sea fcil de implementar y que sea eciente. Entendemos por eciencia de un algoritmo la cantidad de recursos de cmputo que requiere; es decir, cul es su tiempo de ejecucin y qu cantidad de memoria utiliza. A la cantidad de tiempo que requiere la ejecucin de un cierto algoritmo se le suele llamar coste en tiempo mientras que a la cantidad de memoria que requiere se le suele llamar coste en espacio. El concepto de eciencia de un algoritmo es un concepto relativo, esto quiere decir que ante dos algoritmos correctos que resuelven el mismo problema, uno es ms eciente que otro si consume menos recursos. Por tanto, podemos observar que el concepto de eciencia y en consecuencia el concepto de coste nos permitir comparar distintos algoritmos entre ellos. El coste en tiempo de un algoritmo depende del tipo de operaciones que realiza y del coste especifico de estas operaciones. Este coste suele calcularse nicamente en funcin del tamao de las entradas para que sea independiente del tipo de mquina, lenguaje de programacin, compilador, etc. en que se implementa el algoritmo. Denicin 1.1 Dado un algoritmo A cuyo conjunto de entradas es A, su eciencia o coste (en tiempo, en espacio, en nmero de operaciones de entrada/salida, etc.) es una funcin T tal que: T:AR + 7 T ()

Utilizando la denicin anterior caracterizar a la funcin T puede ser complicado. Por ello se denen tres funciones que dependen exclusivamente del tamao de las entradas y describen resumidamente las caractersticas de la funcin T. Denicin 2.1 Sea An el conjunto de las entradas de tamao n y Tn : An R la funcin T restringida An. Los costes en caso mejor, promedio y peor se denen como sigue:

Coste en caso mejor: Tmejor(n) = mn{Tn()| An} Coste en caso promedio: Tprom(n) =P An P r().Tn(),
donde P r() es la probabilidad de ocurrencia de la entrada .

Coste en caso peor: Tpeor(n) = max{Tn()| An}


http://www.lsi.upc.edu/~duch/home/duch/analisis.pdf

1.2 Notacin aritmtica de O grande.


La notacin de O grande ignora los factores contantes, es decir, ignora si se hace una mejor o peor administracin del algoritmo, adems de ser independiente de los datos de entrada al algoritmo. Es decir, la utilidad de aplicar es encontrar un lmite superior del tiempo de ejecucin, es decir, el peor caso. Ejemplo: Algoritmo de bsqueda secuencial del mximo. T(n) = cn (donde c es el tiempo que lleva examinar una variable). int maximo (int* arreglo, int n) { int mayor=0; for(int i = 0; i < n; i++) if(arreglo[i] > mayor) mayor = arreglo[i]; return mayor; } http://www.algoritmia.net/articles.php?id=30 http://www.itnuevolaredo.edu.mx/takeyas/Apuntes/Matematicas%20para%20Computacion/Apuntes/Notacion%20O %20grande.pdf

1.3 Complejidad en el espacio y tiempo de ejecucin


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. http://cupi2.uniandes.edu.co/libros/estructuras_de_datos/index.php?option=com_content&view=article&id=71&Itemid =179

1.4 Gestin de memoria esttica


La forma ms fcil de almacenar el contenido de una variable en memoria en tiempo de ejecucin es en memoria esttica o permanente a lo largo de toda la ejecucin del programa. No todos los objetos (variables) pueden ser almacenados estticamente. Para que un objeto pueda ser almacenado en memoria esttica su tamao (nmero de bytes necesarios para su almacenamiento) ha de ser conocido en tiempo de compilacin, como consecuencia de esta condicin no podrn almacenarse en memoria esttica: * Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo de compilacin no se sabe el nmero de variables que sern necesarias. * Las estructuras dinmicas de datos tales como listas, rboles, etc. ya que el nmero de elementos que las forman no es conocido hasta que el programa se ejecuta. http://msdn.microsoft.com/es-es/library/79b3xss3.aspx

1.5 Gestin de memoria automtica


C# usa la administracin automtica de memoria, que exime a los programadores de la asignacin manual y la liberacin de la memoria ocupada por objetos. Las directivas de administracin automtica de la memoria se implementan mediante un recolector de elementos no utilizados. El ciclo de vida de la administracin de la memoria de un objeto es: 1. 2. Cuando se crea el objeto, se le asigna memoria, se ejecuta el constructor y el objeto se considera activo. En caso de que no se pueda obtener acceso al objeto o alguna de sus partes por medio de las posibles continuaciones de la ejecucin, en lugar de iniciar los destructores, el objeto dejar de considerarse en uso y quedar expuesto al proceso de destruccin. El compilador de C# y el recolector de elementos no utilizados pueden optar por analizar el cdigo para determinar qu referencias a un objeto podrn utilizarse en el futuro. Por ejemplo, si una variable local que se encuentra dentro del mbito es la nica referencia existente a un objeto, pero no se hace ninguna referencia a tal variable local en ninguna continuacin posible de la ejecucin desde el punto actual de ejecucin dentro del procedimiento, el recolector de elementos no utilizados puede tratar los objetos (aunque no necesariamente) como si ya no estuvieran en uso. 3. Cuando el objeto ya es candidato a la destruccin, en un momento posterior no especificado se ejecuta el destructor del objeto (si existe). Salvo que se realicen llamadas explcitas, el destructor del objeto slo se ejecuta una vez. 4. Si, una vez ejecutado el destructor de un objeto, las posibles continuaciones de la ejecucin (incluida la ejecucin de los destructores) no pudieran obtener acceso al objeto o a alguna de sus partes, se considerar que ya no se encuentra accesible y quedar expuesto al proceso de recoleccin. 5. Por ltimo, cuando el objeto ya es candidato para la recoleccin, en un momento posterior, el recolector de elementos no utilizados libera la memoria asociada al objeto.

El recolector de elementos no utilizados mantiene informacin acerca de la utilizacin de objetos y la utiliza para tomar decisiones sobre la administracin de memoria. http://msdn.microsoft.com/es-es/library/79b3xss3.aspx

1.6 Gestin de memoria dinmica


La memoria dinmica se refiere a aquella memoria que no puede ser definida ya que no se conoce o no se tiene idea del nmero de la variable a considerarse, la solucin a este problema es la memoria dinmica que permite solicitar memoria en tiempo de ejecucin, por lo que cuanta ms memoria se necesite, ms se solicita al sistema operativo. El sistema operativo maneja la memoria gracias al uso de punteros, por la misma naturaleza del proceso nos impide conocer el tamao de la memoria necesaria en el momento de compilar. Un dato importante es que como tal este tipo de datos se crean y se destruyen mientras se ejecuta el programa y por lo tanto la estructura de datos se va dimensionando de forma precisa a los requerimientos del programa, evitndonos as perder datos o desperdiciar memoria si hubiramos tratado de definirla cantidad de memoria a utilizar en el momento de compilar el programa. Cuando se crea un programa en el que es necesario manejar memoria dinmica el sistema operativo divide el programa en cuatro partes que son: texto, datos (estticos), pila y una zona libre o heap. En la ltima parte es donde queda la memoria libre para poder utilizarla de forma dinmica. En el momento de la ejecucin habr tanto partes libres como partes asignadas al proceso por lo cual si no se liberan las partes utilizadas de la memoria y que han quedado inservibles es posible que se agote esta parte y por lo tanto la fuente de la memoria dinmica. Tambin la pila cambia su tamao dinmicamente, pero esto no depende del programador sino del sistema operativo.

http://es.wikipedia.org/wiki/Memoria_din%C3%A1mica

Você também pode gostar