6.08 - Algoritmos y estructuras de datos avanzados
Sexto Año
Característica del Área Curricular | |||
---|---|---|---|
Plan | 2013 | ||
Cuatrimestre | Anual | ||
Hs. Cat. | 6 semanales | ||
Res. C.S. | 3202/2012 | ||
Presentación
La problemática abordada por esta materia se relaciona con los conocimientos relativos al desarrollo de programas.
La resolución automática de un problema obliga a analizar previamente y en forma exhaustiva las diferentes situaciones y condiciones que puede presentar. La forma que adopta la solución es un algoritmo que computa la función pretendida y que, por su complejidad, debe ser verificado metódicamente para asegurar su corrección y validez.
El instrumento utilizado para programar es un lenguaje que tiene características de los lenguajes formales y que, de acuerdo al tipo de problema que intenta representar y las estrategias en que se basa, tiene estructuras, reglas, operaciones y objetos propios.
Programar es una actividad compleja que combina procesos teóricos (propios de la matemática), de abstracción o experimentales (típicamente de la ciencia) y de diseño (de la ingeniería).
Esta materia, está orientada a desarrollar un esquema de razonamiento lógico apropiado no sólo para las actividades de programación sino que sirva de base para la comprensión de los objetos del trabajo y la capacidad profesional de abstracción requerida del técnico.
Objetivos
Al finalizar esta materia los estudiantes estarán en condiciones de encarar estrategias de resolución de problemas y resolver pequeños problemas de programación, esencialmente de carácter didáctico mostrando conocimientos en:
- El dominio de las estructuras de control y tipos de datos abstractos.
- Fundamentos y uso de la algoritmia como herramienta de optimización de software.
- La utilización de ambientes de programación funcional como pueden ser Haskell o ML.
Contenidos
Introducción a la Teoría de Complejidad
Introducción. Modelo de Costo. Análisis de Tiempo de Cómputo. Mejor Caso, Peor Caso y Caso Promedio. Notación Asintótica. Notación. Propiedades
Herramientas matemáticas
Propiedades de las sumas. Técnicas. Relaciones de Recurrencia. Aplicación.
Abstracción de datos TAD
Implementando tipos abstractos. TADs. Tipos Algebraicos como TADs. Pilas, Colas, BST y conjuntos. Estructuras Persistentes.
Inducción.
Inducción Natural. Inducción Estructural.
Ordenamiento.
Diseño de algoritmos
Fuerza Bruta. Decrase & Conquer. Divede & Conquer.
Programación Dinámica
Formulación recursiva. Subproblemas Óptimos. Solapamiento de subproblemas. Calculo: bottom-up.
Greedy
Hasing
Introducción. Tablas de Direccionamiento Directo. Listas Enlazadas. Tablas Hash. Funciones Hash Direccionamiento Abierto (Closed Hashing). Análisis del Direccionamiento Abierto.
Estructuras de Datos para Conjuntos Disjuntos.
Introducción. Definición de la Estructura. Aplicación. Representación por Arreglos. Representación por Listas. Representación por Arboles
Bibliografía
Ullman.Elements of ML Programming. Printece Hall. 1998
Paulson.ML for working programmer .Cambridge University Press. 1996