Datos Identificativos 2023/24
Asignatura (*) Algoritmos Código 614G03008
Titulación
Grao en Intelixencia Artificial
Descriptores Ciclo Periodo Curso Tipo Créditos
Grado 1º cuatrimestre
Segundo Obligatoria 6
Idioma
Castellano
Modalidad docente Presencial
Prerrequisitos
Departamento Ciencias da Computación e Tecnoloxías da Información
Coordinador/a
Valderruten Vidal, Alberto
Correo electrónico
alberto.valderruten@udc.es
Profesorado
Cancela Barizo, Brais
Casanova Crespo, Jose Maria
Gómez Rodríguez, Carlos
Jorge Castro, Jose Santiago
Sanchez Maroño, Noelia
Valderruten Vidal, Alberto
Correo electrónico
brais.cancela@udc.es
jose.casanova.crespo@udc.es
carlos.gomez@udc.es
santiago.jorge@udc.es
noelia.sanchez@udc.es
alberto.valderruten@udc.es
Web
Descripción general A materia de Algoritmos permite ao estudante do Grao en Intelixencia Artificial profundizar nas técnicas de deseño dos algoritmos tendo en conta factores cualitativos e cuantitativos na súa avaliación. Dunha parte completa a formación na elaboración de programas eficientes e correctamente estructurados, e doutra permite abordar as técnicas de deseño máis utilizadas na resolución dos problemas que pode atopar para a resolución de problemas de Intelixencia Artificial.
É de destacar que a realización de experimentos de medición de tempos de execución sobre os distintos algoritmos analizados achega un enfoque empírico que adoita ser moi valorado polo estudante, que pode así constatar a interpretación concreta das complexidades manexadas. As dificultades plantexadas por algúns casos estudados permiten unha reflexión complementaria sobre aspectos como a xestión de recursos informáticos, detalles de execución de procesos, arquitecturas e sistemas operativos utilizados, etc.
Tamén é destacable o estudo e análise dun conxunto importante de algoritmos fundamentais, cubrindo un amplo espectro de técnicas algorítmicas e das súas aplicacións. A posibilidade de usar distintas técnicas na resolución dalgúns problemas leva naturalmente a pensar nas vantaxes e inconvintes das distintas estratexias, e na necesidade de saber elixir a que mellor se adapta a cada situación.
Por último é importante profundizar no rigor necesario para desenvolver non só solucións que se adapten a unhas especificacións dadas, sinon ademáis que o fagan de modo eficiente dende o punto de vista dos recursos informáticos necesarios. Resulta fundamental a ilustración mediante varios casos prácticos nos que a existencia de algoritmos eficientes coñecidos leva a desbotar deseños alternativos por moi naturais que podan resultar a primeira vista.

Competencias del título
Código Competencias del título
A1 Capacidad para utilizar los conceptos y métodos matemáticos y estadísticos para modelizar y resolver problemas de inteligencia artificial.
A5 Comprender y aplicar los principios y técnicas básicas de la programación paralela y distribuida para el desarrollo y ejecución eficiente de las técnicas de inteligencia artificial.
B2 Que el alumnado sepa aplicar sus conocimientos a su trabajo o vocación de una forma profesional y posea las competencias que suelen demostrarse por medio de la elaboración y defensa de argumentos y la resolución de problemas dentro de su área de estudio.
B4 Que el alumnado pueda transmitir información, ideas, problemas y soluciones a un público tanto especializado como no especializado.
B5 Que el alumnado haya desarrollado aquellas habilidades de aprendizaje necesarias para emprender estudios posteriores con un alto grado de autonomía.
B6 Capacidad para concebir, redactar, organizar, planificar, y desarrollar modelos, aplicaciones y servicios en el ámbito de la inteligencia artificial, identificando objetivos, prioridades, plazos recursos y riesgos, y controlando los procesos establecidos.
B7 Capacidad para resolver problemas con iniciativa, toma de decisiones, autonomía y creatividad.
B8 Capacidad para diseñar y crear modelos y soluciones de calidad basadas en Inteligencia Artificial que sean eficientes, robustas, transparentes y responsables.
B9 Capacidad para seleccionar y justificar los métodos y técnicas adecuadas para resolver un problema concreto, o para desarrollar y proponer nuevos métodos basados en inteligencia artificial.
C2 Capacidad de trabajo en equipo, en entornos interdisciplinares y gestionando conflictos.
C3 Capacidad para crear nuevos modelos y soluciones de forma autónoma y creativa, adaptándose a nuevas situaciones. Iniciativa y espíritu emprendedor.
C6 Capacidad para integrar aspectos jurídicos, sociales, ambientales y económicos inherentes a la inteligencia artificial, analizando sus impactos, y comprometiéndose con la búsqueda de soluciones compatibles con un desarrollo sostenible.

Resultados de aprendizaje
Resultados de aprendizaje Competencias del título
Saber solucionar problemas de diversa índole, comprendiendo la complejidad e idoneidad de las soluciones propuestas. A1
A5
B2
B5
B7
B9
C3
Conocer las estrategias algorítmicas básicas para el diseño de algoritmos eficientes. A1
A5
B5
B6
B7
B8
B9
C3
Saber aplicar algoritmos eficientes a problemas clásicos, como los de ordenación y búsqueda. A1
B2
B5
B7
B9
C3
Saber determinar la complejidad espacial y temporal de los distintos algoritmos. A1
B2
B4
B6
B9
C6
Entender y dominar las estructuras de datos tipo grafos y aprender a diseñar y aplicar algoritmos sobre ellas, para resolver problemas básicos de IA. A5
B5
B6
B7
B8
B9
C3
Aprender a diseñar y aplicar algoritmos sobre grafos, para resolver problemas básicos de IA. A1
A5
B2
B5
B7
B9
C2

Contenidos
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 (vuelta atrás), ramificación y poda.
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
Metodologías / pruebas Competéncias Horas presenciales Horas no presenciales / trabajo autónomo Horas totales
Sesión magistral A1 A5 B2 B5 B6 B7 B8 B9 C3 28.75 28.75 57.5
Prueba de respuesta breve A1 A5 B2 B5 B6 B7 B8 B9 C3 1.25 6.25 7.5
Prácticas de laboratorio A1 A5 B2 B4 B5 B6 B7 B8 B9 C2 C3 C6 19 19 38
Trabajos tutelados A5 B2 B4 B6 B7 C3 C6 4 2 6
Solución de problemas A1 B2 B5 B6 B7 B8 B9 C3 5 10 15
Prueba objetiva A1 A5 B2 B4 B6 B7 B8 B9 C3 C6 4 20 24
 
Atención personalizada 2 0 2
 
(*)Los datos que aparecen en la tabla de planificación són de carácter orientativo, considerando la heterogeneidad de los alumnos

Metodologías
Metodologías Descripción
Sesión magistral Clases magistrales en la exposición de los conocimientos teóricos utilizando diferentes recursos: la pizarra, transparencias, proyecciones, demostraciones y el Campus Virtual. Puede incluir conferencia invitada.
Prueba de respuesta breve En general consiste en la realización de ejercicios sobre la ejecución de casos sobre los algoritmos estudiados o sobre su adaptación a otras situaciones. Estas pruebas son evaluadas.
Prácticas de laboratorio Prácticas diseñadas por el profesor basadas en los conocimientos que el estudiante va adquiriendo en las clases magistrales y que por tanto las complementan.
Los estudiantes desarrollarán estos trabajos en grupos de dos o tres personas a lo largo del curso, e individualmente en una práctica final que se incluye en la prueba objetiva.
Se implementarán programas que ilustren los problemas relacionados con el tema. Se pedirá el informe de resultados para su evaluación. A lo largo de las horas asignadas a cada práctica se evaluarán los informes de la práctica anterior.
Trabajos 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. Se evaluará individualmente la resolución de algunos problemas.
Prueba objetiva Se evaluará el dominio de los conocimientos teóricos y operativos de la materia.
Se evaluará igualmente la práctica individual final.

Atención personalizada
Metodologías
Prácticas de laboratorio
Trabajos tutelados
Solución de problemas
Descripció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.
En lo referente a las tutorías individuales, fuera de las horas de clase la atención se mantiene en los horarios de tutorías a través de los siguientes canales, además del presencial:
- Correo electrónico, para consultas de respuesta breve.
- Teams: encuentros virtuales preferentemente previa solicitud a través del correo electrónico.

Evaluación
Metodologías Competéncias Descripción Calificación
Prueba de respuesta breve A1 A5 B2 B5 B6 B7 B8 B9 C3 2 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 que se incluyen en la planificación inicial de la asignatura presentada al inicio del curso.
5
Prácticas de laboratorio A1 A5 B2 B4 B5 B6 B7 B8 B9 C2 C3 C6 4 prácticas realizadas en grupos de dos ou tres personas, en las que se evaluará: estructuración de los programas, calidad de la documentación, claridad, adecuación y explicación de los resultados.

La entrega en tiempo y forma de las prácticas es condición necesaria para acceder al examen individual final de prácticas de la 1ª oportunidad.

La evaluación se realiza mediante tutorías de seguimiento de las prácticas, durante las horas de práctica.
15
Solución de problemas A1 B2 B5 B6 B7 B8 B9 C3 Evaluación de 2 ó 3 trabajos en los que se desarrollarán ejemplos sobre los conocimientos teóricos relacionados con el tema tras resolver dudas.

Se realizarán durante las horas de Trabajo en Grupo Reducido (TGR) planificadas a lo largo del curso, pudiendo en algún caso completarse en horas no presenciales.
10
Prueba objetiva A1 A5 B2 B4 B6 B7 B8 B9 C3 C6 Se evaluará el dominio de los conocimientos teóricos y operativos de la materia.

Examen individual de teoría: 50%
Examen individual de prácticas: 20%

Para ser convocada/o al examen de prácticas de la 1ª oportunidad, es necesaria la entrega en plazo de las prácticas de laboratorio.
70
 
Observaciones evaluación

El examen individual de prácticas (prueba objetiva) tendrá lugar en
el mismo día fijado para el examen de la asignatura y podrán
establecerse distintos turnos dependiendo del número de estudiantes
matriculados; es necesario disponer, previamente, del material de todas
las prácticas realizadas a lo largo del curso en el portátil de cada estudiante, o bien en su
cuenta de usuario.

Presentarse al examen de prácticas o al examen de teoría supondrá una
calificación distinta al "no presentado" en el acta correspondiente.

Según
lo previsto por la Norma que regula el régimen de dedicación al estudio
de los estudiantes de Grado de la UDC, los estudiantes podrán optar en
la matrícula por una dedicación a tiempo parcial y dispensa académica de
exención de asistencia. Su implantación en el ámbito de esta asignatura
supondrá que, de forma general, la calificación que figurará en el acta
será la mejor entre la obtenida según el criterio especificado en esta
sección de la guía docente, y la obtenida únicamente con la prueba
objetiva ponderando en un 70% el examen de teoría y en un 30% el examen
de prácticas.

En la 2ª oportunidad el estudiante podrá presentarse nuevamente
tanto al examen de prácticas como al examen teórico (partes previstas en
la prueba objetiva). De no presentarse a alguno de ellos, se conservará en el la calificación obtenida en la 1ª oportunidad.

En
la oportunidad adelantada de diciembre el 100% de la evaluación
corresponderá a un examen específico de teoría que incluirá cuestiones
relacionadas con las prácticas.

La realización
fraudulenta de las pruebas o actividades de evaluación, una
vez comprobada, implicará directamente la calificación de suspenso en la

convocatoria en que se cometa: el/la estudiante será calificado con
“suspenso” (nota numérica 0) en la convocatoria correspondiente del
curso
académico, tanto si la comisión de la falta se produce en la primera
oportunidad como en la segunda. Para esto, se procederá a modificar su
calificación en el acta de primera oportunidad, si fuese necesario.


Fuentes de información
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

Complementária R. Peña Marí (2005). Diseño de Programas. Formalismo y Abstracción. Tercera edición.. Pearson Prentice Hall
T. H. Cormen, C. E. Leiserson y R. L. Rivest (1990). Introduction to Algorithms. MIT Press
F. Aguado, F. Gago, M. Ladra, G. Pérez, C. Vidal y A. M. Vieites (2018). Problemas resueltos de Combinatoria. Laboratorio con SageMath. Paraninfo
R. Sedgewick (1988). Algorithms. Addison Wesley
Goodrich, Michael T. (2013). Data structures and algorithms in Python. John Wiley and Sons


Recomendaciones
Asignaturas que se recomienda haber cursado previamente
Programación I/614G03006
Programación II/614G03007
Matemática Discreta/614G03003
Álgebra/614G03001

Asignaturas que se recomienda cursar simultáneamente

Asignaturas que continúan el temario
Algoritmos Básicos de la Inteligencia Artificial/614G03019
Autómatas y Lenguajes Formales/614G03017
Computación Concurrente. Paralela y Distribuida/614G03014

Otros comentarios

Según se recoge en las distintas normativas de aplicación para la docencia universitaria se incorporará la perspectiva de género en esta asignatura (se utilizará lenguaje no sexista, se propiciará la intervención en clase de alumnos y alumnas...). Se trabajará para identificar y modificar prejuicios y actitudes sexistas y se influirá en el contorno para modificarlos y fomentar valores de respeto y de igualdad. Se deberán detectar situaciones de discriminación por razón de género y se propondrán acciones y medidas para corregirlas.



(*) La Guía Docente es el documento donde se visualiza la propuesta académica de la UDC. Este documento es público y no se puede modificar, salvo cosas excepcionales bajo la revisión del órgano competente de acuerdo a la normativa vigente que establece el proceso de elaboración de guías