estructura de datos
TRANSCRIPT
Vicerrectorado de Ordenación Académica
21/06/14
2013GUÍA DOCENTE DE LA ASIGNATURA
Página 1 de 5
Graduado/a en Ingeniería Informática por la Universidad de MálagaEscuela Técnica Superior de Ingeniería InformáticaEstructura de Datos204ObligatoriaProgramación de ComputadoresFormación común69 % teórica y 31 % prácticaCastellano, Inglés216Nº Créditos
Nº Horas de dedicación del estudiante: 150607230
Tamaño del Grupo Grande:Tamaño del Grupo Reducido:Página web de la asignatura:
Nº Horas presenciales:
Semestre:Curso:
Módulo:Experimentalidad:Idioma en el que se imparte:
Materia:
Grado/Máster en:Centro:Asignatura:Código:Tipo:
EQUIPO DOCENTE
LENGUAJES Y CIENCIAS DE LA COMPUTACIÓN
LENGUAJES Y SISTEMAS INFORMÁTICOS
Mail Teléfono Laboral Despacho Horario Tutorías
Coordinador/a: BLAS CARLOS RUIZ JIMENEZ
PABLO LOPEZ OLIVAS
FRANCISCO GUTIERREZLOPEZ
JOSE ENRIQUE GALLARDO RUIZ
952132795
952133305
952133314
952133305
-
3.2.50 - E.T.S.I. INFORMÁTICA
3.2.46 - E.T.S.I. INFORMÁTICA
-
Primer cuatrimestre: Martes 09:45 - 14:45, Viernes 10:40 - 11:40 Segundo cuatrimestre: Lunes 10:45 - 12:45, Miércoles 10:45 - 12:45, Viernes 11:30 - 13:30
Primer cuatrimestre: Lunes 11:00 - 14:00, Miércoles 11:00 - 14:00 Segundo cuatrimestre: Martes 12:45 - 14:45, Lunes 10:30 - 12:30, Viernes 08:00 - 10:00
Todo el curso: Lunes 10:45 - 12:45, Miércoles 10:45 - 12:45, Jueves 12:45 - 14:45
Primer cuatrimestre: Lunes 12:30 - 13:30, Miércoles 12:30 - 13:30, Jueves 09:30 - 11:30, Viernes 10:30 - 12:00, Jueves 11:30 - 12:00 Segundo cuatrimestre: Jueves 09:30 - 13:30, Miércoles 12:30 - 13:30, Viernes 10:45 - 11:45
Nombre y Apellidos
Área:
Departamento:
RECOMENDACIONES Y ORIENTACIONES
Esta asignatura requiere conocimientos básicos de matemáticas y de lenguajes de programación, y para su comprensión será necesario haber cursado las siguientes asignaturas de formación básica del primer curso: Fundamentos de la Programación, Programación Orientada a Objetos, Estructuras Algebraicas de la Computación y Matemática Discreta.
CONTEXTO
Esta asignatura se imparte en el primer cuatrimestre del segundo curso de los tres grados de Informática: Ingeniería Informática, Ingeniería del Software e Ingeniería de Computadores. En este mismo cuatrimestre se imparte también la asignatura Análisis y Diseño de Algoritmos. Ambas asignaturas completan el estudio de las técnicas de programación impartidas en las asignaturas de programación de primer curso.
Las estructuras de datos son imprescindibles para que los algoritmos pueden describirse de manera eficiente, por ello existe gran coordinación con la asignatura Análisis y Diseño de Algoritmos. Se describirán las estructuras de datos más importantes de la programación, así como las implementaciones típicas que se suelen utilizar en un lenguaje de programación orientado a objetos y en un lenguaje funcional. La asignatura tiene una fuerte componente práctica, y dedica un número importante de clases a prácticas de laboratorio, donde se resuelven problemas clásicos con el uso de las estructuras de datos fundamentales.
COMPETENCIAS
1
2
Competencias generales y básicas Competencias generales
Competencias específicas Competencias específicas
CG08
CG09
Conocimiento de las materias básicas y tecnologías, que capaciten para el aprendizaje y desarrollo de nuevos métodos y tecnologías, así como las que les doten de una gran versatilidad para adaptarse a nuevas situaciones.Capacidad para resolver problemas con iniciativa, toma de decisiones, autonomía y creatividad. Capacidad para saber comunicar y transmitir los conocimientos, habilidades y destrezas de la profesión de Ingeniero Técnico en Informática.
DESCRIPCIÓN DE LA ASIGNATURA
Vicerrectorado de Ordenación Académica
21/06/14
2013GUÍA DOCENTE DE LA ASIGNATURA
Página 2 de 5
2 Competencias específicas Competencias específicas
Formación común
CC05CC06
CC07
CC08
CC17
Conocimiento, administración y mantenimiento sistemas, servicios y aplicaciones informáticas.Conocimiento y aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y complejidad de los algoritmos propuestos.Conocimiento, diseño y utilización de forma eficiente los tipos y estructuras de datos más adecuados a la resoluciónde un problema.Capacidad para analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados.Capacidad para diseñar y evaluar interfaces persona computador que garanticen la accesibilidad y usabilidad a los sistemas, servicios y aplicaciones informáticas.
CONTENIDOS DE LA ASIGNATURA
Introducción a la programación Funcional
Características habituales de los lenguajes funcionales
Introducción a los tipos abstractos. Estructuras Básicas y representaciones lineales.
Árboles
Tablas hash
Grafos
El estilo de programación funcional. Programación Imperativa vs Programación Funcional. Funciones puras e impuras. Ventajas de la Programación Funcional.
Introducción a Haskell. Tipos básicos. Listas y tuplas. Definiciones de funciones. Patrones. Funciones definidas parcialmente. Evaluación de expresiones. Ordenes de reducción (normal, aplicativo y perezoso). GHC y GHCi.
Polimorfismo y sobrecarga. Tipos numéricos. Parcialización. Definiciones locales. Eficiencia. Parámetros Acumuladores.
Tipos Algebraicos. Inducción sobre Listas y otras estructuras algebraicas. Corrección de funciones. Pruebas con QuickCheck.
Programación con funciones de orden superior. Composición de funciones, map, filtros, plegados. Secuencias Aritméticas y Listas por Comprensión. Sobrecarga: introducción a las clases de tipos. Módulos
Tipos de datos concretos y tipos de datos abstractos. Especificación de un tipo abstracto. Ejemplos.
Pilas, colas, colas con prioridad, listas, conjuntos, multiconjuntos y diccionarios (asociaciones). Implementaciones lineales de los tipos básicos enun LF y en un LOO. Iteradores sobre listas. Aplicaciones típicas: evaluación de expresiones.
Árboles. Definiciones y terminología. Representación y operaciones en un LF.
Árboles binarios. Auténticos , perfectos y completos. Relación entre el número de nodos y la altura. Recorrido recursivo de árboles binarios.
Montículos. Propiedad de orden del montículo (Heap-Order Prop.) Montículo binario. Implementación en un LOO vía arrays. Montículos zurdos. Invariante y propiedades. Mezcla, implementación de las operaciones y complejidad . Representación e implementación en un LF y en un LOO. Representación de Colas de prioridad con montículos. Construcción de un montículo en tiempo lineal. Heap Sort.Árboles binarios de búsqueda. Invariante y propiedades. Inserción, búsqueda y eliminación en un ABB. Complejidad. Representación e implementación en un LF y en un LOO. Tree Sort. Recorridos vía iteradores.Árboles equilibrados. Árboles AVL: Invariante y propiedades. Rotaciones. Inserción, búsqueda y eliminación. complejidad . Representación e implementación en un LF y en un LOO.Implementación de diccionarios vía árboles de búsqueda. Complejidad.
Hashing. Colisiones. Funciones Hash; congruencia modular, polinómica. Resolución de colisiones. Encadenamiento separado y Prueba lineal. Factor de carga, rendimiento y reubicación (rehashing).
Grafos dirigidos y no dirigidos. Terminología y propiedades fundamentales. Representación e implementaciones en un LF y en LOO. Exploración de grafos. Exploración en profundidad y en anchura. Implementación de los algoritmos en un LF y en LOO. Propiedades de los algoritmos de exploración. Aplicaciones: conexión, detección de ciclos, coloreado. Orden topológico y sus aplicaciones.
ACTIVIDADES FORMATIVAS
Actividades Presenciales
Actividades No Presenciales
Actividades expositivas
Actividades prácticas en instalaciones específicas
Actividades de discusión, debate, etc.
Lección magistral
Prácticas en laboratorio
Discusiones
Vicerrectorado de Ordenación Académica
21/06/14
2013GUÍA DOCENTE DE LA ASIGNATURA
Página 3 de 5
Actividades No Presenciales
Actividades de documentación
Actividades prácticas
Estudio personal
Búsqueda bibliográfica/documental
Resolución de problemas
Estudio personal
ACTIVIDADES DE EVALUACIÓN
RESULTADOS DE APRENDIZAJE / CRITERIOS DE EVALUACIÓN
- Entender los distintos conceptos y tipos de datos: concretos, algebraicos y abstractos. - Identificar las fortalezas y debilidades del paradigma de programación funcional comparándolas con las del paradigma orientado a objetos, sabiendo eligir las soluciones más apropiadas a distintos problemas utilizando ambos paradigmas, enfatizando la sencillez, la comprensión y la eficiencia.- Conocer e implementar las estructuras de datos fundamentales en un lenguaje orientado a objetos y en un lenguaje funcional. En particular, en los lenguajes Java y Haskell. - Aplicar los algoritmos fundamentales utilizando las distintas formas de representación de tipos algebraicos y abstractos, en un lenguaje orientado a objetos y en un lenguaje funcional. - Conocer y saber aplicar las técnicas apropiadas (y en particular las técnicas de inducción) para el estudio de la complejidad y corrección de las estructuras de datos, así como de los algoritmos sobre éstas. - Identificar los principales patrones de cómputo y estructuras, abstraerlos e implementarlos usando parametrización, funciones de orden superior y polimorfismo.
PROCEDIMIENTO DE EVALUACIÓN
La asistencia a las clases de teoría y a los laboratorios es obligatoria. Las posibles faltas puntuales deberán ser justificadas. Para aprobar la asignatura en cualquiera de las dos convocatorias ordinarias será necesario obtener al menos 5 puntos sumando las calificaciones obtenidas por cada una de las siguientes componentes: - CC (Componente continua, para aquellos alumnos que realicen las prácticas y ejercicios programados durante el curso): hasta un máximo de 4 puntos, puntuables por los siguentes items: ejercicios y trabajo personal, tareas programadas en las prácticas de laboratorio, controles programados yesporádicos. La ponderación de cada uno de los items se publicará al principio del curso.- EF (Examen final), valorado sobre 10 puntos menos la calificación obtenida por el apartado CC. Este examen se realizará el día establecido por el centro y evaluará de modo exhaustivo todos los contenidos teóricos y prácticos de la asignatura.
Para aprobar la asignatura en el resto de convocatorias extraordinarias será necesario responder correctamente el 50% de los contenidos del examena celebrar siguiendo el calendario de exámenes fijado por el centro.
Con objeto de evaluar la componente continua CC, durante las clases de teoría y en los laboratorios, el profesor propondrá trabajos y ejercicios que elalumno deberá entregar resueltos de modo satisfactorio en tiempo y forma, siguiendo las instrucciones que se determinen. Ciertos ejercicios y todas las prácticas de laboratorio deberán resolverse en ordenador, por lo que será imprescindible un conocimiento suficiente de los lenguajes y entornos de programación utilizados en los laboratorios.
BIBLIOGRAFÍA Y OTROS RECURSOS
Básica
Algorithms: a functional programming approach; Fethi Rabbi y Guy Lapalme; Addison; 1999
Algorithms; Robert Sedgewick y Kevin Wayne; Addison-Wesley; 2011
Data Structures & Algorithms in Java; Michael T. Goodrich y Roberto Tamassia; John Wiley & Sons; 2006
Introducción a la Programación Funcional; Richard Bird; 2000
Introduction to Algorihms; T.H. Cormen, C.E. Leiserson, R.L. Rivest y C. Stein; McGraw-Hill; 2010
Material elaborado para la asignatura (transparencias, listados de ejercicios, códigos ....) disponibles en el Campus Virtual
Razonando con Haskell; Blas Ruiz, Fco. Gutiérrez, Pablo Guerrero y José Gallardo; Thomson; 2004
DISTRIBUCIÓN DEL TRABAJO DEL ESTUDIANTE
ACTIVIDAD FORMATIVA PRESENCIAL
Descripción Horas Grupo grande
Lección magistral
Prácticas en laboratorio
41,4
18,6
TOTAL HORAS ACTIVIDAD FORMATIVA PRESENCIAL 60
ACTIVIDAD FORMATIVA NO PRESENCIAL
Grupos reducidos
Vicerrectorado de Ordenación Académica
21/06/14
2013GUÍA DOCENTE DE LA ASIGNATURA
Página 4 de 5
Descripción Horas Grupo grande
Resolución de problemas
Búsqueda bibliográfica/documental
Discusiones
Estudio personal
30
5
5
30
Descripción Horas
TOTAL HORAS ACTIVIDAD FORMATIVA NO PRESENCIAL
TOTAL HORAS ACTIVIDAD EVALUACIÓN
TOTAL HORAS DE TRABAJO DEL ESTUDIANTE
75
15
150
Grupos reducidos