Sie sind auf Seite 1von 3

1.

4 Manejo de memoria
La administración de memoria de una computadora es una tarea fundamental debido a que la
cantidad de memoria es limitada. El sistema operativo es el encargado de administrar la
memoria del sistema y compartirla entre distintos usuarios y/o aplicaciones. El RTS (Run Time
System) de un lenguaje de programación administra la memoria para cada programa en
ejecución.

1.4.1 Memoria estática.


Define la cantidad de memoria necesaria para un programa durante el tiempo de compilación.
El tamaño no puede cambiar durante el tiempo de ejecución del programa. Algunos lenguajes
de programación utilizan la palabra static para especificar elementos del programa que deben
almacenarse en memoria estática.

1.4.2 Memoria dinámica.


Las variables dinámicas son aquellas que crecen de tamaño o se reducen durante la ejecución
de un programa. Estas se almacenan en un espacio de memoria llamado heap. El heap se
localiza en la región de memoria que esta encima del stack. Algunos lenguajes de
programación permiten que el programador asigne y desasigne manualmente la memoria.
Java utiliza un recolector de basura. (listas, pilas, colas, arboles, grafos).

1.5 Análisis de algoritmos.


Estudio teórico de la eficiencia de un algoritmo.

Eficiencia: Medida del coste en el uso de recursos que necesita el algoritmo para llevar a cabo
su tarea.

Recursos más importantes:

 Tiempo de ejecución

 Espacio de almacenamiento

La medida se denomina complejidad del algoritmo.

Otros aspectos (contemplados en otras asignaturas):

o Funcionalidad o Facilidad de uso


o Robustez o Extensibilidad
o Modularidad o Corrección
o Mantenibilidad

1.5.1 Complejidad del tiempo.


Se refiere a la suma de los tiempos en los que el programa tarda en ejecutar una de todas sus
instrucciones.

Período transcurrido entre el inicio y la finalización del algoritmo:

* Tiempo de ejecución constante. Significa que la mayoría de las instrucciones se


ejecutan una vez o muy pocas.
* logN. Tiempo de ejecución logarítmico. Se puede considerar como una gran
constante. La base del logaritmo (en informática la más común es la base 2) cambia la
constante, pero no demasiado. El programa es más lento cuanto más crezca N, pero es
inapreciable, pues logN no se duplica hasta que N llegue a N2.
* N. Tiempo de ejecución lineal. Un caso en el que N valga 40, tardará el doble que
otro en que N valga 20. Un ejemplo sería un algoritmo que lee N números enteros y
devuelve la media aritmética.
* N•logN. El tiempo de ejecución es N•logN. Es común encontrarlo en algoritmos
como Quick Sort y otros del estilo dividen y vencerás. Si N se duplica, el tiempo de
ejecución es ligeramente mayor del doble.
* N2. Tiempo de ejecución cuadrático. Suele ser habitual cuando se tratan pares de
elementos de datos, como por ejemplo un bucle anidado doble. Si N se duplica, el
tiempo de ejecución aumenta cuatro veces. El peor caso de entrada del algoritmo
Quick Sort se ejecuta en este tiempo.
* N3. Tiempo de ejecución cúbico. Como ejemplo se puede dar el de un bucle anidado
triple. Si N se duplica, el tiempo de ejecución se multiplica por ocho.
* 2N. Tiempo de ejecución exponencial. No suelen ser muy útiles en la práctica por el
elevadísimo tiempo de ejecución. El problema de la mochila resuelto por un algoritmo
de fuerza bruta ”simple vuelta atrás” es un ejemplo. Si N se duplica, el tiempo de
ejecución se eleva al cuadrado.

1.5.2 Complejidad del espacio.


La cantidad (la medida varía según la máquina) que necesita el algoritmo para su ejecución; es
decir, el espacio en memoria que ocupan todas las variables propias al algoritmo. Para calcular
la memoria estática de un algoritmo se suma la memoria que ocupan las variables declaradas
en el algoritmo. Para el caso de la memoria dinámica, el cálculo no es tan simple ya que, este
depende de cada ejecución del algoritmo.

1.5.3 Eficiencia de algoritmos.


Estudia los recursos y esfuerzos requeridos durante el cálculo para resolver un problema.

La eficiencia la podemos medir en:

Tiempos de ejecución.

Este depende de:

1. La entrada al programa.

2. Calidad del código hacia el compilador.

3. Rapidez de las instrucciones de máquina. (capacidad de procesamiento del


ordenador).

4. Complejidad de tiempo del algoritmo.

La forma de medición del tiempo de ejecución está establecida básicamente en la cantidad de


instrucciones que un algoritmo posea, ya sean estas básicas y/o elementales.
Bibliografía:
https://coggle.it/diagram/WL-lXqyOUgABgW7y/t/estructura-de-datos-unidad-1-a-las-
estructuras-de-datos

https://slideplayer.es/slide/27648/

https://www.infor.uva.es/~cvaca/asigs/doceda/tema1.pdf

http://estructura-u1.blogspot.com/2009/10/algoritmos.html

https://rvargass.wordpress.com/unidad-i-algoritmos-de-busqueda-y-ordenamiento/eficiencia-
de-los-algoritmos/

Das könnte Ihnen auch gefallen