Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Save to My Library
Look up keyword or section
Like this
82Activity
0 of .
Results for:
No results containing your search query
P. 1
Estructura de Datos (Programacion Facil)

Estructura de Datos (Programacion Facil)

Ratings: (0)|Views: 19,981|Likes:

More info:

Published by: Genaro Alberto Gómez Chi on Aug 28, 2009
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

08/18/2013

pdf

text

original

 
1
Estructura de Datos
UNIDAD 1: Análisis de Algoritmos
 
Concepto Complejidad Algoritmos
La resolución práctica de un problema exige por una parte un algoritmo o método de resolucióny por otra un programa o codificación de aquel en un ordenador real.Ambos componentes tienen su importancia, pero la del algoritmo es absolutamente esencial,mientras que la codificación puede muchas veces pasar a nivel de anécdota.A efectos prácticos o ingenieriles, nos deben preocupar los recursos físicos necesarios para queun programa se ejecute.Aunque puede haber muchos parámetros, los mas usuales son el tiempo de ejecución y lacantidad de memoria (espacio).Ocurre con frecuencia que ambos parametros están resolver en T segundos y/o con M bytes dememoria?En lo que sigue nos centramos casi siempre en el parametro tiempo de ejecución, si bien lasideas desarrolladas son fácilmente aplicables a otro tipo de recursos.Para cada problema determinaremos un medida N de su tamaño (por fijados por otras razonesy se plantea la pregunta inversa: ¿cual es el tamano del mayor problema que puedo número de datos)e intentaremos hallar respuestas en función de dicho N.
El concepto exacto que mide N depende de la naturaleza del problema.
Así, para un vector se suele utizar como N su longitud; para una matriz, el número de elementosque la componen; para un grafo, puede ser el número de nodos (a veces es mas importante considerarel número de arcos, dependiendo del tipo de problema a resolver), en un archivo se suele usar elnúmero de registros, etc.Es imposible dar una regla general, pues cada problema tiene su propia lógica de costo.
Tiempo de Ejecución
Una medida que suele ser útil conocer es el tiempo de ejecución de un programa en función deN, lo que denominaremos T(N).Esta función se puede medir físicamente (ejecutando el programa, reloj en mano), o calcularsesobre el código contando instrucciones a ejecutar y multiplicando por el tiempo requerido por cadainstrucción.Así, un trozo sencillo de programa como:
 
2
S1; for (int i= 0; i < N; i++) S2;RequiereT(N)= t1 + t2*NSiendo
t1 el tiempo que lleve ejecutar la serie “S1” de sentencias, y t2 el que lleve la serie “S2”.
Prácticamente todos los programas reales incluyen alguna sentencia condicional, haciendo quelas sentencias efectivamente ejecutadas dependan de los datos concretos que se le presenten.Esto hace que más que un valor T (N) debamos hablar de un rango de valoresTmin (N)
T(N)
Tmax(N)Los extremos son habitualmente conocidos como:
“caso peor” y “caso mejor”.Entre ambos se hallara algun “caso promedio” o más frecuente.Cualquier fórmula T(N) incluye referencias al parámetro N y a una serie de constantes “Ti” qu
edependen de factores externos al algoritmo como pueden ser la calidad del código generado por elcompilador y la velocidad de ejecución de instrucciones del ordenador que lo ejecuta.Dado que es fácil cambiar de compilador y que la potencia de los ordenadores crece a un ritmovertiginoso (en la actualidad, se duplica anualmente), intentaremos analizar los algoritmos con algunnivel de independencia de estos factores; es decir, buscaremos estimaciones generales ampliamenteválidas.
UNIDAD 2: Manejo de Memoria
 
Memoria Estática
La forma más fácil de almacenar el contenido de una variable en memoria en tiempo deejecución es en memoria estática o permanente a lo largo de toda la ejecución del programa.No todos los objetos (variables) pueden ser almacenados estáticamente.Para que un objeto pueda ser almacenado en memoria estática su tamaño (número de bytesnecesarios para su almacenamiento) ha de ser conocido en tiempo de compilación, como consecuenciade esta condición no podrán almacenarse en memoria estática:Los objetos correspondientes a procedimientos o funciones recursivas, ya que en tiempo decompilación no se sabe el número de variables que serán necesarias.Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que el número deelementos que las forman no es conocido hasta que el programa se ejecuta.Las técnicas de asignación de memoria estática son sencillas.
 
3
A partir de una posición señalada por un puntero de referencia se aloja el objeto X, y se avanzael puntero tantos bytes como sean necesarios para almacenar el objeto X.La asignación de memoria puede hacerse en tiempo de compilación y los objetos están vigentesdesde que comienza la ejecución del programa hasta que termina.En los lenguajes que permiten la existencia de subprogramas, y siempre que todos los objetosde estos subprogramas puedan almacenarse estáticamente se aloja en la memoria estática un registrode activación correspondiente a cada uno de los subprogramas.Estos registros de activación contendrán las variables locales, parámetros formales y valordevuelto por la función.Dentro de cada registro de activación las variables locales se organizan secuencialmente. Existeun solo registro de activación para cada procedimiento y por tanto no están permitidas las llamadasrecursivas. El proceso que se sigue cuando un procedimiento p llama a otro q es el siguiente:1. p evalúa los parámetros de llamada, en caso de que se trate de expresiones complejas,usando para ello una zona de memoria temporal para el almacenamiento intermedio. Por ejemplos, sí la llamada a q es q((3*5)+(2*2),7) las operaciones previas a la llamada propiamente dicha en códigomáquina han de realizarse sobre alguna zona de memoria temporal. (En algún momento debe haberuna zona de memoria que contenga el valor intermedio 15, y el valor intermedio 4 para sumarlos acontinuación). En caso de utilización de memoria estática ésta zona de temporales puede ser común atodo el programa, ya que su tamaño puede deducirse en tiempo de compilación.2. q inicializa sus variables y comienza su ejecución.Dado que las variables están permanentemente en memoria es fácil implementar la propiedadde que conserven o no su contenido para cada nueva llamada
Memoria Dinámica
 ¿Qué es la memoria dinámica?Supongamos que nuestro programa debe manipular estructuras de datos de longituddesconocida. Un ejemplo simple podría ser el de un programa que lee las líneas de un archivo y lasordena. Por tanto, deberemos leer un número indeterminado de líneas, y tras leer la última,ordenarlas. Una manera de manejar ese ``número indeterminado'', sería declarar una constanteMAX_LINEAS, darle un valor vergonzosamente grande, y declarar un array de tamaño MAX_LINEAS.Esto, obviamente, es muy ineficiente (y feo). Nuestro programa no sólo quedaría limitado por ese valormáximo, sino que además gastaría esa enorme cantidad de memoria para procesar hasta el máspequeño de los ficheros.La solución consiste en utilizar memoria dinámica. La memoria dinámica es un espacio dealmacenamiento que se solicita en tiempo de ejecución. De esa manera, a medida que el proceso vanecesitando espacio para más líneas, va solicitando más memoria al sistema operativo para guardarlas.El medio para manejar la memoria que otorga el sistema operativo, es el puntero, puesto que no

Activity (82)

You've already reviewed this. Edit your review.
1 hundred reads
1 thousand reads
Dave Coo liked this
davidrey29 liked this
Sandy Islas liked this
davidrey29 liked this

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->