Planificación de Algoritmos y Estructuras de Datos (2021)
Información básica
Carrera |
IngenierÃa en Informática |
Departamento |
Informática |
Sitio Web |
http://www.cimec.org.ar/aed |
Plan de Estudios | |
Plan 2006 | |
Carácter | PerÃodo |
Cuatrimestral | 2° Cuatrimestre |
Docente Responsable | |
Mario Alberto Storti |
Equipo docente
Nombre y Apellido |
Gimenez, Juan Marcelo |
Storti, Mario Alberto |
Carga horaria
Carga horaria total | 90 | hs |
TeorÃa | 30 | hs |
Resolución de ejercicios | 30 | hs |
Proyecto y diseño | 0 | hs |
Evaluaciones | 10 | hs |
Formación experimental | 0 | hs |
Resolución de problemas de ingenierÃa | 20 | hs |
Otras actividades | 0 | hs |
Contenidos mÃnimos
Estructuras de datos: listas lineales, listas enlazadas, pilas, colas, decolas, árboles básicos, árboles balanceados. Elementos de programación funcional: predicados, funciones binarias asociativas, funciones de comparación. Algoritmos de ordenado, hashing, búsqueda y grafos básicos. |
Objetivos
Que el alumno conozca las estructuras de datos fundamentales y domine los algoritmos para manipularlas en forma eficiente. Que aprenda a elegir correctamente la estructura de datos y la implementación para obtener el algoritmo más eficiente para un problema dado. |
Conocimientos especÃficos previos para cursar la asignatura
Materias del 1er cuatrimestre, en particular "Matemática Básica" y "Fundamentos de Programación". |
MetodologÃa de enseñanza
Se dictan clases de teoría (2 horas semanales) en las cuales se enseñan los conceptos de las estructuras de datos fundamentales y los algoritmos para manipularlas en forma eficiente para que el alumno aprenda a elegir correctamente la estructura de datos y la implementación para obtener el algoritmo más eficiente para un problema dado. Una vez impartidos los conceptos básicos se describen ejemplos de usos de estas estructuras y finalmente se analizan varias posibles implementaciones de cada estructura de datos.
En cuanto a la práctica (4 horas semanales), se realizan las guías de trabajos prácticos (8 en total). Estas son resueltas por los alumnos con la guía de los docentes. También se proponen nuevos ejercicios de programación, en los cuales se plantea una consigna y los alumnos escriben código para resolver ese problema. Otra actividad consiste en proponer otras implementaciones para las diferentes estructuras de datos y algoritmos. |
Programa AnalÃtico
Diseño y análisis de algoritmos |
1.1. Conceptos básicos de algoritmos. Ejemplo: Sincronización de acceso a objetos en cálculo distribuido. Introducción básica a grafos. Planteo del problema mediante grafos. Algoritmo de búsqueda exhaustiva. Generación de las coloraciones. Crecimiento del tiempo de ejecución. Búsqueda exhaustiva mejorada. Algoritmo heurístico. Crecimiento del tiempo de ejecución para el algoritmo ávido. Conclusión del ejemplo. 1.2. Tipos abstractos de datos. Operaciones abstractas y características del TAD conjunto. Interfase del TAD conjunto. Implementación del TAD conjunto. Tiempo de ejecución de un programa. Notación asintótica. Invariancia ante constantes multiplicativas. Invariancia de la tasa de crecimiento ante valores en un conjunto finito de puntos. Transitividad. Regla de la suma. Regla del producto. Funciones típicas utilizadas en la notación asintótica. Equivalencia. La función factorial. Determinación experimental de la tasa de crecimiento. Otros recursos computacionales. Tiempos de ejecución no-polinomiales. Problemas P y NP. Varios parámetros en el problema. 1.3. Conteo de operaciones para el cálculo del tiempo de ejecución. Bloques if. Lazos. Suma de potencias. Llamadas a rutinas. Llamadas recursivas |
Tipos de datos abstractos fundamentales |
2.1. El TAD Lista. Descripción matemática de las listas. Operaciones abstractas sobre listas. Una interfase simple para listas. Funciones que retornan referencias. Ejemplos de uso de la interfase. Implementación de listas por arreglos. Eficiencia de la implementación por arreglos. Implementación mediante celdas enlazadas por punteros. El tipo posición. Celda de encabezamiento. Las posiciones `begin' y `end'. Detalles de implementación. Implementación mediante celdas enlazadas por cursores. Cómo conviven varias celdas en un mismo espacio. Gestión de celdas. Analogía entre punteros y cursores. Tiempos de ejecución de los métodos en las diferentes implementaciones. Interfase STL. Ventajas de la interfase STL. Ejemplo de uso. Uso de templates y clases anidadas. Operadores de incremento prefijo y postfijo. Listas doblemente enlazadas. 2.2. El TAD pila. Ejemplo: Una calculadora RPN con una pila. Operaciones abstractas sobre pilas. Interfase para pila. Implementación de una calculadora RPN. Implementación de pilas mediante listas. La pila como un adaptador. Interfase STL. 2.3. El TAD cola. Ejemplo: Intercalación de vectores ordenados. Ordenamiento por inserción. Tiempo de ejecución. Particularidades al estar las secuencias pares e impares ordenadas. Algoritmo de intercalación con una cola auxiliar. Operaciones abstractas sobre colas. Interfase para cola. Implementación del algoritmo de intercalación de vectores. Tiempo de ejecución. 2.4. El TAD correspondencia. Interfase simple para correspondencias. Implementación de correspondencias mediante contenedores lineales. Implementación mediante contenedores lineales ordenados. Implementación de mediante listas ordenadas. Interfase compatible con STL. Tiempos de ejecución para listas ordenadas. Implementación mediante vectores ordenados. Tiempos de ejecución para vectores ordenados. Definición de una relación de orden. |
Arboles |
3.1 Nomenclatura básica de árboles. Altura de un nodo. Profundidad de un nodo. Nivel. Nodos hermanos. Orden de los nodos. Particionamiento del conjunto de nodos. Listado de los nodos de un árbol. Orden previo. Orden posterior. Orden posterior y la notación polaca invertida. Notación Lisp para árboles. Reconstrucción del árbol a partir de sus órdenes. 3.2. Operaciones con árboles. Algoritmos para listar nodos. Inserción en árboles. Algoritmo para copiar árboles. Supresión en árboles. Operaciones básicas sobre el tipo árbol. 3.3. Interfase básica para árboles. Listados en orden previo y posterior y notación Lisp. Funciones auxiliares para recursión y sobrecarga de funciones. Algoritmos de copia. Algoritmo de poda. Implementación de la interfase básica por punteros.El tipo iterator. Las clases `cell' e `iterator'. La clase tree. Interfase avanzada. Ejemplo de uso de la interfase avanzada.Tiempos de ejecución
3.4 Arboles binarios. Listados en orden simétrico. Notación Lisp. Árbol binario lleno. Operaciones básicas sobre árboles binarios. Interfases e implementaciones. Interfase básica. Predicados de igualdad y espejo. Hacer espejo "in place". Implementación con celdas enlazadas por punteros . El algoritmo apply y principios de programación funcional. Implementación de la interfase avanzada.
3.5 Arboles de Huffman. Condición de prefijos. Representación de códigos como árboles de Huffman. Códigos redundantes. Tabla de códigos óptima. Algoritmo de búsqueda exhaustiva. Generación de los árboles. Un toque de programación funcional. El algoritmo de combinación. Función auxiliar que calcula la longitud media . El algoritmo de Huffman. Implementación del algoritmo. Ejemplo: Un programa de compresión de archivos. |
Conjuntos |
4.1. Introducción a los conjuntos. Notación de conjuntos. Interfase básica para conjuntos. Análisis de flujo de datos. 4.2. Implementación por vectores de bits. Conjuntos universales que no son rangos contiguos de enteros. Descripción del código. 4.3. Implementación con listas. Similaridad entre los TAD conjunto y correspondencia. Algoritmo lineal para las operaciones binarias. Descripción de la implementación. Tiempos de ejecución. 4.4. Interfase avanzada para conjuntos. 4.5. El diccionario. La estructura tabla de dispersión. Tablas de dispersión abiertas. Detalles de implementación. Tiempos de ejecución. Funciones de dispersión. Tablas de dispersión cerradas. Costo de la inserción exitosa. Costo de la inserción no exitosa. Costo de la búsqueda. Supresión de elementos. Costo de las funciones cuando hay supresión. Reinserción de la tabla. Costo de las operaciones con supresión. Estrategias de redispersión. Detalles de implementación. 4.6. Conjuntos con árboles binarios de búsqueda. Representación como lista ordenada de los valores. Verificar la condición de ABB. Mínimo y máximo. Buscar un elemento. Costo de mínimo. Operación de inserción. Operación de borrado. Recorrido en el árbol. Operaciones binarias. Detalles de implementación. Tiempos de ejecución. Balanceo del árbol. |
Ordenamiento |
5. Introducción. Relaciones de orden débiles. Signatura de las relaciones de orden. Predicados binarios. Relaciones de orden inducidas por composición. Estabilidad. Primeras estimaciones de eficiencia. Algoritmos de ordenamiento en las STL. 5.2. Métodos de ordenamiento lentos. El método de la burbuja. El método de inserción. El método de selección. Comparación de los métodos lentos. Estabilidad. 5.3. Ordenamiento indirecto. Minimizar la llamada a funciones. 5.4. El método de ordenamiento rápido, quick-sort. Tiempo de ejecución. Casos extremos. Elección del pivote. Tiempo de ejecución. Caso promedio. Dispersión de los tiempos de ejecución. Elección aleatoria del pivote. El algoritmo de partición . Tiempo de ejecución del algoritmo de particionamiento. Búsqueda del pivote por la mediana. Implementación de quick-sort. Estabilidad. El algoritmo de intercambio (swap). Tiempo de ejecución del quick-sort estable. 5.5. Ordenamiento por montículos. El montículo. Propiedades. Inserción. Costo de la inserción. Eliminar el mínimo. Costo de re-heap. Implementación in-place. El procedimiento make-heap. Implementación. Propiedades de la clasificación por montículo. 5.6. Ordenamiento por fusión. Implementación. Estabilidad. Versión estable de split. Merge-sort para vectores. Clasificación externa. 5.7. Comparación de algunas implementaciones de algoritmos de ordenamiento. |
Técnicas de Análisis de Algoritmos |
Eficiencia de los algoritmos. Análisis de programas recursivos. Resolución de ecuaciones de recurrencia. Solución general para una clase grande de recurrencias. Algoritmos dividir para vencer. Programación dinámica. |
BibliografÃa
BibliografÃa básica |
Tenenbaum y Augenstein |
Aho, Hopcroft y Ullman, |
Weiss |
Cronograma de actividades
Diseño y Análisis de Algoritmos | Semana 1 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 1 | Semana 1 | Tipo: EP | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Diseño y Análisis de Algoritmos | Semana 2 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 1, parte 2 | Semana 2 | Tipo: PI | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Tipos de Datos Abstractos Fundamentales. Parte 1 | Semana 3 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 2, parte 1 | Semana 3 | Tipo: EP | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Trabajo Práctico de Laboratorio | Semana 3 | Tipo: E | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: Resolución de ejercicios de programación en Laboratorio |
|||
Observaciones: |
Tipos de Datos Abstractos Fundamentales. Parte 2 | Semana 4 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 2. Parte 2 | Semana 4 | Tipo: PI | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Tipos de Datos Abstractos Fundamentales, Parte 3 | Semana 5 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 2, Parte 3 | Semana 5 | Tipo: EP | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Arboles, Parte 1 | Semana 6 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 3, Parte 1] EP | Semana 6 | Tipo: PI | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Primer Parcial | Semana 6 | Tipo: E | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: Primer parcial |
|||
Observaciones: |
Arboles, Parte 2 | Semana 7 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 3, Parte 2 | Semana 7 | Tipo: EP | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Arboles, Parte 3 | Semana 8 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 4, Parte 1 | Semana 8 | Tipo: PI | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Trabajo Práctico de Laboratorio | Semana 8 | Tipo: E | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: Resolución de ejercicios de programación en Laboratorio |
|||
Observaciones: |
Arboles, Parte 4 | Semana 9 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 4 [2] | Semana 9 | Tipo: EP | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Conjuntos, Parte 1 | Semana 10 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 5, Parte 1 | Semana 10 | Tipo: PI | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Conjuntos, Parte 2 | Semana 11 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 5, Parte 2 | Semana 11 | Tipo: EP | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Conjuntos, Parte 3 | Semana 12 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 6 | Semana 12 | Tipo: PI | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Trabajo Práctico de Laboratorio | Semana 12 | Tipo: E | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: Resolución de ejercicios de programación en Laboratorio |
|||
Observaciones: |
Clasificación. Parte 1 | Semana 13 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 7, Parte 1 | Semana 13 | Tipo: EP | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Clasificación, Parte 2 | Semana 14 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 7, Parte 2 | Semana 14 | Tipo: PI | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Segundo parcial | Semana 14 | Tipo: E | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: Segundo parcial |
|||
Observaciones: |
Técnicas de Análisis de Alg. Parte 1 | Semana 15 | Tipo: T | Duración: 2 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Guia de TP Nro 8, Parte 1 | Semana 15 | Tipo: EP | Duración: 4 hs |
Docente/s responsable/s: Juan Marcelo Gimenez, Mario Alberto Storti, Mario Alberto Storti | |||
Descripción: | |||
Observaciones: |
Requerimientos para regularizar
Haber obtenido al menos 40% de rendimiento en los 2 parciales (el Recuperatorio es globalizador y reemplaza a la peor nota de los parciales) y aprobar los 3 TPL (Trabajos Prácticos de Laboratorio). |
Requerimientos para promover
Debe regularizar la materia. Debe obtener un promedio mínimo de 70% y no inferior a 60% en cada uno de los 2 parciales y 3 TPLs |
Examen final
Alumnos regulares |
Se toma un examen final sobre la parte práctica (programación, ejercicios operativos y clases) y preguntas de Teoría. |
Alumnos libres |
Se toma un examen final sobre la parte práctica (programación, ejercicios operativos y clases) y preguntas de Teoría. |
Evaluaciones
Fecha | Tipo | Modalidad | Descripción |
---|---|---|---|
16-09-2021 | Trabajo Práctico | Otra | Trabajo práctico de laboratorio TPL1. El alumno debe escribir programas que cumplen con consignas en el ordenador. Tema: listas |
14-10-2021 | Parcial | Escrita | Parcial 1. Capítulos 1, 2 y 3 (hasta AOO, Arbol Ordenado Orientado) |
21-10-2021 | Trabajo Práctico | Otra | Trabajo práctico de laboratorio TPL2. El alumno debe realizar programas en ordenador que satisfacen consignas. Temas: pila, lista, correspondencia, arbol ordenado orientado. |
11-11-2021 | Trabajo Práctico | Otra | Trabajo práctico de laboratorio TPL3. Idem TPL1 y TPL2. Tema: arbol binario, conjuntos, ordenamiento |
25-11-2021 | Parcial | Escrita | Parcial 2. Desde capítulo 3 (arboles) en adelante. |
02-12-2021 | Recuperatorio | Escrita | Recuperatorio. |