En esta obra se muestran técnicas de representación de estructuras de datos, utilizando como lenguaje contenedor Java. El contexto de las mismas de engloba en los siguientes principios:
- Cada estructura de datos tiene sus costes y sus beneficios. Los programadores y diseñadores necesitan una comprensión rigurosa y complet a de cómo evaluar los costes y beneficios para adaptarse a los nuevos retos que afronta la construcción de la aplicación. Estas propiedades requieren un conocimiento o comprensión de los principios de análisis de algoritmos y también una consideración práctica de los efectos significativos del medio físico empleado.
- Los temas relativos a costes y beneficios se consideran dentro del concepto de elemento de compensación.
- Esta edición, fundamentalmente, describe estructuras de datos, métodos de organización de grandes cantidades de datos y algoritmos, junto con el análisis de los mismos, en esencia, estimación del tiempo de ejecución de algoritmos.
- Los datos estructurados siguen a las necesidades. Los estudiantes deben aprender a evaluar primero las necesidades de aplicación, a continuación, encontrar una estructura de datos en correspondencia con sus funcionalidades.
- El método didáctico que sigue es buscar preferentemente enseñar a pensar en la resolución de un problema, siguiendo un determinado método ya conocido o bien creado por el propio lector, una vez esbozado el método, se estudia el algoritmo correspondiente junto con las etapas que pueden resolver el problema.
Muchas facultades y escuelas de Ingeniería, así como institutos tecnológicos, comienzan sus cursos de Estructuras de Datos con el soporte de Java. Existen muchas razones por las cuales pensamos que Java es apropiado para la formación en estructuras de datos. Una de ellas es que Java, es un lenguaje más moderno que C o C++, con mejores funcionalidades, orientado a objetos, a la programación en Web,… Además, a partir de Java 1.5 permite diseñar clases genéricas, de forma similar a las plantillas (templates) de C++.
El primer problema que se suele presentar al estudiante de Estructura de Datos que, probablemente, procederá de un curso de nivel básico, medio o avanzado de introducción o fundamentos de programación o bien de iniciación en algoritmos, es precisamente el modo de afrontar información compleja desde el principio.
Aunque es verdad que Java tiene muchas ventajas sobre un lenguaje procedimental, por ejemplo C, muchas de estas ventajas no se hacen evidentes hasta que un programa se “vuelve” o “hace” más complejo. En este caso el paradigma orientado a objetos es una herramienta de programación y organización muy poderosa y con grandes ventajas para la enseñanza y posterior tarea profesional.
A primera vista, Java es más interesante que un lenguaje procedimental por su enfoque orientado a objetos, aunque puede parecer, en el caso del análisis y diseño de algoritmos y estructuras de datos, que esta propiedad añade una complejidad inherente y no es así, la implementación en clases y objetos puede darle una nueva potencialidad. Pensando en esta transición se ha incluido un capítulo dedicado a conceptos teórico-prácticos de orientación a objetos. En cualquier caso, el curso está soportando la comprensión del tipo abstracto de datos (TAD) de modo que el estilo de programación empleado en el texto se basa en el estudio de tipos abstractos de datos como base para la formación en orientación a objetos.
Tipos de datos.
La necesidad de las estructuras de datos.
Algoritmos y programas.
Notación O-grande.
2. TIPOS DE DATOS: CLASES Y OBJETIVOS.
Abstracción en lenguajes de programación.
Tipos abstractos de datos.
Especificación de los tad.
Declaración de una clase.
Paquetes.
Constructores.
Recolección de objetos.
Objeto que envia el mensaje: this.
Miembros static de una clase.
Clase object.
Tipos abstractos de datos en Java.
3. ARRAYS (ARREGLOS) Y CADENAS.
Arrays (arreglos).
Arrays multidimensionales.
Utilización de arrays como parámetros.
Cadenas. Clase String.
Clase Vector.
4. CLASES DERIVADAS Y POLIMORFISMO.
Clases derivadas.
Herencia publica.
Constructores en herencia.
Métodos y clases no derivables: atributo final.
Conversiones entre objetos de clase derivada y clase base.
Métodos abstractos.
Polimorfismo.
Interfaces.
5. ALGORITMOS RECURSIVOS.
La naturaleza de la recursividad.
Métodos recursivos.
Recursión versus iteración.
Algoritmos divide y vencerás.
Backtracking, algoritmos de vuelta atrás.
Selección óptima.
6. ALGORITMOS DE ORDENACION Y BUSQUEDA.
Ordenación.
Algoritmos de ordenación básicos.
Ordenación por intercambio.
Ordenación por selección.
Ordenación por inserción.
Ordenación Shell.
Ordenación rapida (Quicksort).
Ordenación de objetos.
Búsqueda en listas: búsqueda secuencial y binaria.
7. ALGORITMOS DE ORDENACION DE ARCHIVOS.
Flujos y archivos.
Clase file.
Flujos y jerarquía de clases.
Ordenación de un archivo. Métodos de ordenación externa.
Mezcla directa.
Fusión natural.
Mezcla equilibrada múltiple.
Método polifásico de ordenación externa.
8. LISTAS ENLAZADAS.
Fundamentos teóricos de listas enlazadas.
Clasificación de listas enlazadas.
Tipo abstracto de datos (tad) lista.
Operaciones de listas enlazadas.
Inserción de un elemento en una lista.
Búsqueda en listas enlazadas.
Eliminación de un nodo de una lista.
Lista ordenada.
Lista doblemente enlazada.
Listas circulares.
Listas enlazadas genéricas.
9. PILAS.
Concepto de pila.
Tipo de dato pila implementado con arrays.
Pila dinámica implementada con un vector.
El tipo pila implementado como una lista enlazada.
Evaluación de expresiones aritméticas con pilas.
10. COLAS.
Concepto de cola.
Colas implementadas con arrays.
Cola con un array circular.
Cola con una lista enlazada.
Bicolas: colas de doble entrada.
11. COLAS DE PRIORIDADES Y MONTICULOS.
Colas de prioridades.
Tabla de prioridades.
Vector de prioridades.
Montículos.
Ordenación por montículos (Heapsort).
Cola de prioridades en un montículo.
12. TABLAS DE DISPERSION, FUNCIONES HASH.
Tablas de dispersión.
Funciones de dispersión.
Colisiones y resolución de colisiones.
Exploración de direcciones.
Realizacion de una tabla dispersa.
Direccionamiento enlazado.
Realizacion de una tabla dispersa encadenada.
13. ARBOLES: ARBOLES BINARIOS Y ARBOLES ORDENADOS.
Arboles generales y terminología.
Arboles binarios.
Estructura de un árbol binario.
Árbol de expresión.
Recorrido de un árbol.
Árbol binario de búsqueda.
Operaciones en árboles binarios de búsqueda.
14. ARBOLES DE BUSQUEDA EQUILIBRADOS.
Eficiencia de la búsqueda en un árbol ordenado.
Árbol binario equilibrado, arboles avl.
Inserción en arboles de búsqueda equilibrados: rotaciones.
Implementación de la inserción con balanceo y rotaciones.
Borrado de un nodo en un árbol equilibrado.
15. GRAFOS, REPRESENTACION Y OPERACIONES.
Conceptos y definiciones.
Representación de los grafos.
Listas de adyacencia.
Recorrido de un grafo.
Conexiones en un grafo.
Matriz de caminos. Cierre transitivo.
Puntos de articulación de un grafo.
16. GRAFOS, ALGORITMOS FUNDAMENTALES.
Ordenación topológica.
Matriz de caminos: algoritmos de warshall.
Caminos más cortos con un solo origen: algoritmo de dijkstra.
Todos los caminos mínimos: algoritmo de floyd.
Árbol de expansión de coste mínimo.
17. COLECCIONES.
Colecciones en java.
Clases de utilidades: arrays y collections.
Comparación de objetos: comparable y comparator.
Vector y stack.
Iteradores de una colección.
Interfaz Collection.
Listas.
Conjuntos.
Mapas y diccionarios.
Colecciones parametrizadas.
Autor/es: Ignacio Zahonero / Luis Joyanes
Edición: 1ra Edición
ISBN: 9788448156312
Tipo: Libro
Formato: PDF
Idioma: Español
EmoticonEmoticon