MEMORIA ESTATICA Y DINAMICA INTRODUCCIÓN Tu ordenador probablemente usa ambas, memoria estática y memoria dinámica al mismo tiempo, pero las usa por dierentes ra!ones debido al coste entre los dos tipos de memoria RAM" Si entiendes como los c#ips de RAM dinámica y RAM estática uncionan internamente, es ácil $er por%u& el coste es dierente, y tambi&n podrás entender su nombre"
MEMORIA ESTÁTICA 'as t&cnicas de asi(naci)n de memoria estática son sencillas" 'a asi(naci)n de memoria pued puede e #ace #acers rse e en tiem tiempo po de comp compililac aci)n i)n y los ob*e ob*eto toss está están n $i(e $i(ent ntes es desd desde e %ue %ue comien!a la e*ecuci)n del pro(rama #asta %ue termina" En los len(ua*es %ue permiten la e+istencia de subpro(ramas, y siempre %ue todos los ob*etos de estos subpro(ramas puedan puedan almace almacenar narse se estáti estáticam cament ente e se alo*a alo*a en la memori memoria a estáti estática ca un re(ist re(istro ro de acti$aci)n correspondiente a cada uno de los subpro(ramas" Estos re(istros de acti$aci)n contendrán las $ariables locales, parámetros ormales y $alor de$uelto por la unci)n"
Consideraciones Error en tiempo de e*ecuci)n de -ndice uera del ran(o" Se debe conocer con con anticipaci)n el tama.o tama.o de la estructura" estructura" Se (uardan en memorias adyacentes" /ectores, /ectores, matrices, cubos, re(istros, arc#i$os"
Ventajas 'a $elocidad de acceso es alta" 0ara retener los datos solo necesita estar ener(i!ada" ')(ica simple" Son más áciles de dise.ar"
Desventajas: No se puede modiicar el tama.o de la estructura en tiempo de e*ecucion" No es )ptimo con (randes cantidades de datos" Desperdicio de memoria cuando no se utili!a en su totalidad totalidad del tama.o $12334 " Menor capacidad, debido a %ue cada celda de almacenamiento re%uiere más transistores" Mayor costo por bit. Mayor consumo de 0otencia
MEMORIA DINÁMICA 'a memoria dinámica es un espacio de almacenamiento %ue se solicita en tiempo de e*ecuci)n" De esa manera, a medida %ue el proceso $a necesitando espacio para más l-neas, $a solicitando más memoria al sistema operati$o para (uardarlas" El medio para mane*ar la memoria %ue otor(a el sistema operati$o, es el puntero, puesto %ue no podemos saber en tiempo de compilaci)n d)nde nos dará #uecos el sistema operati$o 5en la memoria de nuestro 0C6" 7n dato importante es %ue como tal este tipo de datos se crean y se destruyen mientras se e*ecuta el pro(rama y por lo tanto la estructura de datos se $a dimensionando de orma precisa a los re%uerimientos del pro(rama, e$itándonos as- perder datos o desperdiciar memoria si #ubi&ramos tratado de deinirla cantidad de memoria a utili!ar en el momento de compilar el pro(rama" Cuando se crea un pro(rama en el %ue es necesario mane*ar memoria dinámica el sistema operati$o di$ide el pro(rama en cuatro partes %ue son8 te+to, datos 5estáticos6, pila y una !ona libre o #eap" En el momento de la e*ecuci)n #abrá tanto partes libres como partes asi(nadas al proceso por lo cual si no se liberan las partes utili!adas de la memoria y %ue #an %uedado inser$ibles es posible %ue se 9a(ote: esta parte y por lo tanto la uente de la memoria dinámica" Tambi&n la pila cambia su tama.o dinámicamente, pero esto no depende del pro(ramador sino del sistema operati$o"
VENTAJAS: Es posible disponer de un espacio de memoria arbitrario %ue dependa de inormaci)n dinámica 5disponible s)lo en e*ecuci)n68 Toda esa memoria %ue mane*a es implementada por el pro(ramador cuando uese necesario" Otra $enta*a de la memoria dinámica es %ue se puede ir incrementando durante la e*ecuci)n del pro(rama" Esto permite, por e*emplo, traba*ar con arre(los dinámicos" Es memoria %ue se reser$a en tiempo de e*ecuci)n" Su tama.o puede $ariar durante la e*ecuci)n del pro(rama y puede ser liberado mediante la unci)n ree"
DESVENTAJAS: Es di-cil de implementar en el desarrollo de un pro(rama o aplicaci)n" Es di-cil implementar estructuras de datos comple*as como son los tipos recursi$os 5árboles, (raos, etc"6"0or ello necesitamos una orma para solicitar y liberar memoria para nue$as $ariables %ue puedan ser necesarias durante la e*ecuci)n de nuestros pro(ramas8 ;eap" 7na des$enta*a de la memoria dinámica es %ue es más di-cil de mane*ar" 'a memoria dinámica puede aectar el rendimiento" 0uesto %ue con la memoria estática el tama.o de las $ariables se conoce en tiempo de compilaci)n, esta inormaci)n está incluida en el c)di(o ob*eto (enerado" Cuando se reser$a memoria de manera dinámica, Se tienen %ue lle$ar a cabo $arias tareas, como buscar un blo%ue de memoria libre y almacenar la posici)n y tama.o de la memoria asi(nada, de manera %ue pueda ser liberada más adelante" Todo esto representa una car(a adicional, aun%ue esto depende de la implementaci)n y #ay t&cnicas para reducir su impacto"
Anáisis de a!orit"os# 7n al(oritmo es una secuencia de pasos l)(ica para encontrar la soluci)n de un problema" Todo al(oritmo debe contar con las si(uientes caracter-sticas8 preciso, deinido y inito" 0or 0reciso, entenderemos %ue cada paso del al(oritmo tiene una relaci)n con el anterior y el si(uiente< un al(oritmo es Deinido, cuando se e*ecuta más de una $e! con los mismos datos y el resultado es el mismo< y =inito, indica %ue el al(oritmo cuenta con una serie de pasos deinidos o %ue tiene un in" ;ablando de estructuras de datos podemos decir %ue los al(oritmos se(>n su unci)n se di$iden en8
Al(oritmos de ordenamiento
Al(oritmos de b>s%ueda"
7n al(oritmo de ordenamiento, es el %ue pone los elementos de una lista o $ector en una secuencia 5ascendente o descendente6 dierente a la entrada, es decir, el resultado de salida debe ser una permutaci)n 5reordenamiento6 de la entrada %ue satisa(a la relaci)n de orden re%uerida" 7n al(oritmo de b>s%ueda, es a%uel %ue está dise.ado para encontrar la soluci)n de un problema booleano de e+istencia o no de un elemento en particular dentro de un con*unto inito de elementos 5estructura de datos6, es decir al inali!ar el al(oritmo este debe decir si el elemento en cuesti)n e+iste o no en ese con*unto, además, en caso de e+istir, el al(oritmo podr-a proporcionar la locali!aci)n del elemento dentro del con*unto" Concepto de comple*idad de al(oritmos" 'a mayor-a de los problemas %ue se plantean en la actualidad se pueden resol$er con al(oritmos %ue diieren en su eiciencia" Dic#a dierencia puede ser irrele$ante cuando el n>mero de datos es pe%ue.o pero cuando la cantidad de datos es mayor la dierencia crece" E*emplo8 Suma de ? y 23 primero n>meros naturales"
2@@B@? 23
B
B
?5?@26J 23
B
23523@26J
tiempo 2@@B@?@@@F@G@H@23
H
'a complejidad de un algoritmo o complejidad computacional , estudia los recursos y esuer!os re%ueridos durante el cálculo para resol$er un problema los cuales se di$iden en8 tiempo de ejecución y espacio en memoria " El actor tiempo, por lo (eneral es más
importante %ue el actor espacio, pero e+isten al(oritmos %ue orecen el peor de los casos en un menor tiempo %ue el me*or de los casos, lo cual no es la me*or de las soluciones" El actor tiempo de e*ecuci)n de un al(oritmo depende de la cantidad de datos %ue se %uieren procesar, una orma de apreciar esto es con las cuatro cur$as %ue se presentan en las (ráicas de la i(ura 2"2"
Como se puede apreciar en las (ráicas, entre mayor se al n>mero de datos mayor tiempo se aplica en las (ráicas a6, b6 y c6, lo cual no ocurre con la (ráica d6, por lo tanto podemos deducir %ue una unci)n %ue se acer%ue más al e*e de las + es más constante y eiciente en el mane*o de (randes cantidades de datos"
Arit"$tica de a notaci%n O# 'a notaci)n asint)tica 9O: 5(rande6 se utili!a para #acer reerencia a la $elocidad de crecimiento de los $alores de una unci)n, es decir, su utilidad radica en encontrar un l-mite superior del tiempo de e*ecuci)n de un al(oritmo buscando el peor caso"
'a deinici)n de esta notaci)n es la si(uiente8
f(n) y g(n) unciones %ue representan enteros no ne(ati$os a n>meros reales" Se dice %ue f(n) es O(g(n)) si y solo si #ay una constante real c>0 y un entero constante n0 >=1 tal %ue f(n)<=cg(n) para todo entero n>= n0 " Esta deinici)n se ilustra en la i(ura 2""
Nota8 el orden de ma(nitud de una unci)n es el orden del t&rmino de la unci)n más (rande respecto de n" 'a notaci)n asint)tica 9O: (rande se utili!a para especiicar una cota inerior para la $elocidad de crecimiento de T5n6, y si(niica %ue e+iste una constante c tal %ue T5n6 es mayor o i(ual a c5(5n66 para un n>mero ininito de $alores n" Re(la para la notaci)n O Deinici)n 5O6T5n6 es O55n66 si e+isten las constantes positi$as c y n 3 tales %ue n K n3 se $eriica T5n6L c5n6" Esta deinici)n airma %ue e+iste un punto inicial n 3 tal %ue para todos los $alores de n despu&s de ese punto< el tiempo de e*ecuci)n T5n6 está acotado por al(>n m>ltiplo de 5n6" 'a e+presi)n matemática de lo anterior es T5n6 O55n66 y el -ndice de crecimiento de T5n6 es L al crecimiento de 5n6" T5n6 Tiempo de e*ecuci)n del al(oritmo" =5n6 Tiempo al introducir los datos al al(oritmo"
COM&'E(IDAD Tiempo de e*ecuci)n de un al(oritmo" El tiempo de e*ecuci)n de un al(oritmo, se reiere a la suma de los tiempos en los %ue el pro(rama tarda en e*ecutar una a una todas sus instrucciones, tomando en cuenta %ue cada instrucci)n re%uiere una unidad de tiempo, dic#o tiempo se puede calcular en unci)n de n 5el n>mero de datos6, lo %ue se denomina T5n6 Si #acemos un análisis de orma directa al pro(rama para determinar el tiempo de e*ecuci)n del mismo, debemos deinir el con*unto de operaciones primiti$as %ue son independientes del len(ua*e de pro(ramaci)n %ue se use" Al(unas de las unciones primiti$as son las si(uientes8
Asi(naci)n de un $alor a una $ariable"
'lamada a un m&todo"
E*ecuci)n de una operaci)n aritm&tica"
Comparar dos n>meros"
0oner -ndices a un arre(lo"
Se(uir una reerencia de ob*eto"
Retorno de un m&todo"
En orma espec-ica, una operaci)n primiti$a corresponde a una instrucci)n en el len(ua*e de ba*o ni$el, cuyo tiempo de e*ecuci)n depende del ambiente de #ardare y sotare, pero es constante" E*emplo" M&todo %ue retorna el n>mero mayor de un arre(lo de n elementos" public int Mayor56 int mayarr134< or5ind3< indLarr"len(t#< ind@@6
i5arr1ind4Kmay6
mayarr1ind4< return may<
0ara este e*emplo se pueden encontrar dos )rmulas %ue determinen el tiempo de e*ecuci)n, la primera representa el peor de los casos y la se(unda el me*or de los casos" 0ara ser creaci)n se si(ue el pro(rama8
'a iniciali!aci)n de la $ariable mayarr134, corresponde a dos unidades de tiempo"
'a iniciali!aci)n del ciclo or a(re(a otra unidad de tiempo"
'a condici)n del ciclo or se e*ecuta desde 2 #asta el tama.o del arre(lo lo cual a(re(a el n>mero de unidades del tama.o del arre(lo" El cuerpo del ciclo or se e*ecuta el tama.o del arre(lo 2 $eces, para este caso el n>mero de operaciones del cuerpo del ciclo pueden ser o ? 5condici)n del i dos, asi(naci)n a may dos e incremento y asi(naci)n dos6 en el peor o me*or de los casos respecti$amente" 0or consi(uiente el cuerpo del ciclo contribuye con ?5tama.o del arre(lo 26 o 5tama.o del arre(lo 26 unidades de tiempo"
Y el retorno de may aporta una unidad de tiempo"
Con todo lo anterior se lo(ra obtener las si(uientes ormulas 5tama.o del arre(lo o arr"len(t# se cambian por n68
T5n6 @2@n@5n26@2 Fn
0eor de los casos"
T5n6 @2@n@?5n26@2 n
Me*or de los casos"
Co")ejidad en es)acio# 'a complejidad de espacio, se reiere a la memoria %ue utili!a un pro(rama para su e*ecuci)n< es decir el espacio de memoria %ue ocupan todas las $ariables propias del pro(rama" Dic#a memoria se di$ide en Memoria estática y Memoria dinámica " 0ara calcular la memoria estática, se suman la cantidad de memoria %ue ocupa cada una de las $ariables declaradas en el pro(rama" Tomando en cuenta los tipos de datos primiti$os del len(ua*e de pro(ramaci)n *a$a podemos determinar el espacio %ue re%uiere cada una de las $ariables de un pro(rama, de acuerdo a lo si(uiente8
Tipo de dato primiti$o
Tama.o en bits
Tama.o en Pytes
byte
G
2
c#ar
2
s#ort
2
int
B
?
loat
B
?
lon(
?
G
double
?
G
El cálculo de la memoria dinámica, no es tan simple ya %ue depende de cada e*ecuci)n del pro(rama o al(oritmo y el tipo de estructuras dinámicas %ue se est&n utili!ando"
Seecci%n de *n a!orit"o# 7na de las caracter-sticas primordiales en la selecci)n de un al(oritmo es %ue este sea sencillo de entender, calcular, codiicar y depurar, as- mismo %ue utilice eicientemente los recursos de la computadora y se e*ecute con la mayor rapide! posible con un eica! uso de memoria dinámica y estática" Tambi&n para seleccionar correctamente el me*or al(oritmo es necesario reali!ar estas pre(untas8
!u" grado de orden tendrá la información #ue $as a manejar%
Si la inormaci)n $a a estar casi ordenada y no %uieres complicarte, un al(oritmo sencillo como el ordenamiento burbu*a será suiciente" Si por el contrario los datos $an a estar muy desordenados, un al(oritmo poderoso como Quicsort puede ser el más indicado" Y si no puedes #acer una presunci)n sobre el (rado de orden de la inormaci)n, lo me*or será ele(ir un al(oritmo %ue se comporte de manera similar en cual%uiera de estos dos casos e+tremos" !u" cantidad de datos $as a manipular%
Si la cantidad es pe%ue.a, no es necesario utili!ar un al(oritmo comple*o, y es preerible uno de ácil implementaci)n" 7na cantidad muy (rande puede #acer pro#ibiti$o utili!ar un al(oritmo %ue re%uiera de muc#a memoria adicional" !u" tipo de datos #uieres ordenar%
Al(unos al(oritmos s)lo uncionan con un tipo espec-ico de datos 5enteros, enteros positi$os, etc"6 y otros son (enerales, es decir, aplicables a cual%uier tipo de dato" !u" tama&o tienen los registros de tu lista%
Al(unos al(oritmos reali!an m>ltiples intercambios 5burbu*a, inserci)n6" Si los re(istros son de (ran tama.o estos intercambios son más lentos"
PIP'IORA=A #ttps8JJsites"(oo(le"comJsiteJestdat*i%J#omeJunidad$ii #ttp8JJadrianestructuradedatos"blo(spot"m+J322J3?Jmemoriaestaticaydinamica"#tml