Datos Identificativos 2012/13
Asignatura (*) Algoritmos Código 614G01011
Titulación
Grao en Enxeñaría Informática
Descriptores Ciclo Período Curso Tipo Créditos
Grao 1º cuadrimestre
Segundo Obrigatoria 6
Idioma
Castelán
Prerrequisitos
Departamento Computación
Coordinación
Valderruten Vidal, Alberto
Correo electrónico
alberto.valderruten@udc.es
Profesorado
Blanco Ferro, Antonio angel
Fontenla Romero, Oscar
Gómez Rodríguez, Carlos
Hernandez Pereira, Elena Maria
Jorge Castro, Jose Santiago
Valderruten Vidal, Alberto
Correo electrónico
antonio.blanco.ferro@udc.es
oscar.fontenla@udc.es
carlos.gomez@udc.es
elena.hernandez@udc.es
santiago.jorge@udc.es
alberto.valderruten@udc.es
Web http://www.madsgroup.org/docencia/alg
Descrición xeral La asignatura de Algoritmos permite al estudiante de ingeniería informática profundizar en las técnicas de diseño de los algoritmos teniendo en cuenta factores cualitativos y cuantitativos en la evaluación de los mismos. Por una parte completa la formación en la elaboración de programas eficientes y correctamente estructurados, y por otra parte permite abordar las técnicas de diseño más utilizadas en la resolución de los problemas que puede encontrar el ingeniero.
Es de destacar que la realización de experimentos de medición de tiempos de ejecución de los distintos programas analizados aporta un enfoque empírico que suele ser muy valorado por el estudiante, que puede así constatar la interpretación concreta de las complejidades encontradas. Las dificultades planteadas por algunos casos estudiados permiten una reflexión complementaria sobre aspectos como la gestión de recursos informáticos, detalles de ejecución de procesos, arquitecturas y sistemas operativos utilizados, etc.
También es destacable el estudio y análisis de un conjunto importante de algoritmos fundamentales, cubriendo un amplio espectro de técnicas algorítmicas y de sus aplicaciones. La posibilidad de aplicar distintas técnicas en la resolución de algunos problemas lleva naturalmente a pensar en ventajas e inconvenientes de las distintas estrategias, y en la necesidad de saber elegir la que mejor se adapta a cada situación.
Por último es importante profundizar en el rigor necesario para desarrollar no sólo soluciones que se adapten a unas especificaciones dadas, sino además que lo hagan de modo eficiente desde el punto de vista de los recursos informáticos necesarios. Resulta fundamental la ilustración mediante varios casos prácticos en los que la existencia de algoritmos eficientes conocidos lleva a desechar los diseños alternativos por muy naturales que puedan resultar a primera vista.

Competencias do título
Código Competencias da titulación
A12 Coñecemento e aplicación dos procedementos algorítmicos básicos das tecnoloxías informáticas para deseñar solucións a problemas, analizando a idoneidade e a complexidade dos algoritmos propostos.
A13 Coñecemento, deseño e utilización de forma eficiente dos tipos e estruturas de datos máis adecuados á resolución dun problema.
B7 Asumir como profesional e cidadán a importancia da aprendizaxe ao longo da vida.
B11 Capacidade de análise e síntese
C3 Utilizar as ferramentas básicas das tecnoloxías da información e as comunicacións (TIC) necesarias para o exercicio da súa profesión e para a aprendizaxe ao longo da súa vida.

Resultados de aprendizaxe
Competencias de materia (Resultados de aprendizaxe) Competencias da titulación
Reconocer la importancia del estudio de la complejidad de los algoritmos y saber realizar estudios empíricos para determinarla. A12
A13
B7
B11
C3
Conocer los conceptos básicos relacionados con las técnicas de análisis de la complejidad de los algoritmos. A12
B11
Identificar estructuras de datos adaptadas a los algoritmos estudiados para obtener implementaciones más eficientes y robustas. A13
B11
C3
Saber aplicar las técnicas de análisis de la complejidad de los algoritmos. A12
A13
B7
B11
Conocer las técnicas más utilizadas en el diseño de los algoritmos. A12
B11
Utilizar diferentes modelos de computación y niveles de abstracción necesarios para el diseño de algoritmos. A12
B11
Comprender elementos de estudio sobre la complejidad computacional. A12
A13
B11
Efectuar estudios empíricos para determinar la complejidad de un algoritmo. A12
A13
B11
C3
Mostrar interés sobre el análisis de los algoritmos. A12
B7
B11

Contidos
Temas Subtemas
Tema 1
Título del tema: Análisis de Algoritmos.
Código: T1
Presentación: En este primer tema se plantea el análisis de la complejidad de los algoritmos como uno de los principales objetivos del curso.
En síntesis, se trata de añadir a los criterios que ya deben resultar familiares de estructuración y de corrección de los programas el de la eficiencia de los algoritmos.
Unidades de contenido:
1. Análisis de la eficiencia de los algoritmos: Notaciones asintóticas, Modelo de computación, Verificación empírica del análisis.
2. Cálculo de los tiempos de ejecución: Análisis de los casos peor y medio, Cálculo de la O, Resolución de recurrencias.
Tema 2
Título del tema: Estructuras de datos.
Código: T2
Presentación: En este segundo tema se propone una revisión de las estructuras de datos básicas (pilas, listas, colas, árboles, conjuntos y grafos) con el objetivo de estudiar todas las implicaciones que conlleva su uso en cuanto a las complejidades espacial y temporal.
Igualmente se profundiza en el estudio de estructuras interesantes desde el punto de vista del tiempo de ejecución: las tablas de dispersión y los montículos, estructura ésta última a la que recurriremos más adelante cuando se trate de implementar mejoras en algoritmos de grafos y algún caso de programación dinámica. La complejidad de la operación de búsqueda puede servir como hilo conductor en buena parte de este tema.
Conviene en una introducción de esta parte del curso el insistir en los criterios de estructuración que debemos mantener en el diseño de cualquier aplicación, motivando el uso de tipos de datos abstractos y su consiguiente implementación mediante módulos. El objetivo es dar así las líneas generales de lo que se considera la disciplina de programación que debe exigirse al estudiante para la realización de las prácticas.
Unidades de contenido:
1. Pilas, colas, listas.
2. Árboles, montículos.
3. Dispersión (hashing).
4. Conjuntos disjuntos.
5. Grafos (representación).
Tema 3
Título del tema: Algoritmos sobre secuencias y conjuntos de datos
Código: T3
Presentación: El problema de la ordenación de una secuencia de elementos se convierte en esta parte del curso en una excusa ideal tanto para estudiar la complejidad de varios tipos de algoritmos como para presentar diferentes estrategias de diseño de algoritmos que se pueden extrapolar para la resolución de otros problemas.
Uno de los algoritmos a los que se le dedicará especial atención es la ordenación rápida, ya que permite introducir la característica fundamental de los algoritmos aleatorios que se pueden comportar de forma distinta cuando se aplican dos veces a una misma entrada. Una consecuencia directa es que el calificativo de peor caso o mejor caso para una entrada deja de tener sentido, aspecto que es importante debatir en clase.
Unidades de contenido:
1. Algoritmos de búsqueda.
2. Algoritmos de ordenación: Inserción, Shell, Montículos (heapsort), Fusión (mergesort), Ordenación Rápida (quicksort).
3. Algoritmos aleatorios.
Tema 4
Título del tema: Algoritmos voraces
Código: T4
Presentación: En este tema se estudian algoritmos ávidos o voraces. Una vez explicada la técnica a través de sus características generales que presentaremos con la ayuda de algún ejemplo, se estudiarán los algoritmos más representativos de esta categoría: los algoritmos de grafos, una solución al problema de la mochila y algún problema de
planificación de tareas.
Unidades de contenido:
1. Problema de la mochila.
2. Algoritmos de grafos: Ordenación Topológica, Árbol de recubrimiento mínimo, Caminos mínimos.
3. Problemas de planificación de sistemas informáticos.
Tema 5
Título del tema: Diseño de algoritmos por inducción
Código: T5
Presentación: En este punto, ya se habrá visto a lo largo del curso varios algoritmos que siguen la estrategia divide y vencerás: ordenación por fusión y ordenación rápida, búsqueda dicotómica, suma de la subsecuencia máxima. . . El trabajo propuesto en la primera unidad de este tema consiste básicamente en generalizar los planteamientos de dicha estrategia identificando sus distintas características en cada uno de los algoritmos propuestos.
En la segunda unidad del tema se plantea usar una estrategia ascendente mediante la búsqueda de una solución general a partir de las soluciones de subproblemas elementales. Desde el punto de vista de la eficiencia se cuestionará el uso de técnicas descendentes como divide y vencerás en determinadas situaciones. Mientras que con la opción de la programación dinámica se buscará un compromiso que permita, cuando sea posible, una optimización de la cantidad de memoria requerida por el algoritmo.
Unidades de contenido:
1. Divide y Vencerás.
2. Programación dinámica: Principio de optimalidad, Problema de la mochila.
Tema 6
Título del tema: Exploración de grafos.
Código: T6
Presentación: El objetivo de este tema es el de dar una visión más amplia de las aplicaciones de los grafos en el tratamiento de problemas de diversa índole, así como la de no dejar de lado las técnicas algorítmicas ligadas al desarrollo de importantes áreas de
la computación como la inteligencia articial.
Los algoritmos de grafos vistos en el tema de algoritmos voraces (T4) coinciden en realizar un recorrido de todos los nodos del grafo. Se insistirá entonces en cómo mejorar los tiempos de ejecución de los algoritmos que se presenten evitando de alguna manera el análisis exhaustivo de todos los nodos.
Unidades de contenido:
1. Juegos de estrategia.
2. Recorridos.
3. Algoritmos con retroceso.
Tema 7
Título del tema: Complejidad Computacional.
Código: T7
Presentación: En este último tema planteamos un razonamiento sobre el conjunto de los algoritmos capaces de resolver cada tipo de problema. Hablaremos de las complejidades de los problemas, de cotas inferiores para la complejidad de los problemas y de NP-compleción, en definitiva, de las principales técnicas y conceptos que se utilizan en el estudio de la complejidad computacional.
Unidades de contenido:
1. NP-Completitud, Problemas NP-completos

Planificación
Metodoloxías / probas Horas presenciais Horas non presenciais / traballo autónomo Horas totais
Sesión maxistral 28.75 28.75 57.5
Proba de resposta breve 1.25 5.25 6.5
Prácticas de laboratorio 20 10 30
Traballos tutelados 4 10 14
Solución de problemas 6 12 18
Proba obxectiva 4 20 24
 
Atención personalizada 0 0 0
 
*Os datos que aparecen na táboa de planificación son de carácter orientativo, considerando a heteroxeneidade do alumnado

Metodoloxías
Metodoloxías Descrición
Sesión maxistral Clases magistrales en la exposición de los conocimientos teóricos utilizando diferentes recursos: la pizarra, transparencias, proyecciones, demostraciones y la facultad virtual. Puede incluir conferencia invitada.
Proba de resposta breve En general consiste en la realización de trabajos tutelados que son evaluados.
Prácticas de laboratorio Prácticas diseñadas por el profesor basadas en los conocimientos que el estudiante va adquiriendo. Los estudiantes desarrollarán estos trabajos bien individualmente bien en parejas. Se implementarán programas que ilustren los problemas relacionados con el tema. Se pedirá el informe de resultados para su evaluación.
Se evaluará de forma continua los informes de la práctica anterior.
Se evaluará igualmente mediante una práctica individual final.
Traballos tutelados Trabajos tutelados propuestos por el profesor y desarrollados por los estudiantes o bien en grupo o bien individualmente.
Solución de problemas Se desarrollarán ejemplos sobre los conocimientos teóricos relacionados con el tema, y se resolverán dudas. Incluye evaluación.
Proba obxectiva Se evaluará el dominio de los conocimientos teóricos y operativos de la materia.

Atención personalizada
Metodoloxías
Traballos tutelados
Prácticas de laboratorio
Solución de problemas
Descrición
Clases de problemas en grupos reducidos: Se desarrollarán ejemplos sobre los conocimientos teóricos relacionados con el tema, y se resolverán dudas.
Trabajos tutelados bien individuales bien en grupo sobre algún aspecto del tema a estudiar. Son controlados por parte del profesor mediante tutorías en grupo y controles de evaluación.
Prácticas de aula de informática: Se implementarán programas que ilustren los problemas relacionados con el tema. Se pedirán el informe de resultados para su evaluación.

Avaliación
Metodoloxías Descrición Cualificación
Proba de resposta breve 3 pruebas escritas de evaluación continua, en las que se evaluará el dominio de los contenidos de los trabajos académicos a revisar.
Se realizarán durante las horas de teoría y se anunciarán con al menos 7 días de antelación.
15
Prácticas de laboratorio 4 prácticas realizadas en parejas o de forma individual, en las que se evaluará: estructuración de los programas, calidad de la documentación, claridad, adecuación y explicación de los resultados, responsabilidad en la entrega en tiempo y forma.

Tutorías de seguimiento de las prácticas, durante las horas de práctica: 10%

Examen individual de prácticas: 20%
30
Solución de problemas Se desarrollarán ejemplos sobre los conocimientos teóricos relacionados con el tema, y se resolverán dudas. Incluye evaluación de 3 trabajos.
Se realizarán durante las horas de Trabajo en Grupo Reducido (Seminarios).
15
Proba obxectiva Se evaluará el dominio de los conocimientos teóricos y operativos de la materia. 40
 
Observacións avaliación

En la 1ª oportunidad, las prácticas de laboratorio se evaluarán durante las tutorías de seguimiento que se realizarán en el horario de prácticas. Esta evaluación continua supondrá 1/3 parte de la evaluación de las prácticas.

La entrega de todas las prácticas es obligatoria para poder presentarse al examen individual de prácticas y optar a las 2/3 partes restantes de su evaluación.

El examen de prácticas tendrá lugar tras la finalización de la prueba objetiva, en el mismo día del examen teórico; es muy recomendable disponer, previamente, del material de todas las prácticas en la
cuenta de usuario.

Presentarse a pruebas que supongan el 20% de la evaluación de la asignatura supondrá una calificación distinta al "no presentado" en el acta correspondiente.


Fontes de información
Bibliografía básica M. A. Weiss (1995). Estructuras de Datos y Algoritmos. Addison Wesley
G. Brassard y P. Bratley (1997). Fundamentos de Algoritmia. Prentice Hall
U. Manber (1989). Introduction to Algorithms - A Creative Approach. Addison Wesley

Bibliografía complementaria R. Sedgewick (1988). Algorithms. Addison Wesley
R. Peña Marí (2005). Diseño de Programas. Formalismo y Abstracción. Tercera edición.. Pearson Prentice Hall
B. W. Kernighan y D. M. Ritchie (1991). El lenguaje de programación C, 2ª edición. Prentice Hall
T. H. Cormen, C. E. Leiserson y R. L. Rivest (1990). Introduction to Algorithms. MIT Press


Recomendacións
Materias que se recomenda ter cursado previamente
Concorrencia e Paralelismo/614G01018
Sistemas Intelixentes/614G01020

Materias que se recomenda cursar simultaneamente

Materias que continúan o temario
Matemática Discreta/614G01004
Programación II/614G01006

Observacións


(*)A Guía docente é o documento onde se visualiza a proposta académica da UDC. Este documento é público e non se pode modificar, salvo casos excepcionais baixo a revisión do órgano competente dacordo coa normativa vixente que establece o proceso de elaboración de guías