INSTITUTO TECNOLÓGICO
SUPERIOR DE SAN ANDRÉS
TUXTLA
Ingeniería en Sistemas Computacionales
Estructura de Datos
Maestra:
MTI Angelina Márquez Jiménez.
Reporte de Investigación No. 1
Alumnos:
Fernando Raymundo Morales Hernandez
Paola Lerdo Fiscal
Grupo: 304-B
Periodo:
San Andrés Tuxtla, Veracruz.
Competencia de la específica: Conoce y comprende las diferentes estructuras de
datos, su clasificación y forma de manipularlas para buscar la manera más
eficiente de resolver problemas.
UNIDAD 1. INTRODUCCIÓN A LAS ESTRUCTURAS DE DATOS.
1.1 Clasificación de las estructuras de datos.
1.2 Tipos de datos abstractos (TDA).
1.3 Ejemplos de TDA’s.
1.4 Manejo de memoria.
1.4.1 Memoria estática.
1.4.2 Memoria dinámica.
1.5 Análisis de algoritmos.
1.5.1 Complejidad en el tiempo.
1.5.2 Complejidad en el espacio.
1.5.3 Eficiencia de los algoritmos.
En ciencias de la computación, una
estructura de datos es una forma
¿Qué es particular de organizar datos en una
computadora para que puedan ser
utilizados de manera eficiente.
Estructura de
Datos? Clasificación de estructuras de datos
ESTRUCTURAS LÓGICAS DE DATOS:
En un programa, cada variable pertenece a alguna
estructura de datos explícita o implícitamente definida, la
cual determina el conjunto de operaciones válidas para
ella. Las estructuras de datos que se discuten aquí son
estructuras de datos lógicas. Cada estructura de datos
lógica puede tener varias representaciones físicas
diferentes para sus almacenamientos
ESTRUCTURAS PRIMITIVAS Y SIMPLES:
Son primitivos aquellas que no están compuestas por
otras estructuras de datos por ejemplo, enteros, booleanos
y caracteres. Otras estructuras de datos se pueden
construir de una o más primitivas. Las estructuras de
datos simples que consideramos se construyen a partir de
estructuras primitivas y son: cadenas, arreglos y registros.
A estas estructuras de datos las respaldan muchos
lenguajes de programación.
STRING
ESTRUCTURAS LINEALES Y NO LINEALES:
Un String en Java representa Las estructuras de datos simples se pueden combinar de
una cadena de caracteres no varias maneras para formar estructuras más complejas.
modificable. Todos los literales Las dos cases principales de estructuras de datos son las
de la forma "cualquier texto", lineales y las no lineales, dependiendo de la complejidad
es decir, literales entre comillas de las relaciones lógicas que representan. Las estructuras
dobles, que aparecen en un de datos lineales incluyen pilas, colas y listas ligadas
programa java se implementan lineales. Las estructuras de datos no lineales incluyen
como objetos de la clase grafos y árboles.
String. String s =
new String(); //crea el string s Datos estáticos: su tamaño y forma es constante durante
vacío. la ejecución de un programa y por tanto se determinan en
tiempo de compilación. El ejemplo típico son los arrays.
Tienen el problema de que hay que dimensionar la
estructura de antemano, lo que puede conllevar
desperdicio o falta de memoria.
Datos dinámicos: su tamaño y forma es variable (o puede
CLASIFICACIÓN DE LAS ESTRUCTURAS DE DATOS
Hay varias formas de clasificar las Estructuras de Datos.
Fundamentales o Primitivas.- Son las estructuras que se consideran indivisibles
para fines de las aplicaciones. Las variables de tipo integer, float, char, etc.
Complejas.- Arreglos, Strings, Archivos, Pilas,
Colas, Árboles, etc.
También se pueden clasificar en:
Lineales.- Son las estructuras cuyos elementos están organizados en una
secuencia lineal. Los arreglos son un ejemplo de éstas.
No Lineales.- los elementos no tienen una secuencia, por ejemplo, los Árboles y
los grafos.
La clasificación que nos ocupa para esta primera parte del curso es:
Estáticas.- Son aquellas cuyo espacio ocupado y la dirección asociada en la
memoria, se determinan al tiempo de la compilación.
Dinámicas.- Son aquellas que se expanden o se reducen durante la ejecución del
programa de acuerdo a las necesidades del mismo.
1.2 TIPOS DE DATOS ABSTRACTOS
Aunque la programación de computadoras es
realizada por personas con conocimientos
extensos en las ciencias computacionales, si no
se escondiera la complejidad natural de los datos
a los diseñadores y programadores de
computadoras no se hubiera alcanzado el grado
de desarrollo que tiene en la actualidad la industria
informática. De eso se trata la abstracción de
datos.
¿Qué es la abstracción?
Análisis de una cosa prescindiendo
de los detalles de sus
componentes.
Ejemplo:
Tipo de dato abstracto es un
concepto en el que el tipo de dato
está definido por su
comportamiento desde el punto de
vista del usuario de los datos y no
del programador. Si el usuario del
TDA es la misma persona quien lo programó, en forma natural, ignorará la
estructura interna del TDA y solo se concentrará en su comportamiento (de esta
forma la programación es más sencilla).
USO DE TDA
Un algoritmo es una secuencia finita de operaciones, organizadas para realizar
una tarea determinada. Las estructuras de datos son la forma en que se organizan
los datos para ser usados. Puede ser una colección de variables, posiblemente de
diferentes tipos de datos, conectadas de un modo determinado.
Una estructura de datos bien organizada debe permitir realizar un conjunto de
acciones sobre los datos de tal forma de minimizar el uso de los recursos y el
tiempo empleado para efectuar la operación. Abstracción La abstracción es un
mecanismo fundamental para la comprensión de fenómenos o situaciones que
implican gran cantidad de detalles. Abstracción es la capacidad de manejar un
objeto (tema o idea) como un concepto general, sin considerar la enorme cantidad
de detalles que pueden estar asociados con dicho objeto. Ejemplo, se puede
saber conducir un automóvil sin conocer el tipo del modelo o cómo está fabricado.
La abstracción se utiliza para suprimir detalles irrelevantes, mientras se enfatiza
en los relevantes o significativos. El beneficio principal de la abstracción es que
facilita al programador pensar acerca del problema a resolver. Uno de los
principios importantes del diseño de software es el de la abstracción y ocultación
de la información. Abstracción de datos es una técnica que permite inventar
nuevos tipos de datos que sean más adecuados a una aplicación y, por
consiguiente, facilitar la escritura del programa.
MANEJO DE MEMORIA ESTÁTICA.
Para implementar alguna estructura de datos, primero es necesario tener muy
claro cómo va a ser el manejo de memoria. La diferencia entre estructuras
estáticas y dinámicas esta en el manejo de memoria.
En la memoria estática durante la ejecución del programa el tamaño de la
estructura no cambia. La estructura que maneja memoria estática son los
vectores. Un vector es una colección finita, homogénea y ordenada de elementos.
Es finita porque todo arreglo tiene un límite, homogénea porque todos los
elementos son del mismo tipo y ordenada porque se puede determinar cuál es el
enésimo elemento. Un vector tiene dos partes: Componentes e índices Los
componentes hacen referencia a los elementos que forman el arreglo y los índices
permiten referirse a los componentes del arreglo en forma individual. Los arreglos
se clasifican en:
- Unidimensionales (vectores o listas)
- Bidimensionales (matrices o tablas)
- Multidimensionales
MANEJO DE MEMORIA DINÁMICA
En la memoria dinámica durante la ejecución del programa el tamaño de la
estructura puede cambiar. La memoria
dinámica, es el espacio de almacenamiento
que solicita una clase o método en tiempo
de ejecución.
De esa manera, a medida que el proceso
requiere de más espacio se solicita al
sistema operativo, sin que el proceso se preocupe por donde serán asignados los
datos, ni que espacios de memoria nos entregara el sistema operativo.
Así como existen estructuras de datos estáticas (arreglos), también existen
estructuras de datos dinámicas
(listas y árboles), estas últimas
son generadas a partir de un
tipo de dato conocido como
referencia (dirección de
memoria). Para utilizar las
referencias se requiere de un
elemento llamado nodo, el cual
se estructura de la siguiente
manera.
Las estructuras de datos que usan nodos
pueden ser lineales o no lineales, dentro de
las lineales se encuentran las listas simples y
dobles y en las no lineales encontramos los
árboles, estas estructuras se representan de
la siguiente forma.
1.5.- ANÁLISIS DE ALGORITMOS
COMPLEJIDAD EN EL TIEMPO
Una medida que suele ser útil conocer es el tiempo de ejecución de un programa
en función de N, lo que denominaremos T(N).
Esta función se puede medir físicamente (ejecutando el programa, reloj en mano),
o calcularse sobre el código contando instrucciones a ejecutar y multiplicando por
el tiempo requerido por cada instrucción.
Sencillo pedazo de programa como:
S1; for (int i= 0; i < N; i++) S2;
Requiere:
T(N)= t1 + t2*N
Siendo 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 que las 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 valores
Tmin(N) ⇐ T(N) ⇐ Tmax(N)
Los extremos son habitualmente conocidos como “caso peor” y “caso mejor”.
Entre ambos se hallara algún “caso promedio” o más frecuente.
Cualquier fórmula T(N) incluye referencias al parámetro N y a una serie de
constantes “Ti” que dependen de factores externos al algoritmo como pueden ser
la calidad del código generado por el compilador 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 ritmo vertiginoso (en la actualidad, se duplica anualmente),
intentaremos analizar los algoritmos con algún nivel de independencia de estos
factores; es decir, buscaremos estimaciones generales ampliamente válidas.
COMPLEJIDAD EN EL ESPACIO
Es la memoria que utiliza un programa para su ejecución. Lo que implica que la
eficiencia en memoria de un algoritmo lo indica la cantidad de espacio requerido
para ejecutarlo, es decir, el espacio memoria que ocupan todas las variables
propias del algoritmo.
Es la memoria que utiliza un programa para su ejecución; es decir, el espacio de
memoria que ocupan todas las variables propias del algoritmo.
Esta se divide en Memoria Estática y Memoria Dinámica.
Memoria estática. Para calcularla se suma de memoria que ocupan las
variables declaradas en el algoritmo.
Memoria dinámica. Su cálculo no es tan simple ya que depende de cada
ejecución del algoritmo
Eficiencia de algoritmos
Medida del uso de los recursos computacionales requeridos por la ejecución de un
algoritmo en función del tamaño de las entradas. La eficiencia de los algoritmos,
principio de invariancia, operaciones con órdenes de complejidad, funciones
anónimas, análisis de algoritmos, el caso especial de los algoritmos recursivos,
análisis de los algoritmos de ordenación. T(n) Tiempo empleado para ejecutar el
algoritmo con una entrada de tamaño n
Tipos de análisis
CONCLUSIÓN
La clase de estructura de datos me dejo mucho, desde la programada, lo cual ya
mejore un poco más, hasta la lógica de entender y ver las cosas de otra manera.
Todo esto que acabo de explicar es un repaso de mi clase estructura de datos y
simplemente puedo decir que si pudiera volverla a tomar, tenlo por seguro que
volveré a decir esto tantas veces sea un arte para mi programar.