Grao en Enxeñaría Informática |
![]() |
![]() |
![]() |
|
|
|
Datos Identificativos | 2024/25 | |||||||||||||
Asignatura | Algoritmos | Código | 614G01011 | |||||||||||
Titulación |
|
|||||||||||||
Descriptores | Ciclo | Periodo | Curso | Tipo | Créditos | |||||||||
Grado | 1º cuatrimestre |
Segundo | Obligatoria | 6 | ||||||||||
|
Tema | Subtema |
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, los 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 a la ordenación rápida, ya que permite introducir la característica fundamental de los algoritmos aleatorios, que se comportan de forma distinta al ejecutarse con una misma entrada. Una consecuencia directa es que el calificativo de peor caso o mejor caso para una entrada concreta 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 artificial. 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 un 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 |
|