Está en la página 1de 8

PLANTEL SAN NGEL

Gonzlez Aguirre C. Jacqueline

Trabajo de Investigacin Algortmica y Estructura de datos

Prof.: Luis Roberto Prez Macas Grupo: 11131 Lic en Informtica Junio 2012

CONTENIDO
Introduccin.....................................................................................................................................................2 Jerarqua de memoria .....................................................................................................................................3 Tiempo de acceso en memoria .......................................................................................................................4 Tiempo de espera........................................................................................................................................4 Tiempo real..................................................................................................................................................4 Complejidad de los algoritmos......................................................................................................................5 Espacial........................................................................................................................................................5 Temporal......................................................................................................................................................6 Comportamiento Asinttico.......................................................................................................................6 Estructuras abstractas de datos........................................................................................................................6 Conclusiones...............................................................................................................................................7 Bibliografa..................................................................................................................................................8

Introduccin
La memoria (tambin llamada almacenamiento) se refiere a parte de los componentes que integran una computadora. Son dispositivos que retienen datos informticos durante algn intervalo de tiempo. Las memorias de computadora proporcionan una de las principales funciones de la computacin moderna, la retencin o almacenamiento de informacin. Es uno de los componentes fundamentales de todas las computadoras modernas que, acoplados a una unidad central de procesamiento (CPU por su sigla en ingls, central processing unit), implementa lo fundamental del modelo de computadora de Arquitectura de von Neumann, usado desde los aos 1940. En la actualidad, memoria suele referirse a una forma de almacenamiento de estado slido conocido como memoria RAM (memoria de acceso aleatorio, RAM por sus siglas en ingls random access memory) y otras veces se refiere a otras formas de almacenamiento rpido pero temporal. De forma similar, se refiere a formas de almacenamiento masivo como discos pticos y tipos de almacenamiento magntico como discos duros y otros tipos de almacenamiento ms lentos que las

memorias RAM, pero de naturaleza ms permanente. Estas distinciones contemporneas son de ayuda porque son fundamentales para la arquitectura de computadores en general. Adems, se refleja una diferencia tcnica importante y significativa entre memoria y dispositivos de almacenamiento masivo, que se ha ido diluyendo por el uso histrico de los trminos "almacenamiento primario" (a veces "almacenamiento principal"), para memorias de acceso aleatorio, y "almacenamiento secundario" para dispositivos de almacenamiento masivo. Esto se explica en las siguientes secciones, en las que el trmino tradicional "almacenamiento" se usa como subttulo por conveniencia. La palabra algoritmo proviene del nombre del matemtico llamado Abu Abdullah Muhammad bin Musa al-Khwarizmi (hay muchas variantes para el nombre al usar el alfabeto latin, tales como AlKhorezmi, Al-Khwarizmi, Al-Khawarizmi, Al-Khawaritzmi o Al-Khowarizmi) que vivi entre los siglos VIII y IX. Entender la complejidad es importante porque a la hora de resolver muchos problemas, utilizamos algoritmos ya diseados. Saber valorar su valor de complejidad puede ayudarnos mucho a conocer cmo se va a comportar el algoritmo e incluso a escoger uno u otro.

Jerarqua de memoria
En un ordenador hay una jerarqua de memorias atendiendo al tiempo de acceso y a la capacidad que normalmente son factores contrapuestos por razones econmicas y en muchos casos tambin fsicas. Comenzando desde el procesador al exterior, es decir en orden creciente de tiempo de acceso y capacidad, se puede establecer la siguiente jerarqua: - Registros de procesador: Estos registros interaccionan continuamente con la CPU (porque forman parte de ella). Los registros tienen un tiempo de acceso muy pequeo y una capacidad mnima, normalmente igual a la palabra del procesador (1 a 8 bytes). - Registros intermedios: Constituyen un paso intermedio entre el procesador y la memoria, tienen un tiempo de acceso muy breve y muy poca capacidad. - Memorias cach: Son memorias de pequea capacidad. Normalmente una pequea fraccin de la memoria principal. y pequeo tiempo de acceso. Este nivel de memoria se coloca entre la CPU y la memoria central. Hace algunos aos este nivel era exclusivo de los ordenadores grandes pero actualmente todos los ordenadores lo incorporan. Dentro de la memoria cach puede haber, a su vez, dos niveles denominados cach on chip, memoria cach dentro del circuito integrado, y cach on board, memoria cach en la placa de circuito impreso pero fuera del circuito integrado, evidentemente, por razones fsicas, la primera es mucho ms rpida que la segunda. Existe tambin una tcnica, denominada Arquitectura Harvard, en cierto modo contrapuesta a la idea de Von Newmann, que utiliza memorias cach separadas para cdigo y datos. Esto tiene algunas ventajas como se ver en este captulo. - Memoria central o principal: En este nivel residen los programas y los datos. La CPU lee y escribe datos en l aunque con menos frecuencia que en los niveles anteriores. Tiene un tiempo de acceso relativamente rpido y gran capacidad.

- Extensiones de memoria central: Son memorias de la misma naturaleza que la memoria central que amplan su capacidad de forma modular. El tiempo de similar, a lo sumo un poco mayor, al de la memoria central y su capacidad puede ser algunas veces mayor. - Memorias de masas o auxiliares: Son memorias que residen en dispositivos externos al ordenador, en ellas se archivan programas y datos para su uso posterior. Tambin se usan estas memorias para apoyo de la memoria central en caso de que sta sea insuficiente (memoria virtual). Estas memorias suelen tener gran capacidad pero pueden llegar a tener un tiempo de acceso muy lento. Dentro de ellas tambin se pueden establecer varios niveles de jerarqua.

Tiempo de acceso en memoria


El periodo medio de tiempo (en nanosegundos) que se necesita para la memoria RAM para completar un acceso y comenzar otro. El tiempo de acceso se compone de latencia (el tiempo que se necesita para iniciar una solicitud de datos y se preparan para acceder a l) y los tiempos de transferencia. Chips DRAM para ordenadores personales han acceso a tiempos de 50 a 150 nanosegundos (milmillonsimas de segundo). RAM esttica (SRAM) tiene tiempos de acceso tan bajo como 10 nanosegundos. Idealmente, los tiempos de acceso de la memoria debe ser lo suficientemente rpido para mantenerse al da con la CPU. Si no, la CPU se pierda un cierto nmero de ciclos de reloj, lo que hace ms lento. Un nanosegundo (ns o nanosegundos) es = 10 -9 mil millonsima de segundo.

Tiempo de espera
El tiempo que tarda la memoria en proporcionar el dato, es la suma de las tres latencias: ACTIVE, RAS y CAS. Como se comenta anteriormente, antes de enviar el dato/instruccin a donde deba ir, se deben leer varias celdas de memoria, por lo tanto hay que pasar de una celda a otra, e ir esperando su correspondiente latencia CAS. Si cada tablero tiene, por ejemplo 64 celdas, y se van a leer 20 posiciones, las latencias totales a esperar son:

1 X ACTIVE (ya que se leen menos de 64 celdas, que son las que tiene el tablero completo) 3 X RAS (ya que cada fila tiene 8 posiciones) 20 X CAS (ya que se van a leer 20 celdas)

La latencia ms importante, como queda patente, es la latencia CAS, y cuanto menor sea esta, mejor rendimiento tendr el ordenador en general.

Tiempo real
Sea una placa base con Front Side Bus o FSB a 200 MHz. El tiempo de cada ciclo de reloj es: F = 1 / T --> 200 * 10^6 = 1 / T --> T = 1 / 200 * 10^6 --> T = 5 * 10^-9 s = 5 NanoSegundos NOTA: las antiguas memorias RAM que empleaban los Pentium I eran de 70 ns, las EDO que eran las mismas un poco evolucionadas eran de 60 ns, as se puede calcular bastante fcilmente el fsb de aquellos sistemas. Las primeras SDRAM que aparecieron, las PC 100, eran de 10 ns, evidentemente el fsb de aquellos sistemas era de 100 MHz.

Complejidad de los algoritmos


Entender la complejidad es importante porque a la hora de resolver muchos problemas, utilizamos algoritmos ya diseados. Saber valorar su valor de complejidad puede ayudarnos mucho a conocer cmo se va a comportar el algoritmo e incluso a escoger uno u otro. Primeramente, debemos tener claro qu es un algoritmo. Podemos entender por algoritmo una secuencia de instrucciones cuyo objetivo es la resolucin de un problema. El trmino clave aqu es el de problema. La complejidad o eficiencia de un algoritmo se define como el orden de magnitud de los recursos informticos que requiere el algoritmo para ser ejecutado La complejidad de los algoritmos nos representa o dice el tiempo de ejecucin de cualquier programa en base a los 'n' datos de entrada. Por lo tanto la complejidad de cualquier algoritmo se expresa en los siguientes trminos: T(n) Funcin de la complejidad la cual se interpreta de la siguiente manera: El tiempo de ejecucin est dado por los n datos de entrada El estudio de la complejidad de los algoritmos permite evaluar su coste, y as: 1 Comparar algoritmos entre s. 2 Averiguar si un algoritmo es factible. Un algoritmo ser mas eficiente comparado con otro, siempre que consuma menos recursos, como el tiempo y espacio de memoria necesarios para ejecutarlo. La eficiencia de un algoritmo puede ser cuantificada con las siguientes medidas de complejidad: Complejidad Temporal o Tiempo de ejecucin: Tiempo de cmputo necesario para ejecutar algn programa. Complejidad Espacial: Memoria que utiliza un programa para su ejecucin, La eficiencia en memoria de un algoritmo indica la cantidad de espacio requerido para ejecutar el algoritmo; es decir, el espacio en memoria que ocupan todas las variables propias al algoritmo. Para calcular la memoria esttica de un algoritmo se suma la memoria que ocupan las variables declaradas en el algoritmo. Para el caso de la memoria dinmica, el clculo no es tan simple ya que, este depende de cada ejecucin del algoritmo. Este anlisis se basa en las Complejidades Temporales, con este fin, para cada problema determinaremos una medida N, que llamaremos tamao de la entrada o nmero de datos a procesar por el programa, intentaremos hallar respuestas en funcin de dicha N. El concepto exacto que cuantifica N depender de la naturaleza del problema, si hablamos de un array se puede ver a N como el rango del array, para una matriz, el nmero de elementos que la componen; para un grafo, podra ser el nmero de nodos o arcos que lo arman, no se puede establecer una regla para N, pues cada problema acarrea su propia lgica y complejidad.

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

Temporal
Se denomina complejidad temporal a la funcin T(n) que mide el nmero de instrucciones realizadas por el algoritmo para procesar los n elementos de entrada. Cada instruccin tiene asociado un costo temporal. Afecta al tiempo de ejecucin el orden en que se procesen los elementos de entrada. Podra considerarse que los valores de los n casos que se presentan como entrada son los correspondientes: a un caso tpico, o a un caso promedio, o de peor caso. El peor caso es el ms sencillo de definir (el que demore ms para cualquier entrada), pero si se desea otros tipos de entrada habra que definir qu se considera tpico, o la distribucin de los valores en el caso promedio El tiempo en que tarda un algoritmo para encontrar la solucin.

Comportamiento Asinttico
Comportamiento limite conforme al tamao del problema se incrementa. Determina el tamao del problema que puede ser resuelto por un algoritmo. Se denomina complejidad temporal a la funcin T(n) que mide el nmero de instrucciones realizadas por el algoritmo para procesar los n elementos de entrada. Cada instruccin tiene asociado un costo temporal. Afecta al tiempo de ejecucin el orden en que se procesen los elementos de entrada. Podra considerarse que los valores de los n casos que se presentan como entrada son los correspondientes: a un caso tpico, o a un caso promedio, o de peor caso. El peor caso es el ms sencillo de definir (el que demore ms para cualquier entrada), pero si se desea otros tipos de entrada habra que definir qu se considera tpico, o la distribucin de los valores en el caso promedio.

Estructuras abstractas de datos

Abstraccin
Operacin mediante la cual la inteligencia llega a formar conocimiento conceptual comn a un conjunto de entidades, separando de ellos los datos contingentes e individuales para atender a lo que los constituye esencialmente. Es decir, aislar mentalmente considerar por separado las cualidades de un objeto. Estructuras de datos y Tipos de Datos Abstractos Tipo de datos Un tipo de datos es una coleccin de valores Tipo de Datos Abstracto (TDA) Es un tipo de datos definido de forma nica mediante un tipo y un conjunto dado de operaciones definidas sobre el tipo. Estructura de datos Implementacin fsica de un tipo de datos abstracto. Un ejemplos de esto conceptos es el siguiente: En algunos lenguajes de programacin que implementan el tipo Booleano, ste est formado por los valores {True, False}, pero no es un tipo de datos abstracto ya que sobre l no se han definido las

operaciones para manipularlo. Sin embargo, el tipo Booleano junto con los operadores booleanos (AND, OR, NOT) constituyen un tipo de datos abstracto. Encapsulado Es consecuencia misma del proceso de abstraccin y consiste en ocultar la implementacin de las operaciones que manipulan los objetos, ofreciendo nicamente una interfaz que permita realizar operaciones, funciones de acceso y variables de entrada salida. (Ej. Representacin enteros en diferentes notaciones, little endian o big endian). Normalmente existe ms de un TDA para resolver un problema concreto. La eleccin de uno u otro depender de algunas caractersticas del problema a resolver (disponibilidad de memoria, velocidad de resolucin, etc). Ello implica que cada implementacin de un TDA presentar un coste diferente. El coste de un TDA no viene determinado por un slo factor. En primer lugar se deber analizar el almacenamiento requerido por los datos y la cantidad de ellos que sern manejados. El segundo aspecto a considerar ser el coste de las operaciones bsicas. En el caso de los rboles, por ejemplo, sern los costes de las operaciones de insercin, bsqueda y eliminacin. Para calcular el coste de esas operaciones debern emplearse tcnicas de anlisis de algoritmos.

Conclusiones La complejidad es una medida que nos da una idea de cmo es ese crecimiento, resultando que para la mayor parte de algoritmos, ese crecimiento se puede enmarcar en un determinado "orden", ya que todas las funciones que estn en un orden crecen de manera similar cuando los valores de la talla se van haciendo grandes. Para cada algoritmo, son interesantes un par de medidas de complejidad: en el peor caso (que sealamos con la notacin O (Omicron, "Big-O"), y en el mejor, para el que utilizamos la notacion (Omega). En especial, suele ser ms imprescindible conocer el peor caso, ya que nos da una idea de qu es lo que puede pasar cuando las cosas van realmente mal. Toda esta teora de la complejidad, que tuvo un gran auge hace algunos aos, ha sido criticada desde muchos puntos de vista. La verdad es que es muy til en un nivel terico, pero un nivel prctico tampoco conviene obsesionarse demasiado. Es necesario tener en cuenta que todo esto tiene que ver con lmites cuando el tamao de los problemas es muy grande y teniendo en cuenta el peor de los casos. A efectos prcticos, si estamos seguros de que el tamao de nuestros problemas es pequeo, incluso un algoritmo con una complejidad "intratable" puede obtener soluciones en un tiempo razonable. Adems, muchos algoritmos con una elevada complejidad en el peor caso, resulta que no se comportan tan mal en la prctica, ya que muchas veces los problemas que se resuelven con l no son el peor caso. A veces, incluso se manipulan un poco los problemas para que nunca presenten el peor caso, o se aplican tcnicas que ahorren trabajo al algoritmo (heursticas, podas, etc). La complejidad del algoritmo es la misma, pero en promedio se comportan mucho mejor que lo que

cabra esperar vista su complejidad en el peor caso, simplemente porque no se suele llegar al peor caso. Por ltimo, comentar que existen otras medidas de complejidad que las vistas hasta aqu, que son simplemente mximos y mnimos tericos cuando la talla del problema tiende a un nmero muy grande. Y tambin, cuando un algoritmo se quiere probar "en la prctica" se aplican otran tcnicas, principalmente teniendo en cuenta la probabilidad que tiene un problema en aparecer o no. Por ejemplo, los algoritmos de ordenacin de arrays ms sencillos tienen una complejidad mxima terica de O(n2). Uno de los peores casos que se pueden presentar es que el array est ordenado completamente al revs de como queremos... pero en una aplicacin real es muy poco probable que esto ocurra... con lo que a veces la realidad no es tan mala, especialmente cuando los problemas no tienen una talla muy elevada. Sobre la complejidad espacial que se mencionaba al principio podemos actuar de la misma manera, solo que en lugar de contar instrucciones, contamos las piezas de memoria dinmica que se utilizan. sto es, las que se solicitan del espacio del heap, de memoria secundaria, o las que que quedan atrapadas en la pila de ejecucin cuando se usa recursividad. Sin embargo, su estudio suele tener menos interes, porque el tiempo es un recurso mucho ms valioso que el espacio. Bibliografa

Ricardo Baeza Yates. Computacin: de los Juegos a los Algoritmos, y de la Teora a la Prctica. Mayo 2003 Ricardo Baeza Yates. Algoritmia. Mayo 1995 Eduardo Ren Rodrguez vila. El Correcto y Completo Desarrollo de un Algoritmo. Mayo 2004 Wikipedia. Algoritmo. Wikipedia. Agosto 2007

También podría gustarte