Planificación de Algoritmos y Estructuras de Datos (2021)

 IMPRIMIR PLANIFICACIÓN

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
Estructura de Datos en Pascal
Prentice-Hall

ISBN: 978-9688800324

Aho, Hopcroft y Ullman,
Estructura de Datos Y Algoritmos
Addison-Wesley

ISBN: 978-9684443457

Weiss
Estructuras de Datos y Algoritmos
Addison Wesley


ISBN: 978-0201625714

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.