Algoritmos y Estructuras de Datos

Usted está aquí

Créditos
6
Tipos
Obligatoria
Requisitos
Esta asignatura no tiene requisitos, pero tiene capacidades previas
Departamento
CS
Mail
Esta asignatura se centra en estructuras de datos y algoritmos para el análisis eficiente de datos en problemas bioinformaticos. La materia abarca árboles, diccionarios, grafos y colas de prioridad, y explica los algoritmos relacionados con estas estructuras de datos, así como algoritmos eficientes para explorar espacios de búsqueda complejos. El curso introduce la teoría de la intractabilidad computacional y sus respectivas clases.

Profesorado

Responsable

  • Caroline König ( )

Horas semanales

Teoría
2
Problemas
1
Laboratorio
1
Aprendizaje dirigido
0
Aprendizaje autónomo
6

Objetivos

  1. Conocer las estructuras de datos clave utilizadas en la computación bioinformática.
    Competencias relacionadas: K3, K4, S7, S8, C6,
    Subcompetences:
    • Conocer problemas relevantes en la computación bioinformática que se resuelven apoyándose en estructuras de datos específicas.
  2. Comprender el diseño y la implementación de estructuras de datos básicas para una gestión de datos eficiente en algoritmos avanzados.
    Competencias relacionadas: K3, K4, S7, S8, C6,
    Subcompetences:
    • Conocer, comprender, diseñar estructura de datos para implementar diccionarios.
    • Conocer, comprender, diseñar estructura de datos para implementar colas de prioridad.
    • Conocer, comprender, diseñar estructuras de datos para implementar árboles.
    • Conocer, comprender, diseñar estructura de datos para implementar pilas y colas.
  3. Conocimiento sobre algoritmos que resuelvan problemas clásicos en grafos.
    Competencias relacionadas: K3, K4, S7, S8, C6,
    Subcompetences:
    • Conocer, diseñar, comparar e implementar algoritmos de camino más corto en grafos.
    • Conocer, diseñar, comparar e implementar algoritmos para ordenación topológica.
    • Conocer, diseñar, comparar e implementar algoritmos de recorrido de grafos.
  4. Comprender, diseñar, comparar e implementar algoritmos de string matching.
    Competencias relacionadas: K3, K4, S7, S8, C6,
  5. Conocer, diseñar e implementar algoritmos de búsqueda exhaustivos.
    Competencias relacionadas: K3, K4, S7, S8, C6,
    Subcompetences:
    • Comprender, diseñar e implementar algoritmos para explorar el espacio de búsqueda: Backtracking y Branch and Bound.
  6. Analizar los límites de la computación a través del estudio de la completitud computacional.
    Competencias relacionadas: K3, K4, S7, S8, C6,
    Subcompetences:
    • Comprender el Teorema de Cook-Levin como base para demostrar la NP-completitud de problemas.
    • Reconocer y clasificar diversos problemas NP-completos, explorando sus dificultades y posibles aproximaciones algorítmicas para abordarlos.

Contenidos

  1. Introducción a estructura de datos en bioinformatica
    Introducción a las estructuras de datos clave y descripción general de su aplicación en problemas bioinformáticos relevantes.
  2. Algoritmos sobre arboles
    Estructura de datos para arboles. Arboles binarios de búsqueda. Arboles AVL.
  3. Diccionarios
    Implementaciones basicas: tablas y listas. Implementaciones avanzadas: tablas de dispersiçón, arboles binarios de búsqueda.
  4. Colas de prioridad
    Operaciones con colas de prioridad. Implementación con heaps. Heapsort
  5. Algoritmes sobre strings
    Algoritmos exactos y aproximados de string matching
  6. Algoritmos básicos de grafos
    Representaciones: Matriz de adjacencia, lista de adjacencia. Búsqueda en profundidad, Búsqueda por anchura. Algoritmo de Dijkstra y Bellman-Ford del camino más corto.
  7. Algoritmos avanzados sobre grafos
    Ordenación topológica, Árboles de recubrimiento mínimo, Algoritmo de Kruskal, Algoritmo de Prim
  8. Algoritmos de búsqueda exhaustiva
    Principios: espacio de soluciones, generación de subconjuntos, permutaciones. Backtracking y Branch and Bound.
  9. Nociones de intratabilidad
    Clase P y NP. NP-completitud y reducabilidad.

Actividades

Actividad Acto evaluativo


Introducción a las estructuras de datos en la computación bioinformática


Objetivos: 1
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h

Algoritmos sobre arboles


Objetivos: 2
Teoría
4h
Problemas
2h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Diccionarios


Objetivos: 2
Teoría
2h
Problemas
0h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
4h

Cola de Prioridad


Objetivos: 2
Teoría
2h
Problemas
2h
Laboratorio
1h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Algoritmos sobre strings


Objetivos: 4
Teoría
3h
Problemas
2h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Examen parcial


Objetivos: 2 4 1
Semana: 8 (Fuera de horario lectivo)
Teoría
2h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Algoritmos basicos sobre grafos


Objetivos: 3
Teoría
4h
Problemas
2h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Algoritmos avanzados sobre grafos


Objetivos: 3
Teoría
2h
Problemas
1h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
6h

Algoritmos de búsqueda exhaustiva


Objetivos: 5
Teoría
4h
Problemas
2h
Laboratorio
2h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Nociones de intractabilidad


Objetivos: 6
Teoría
2h
Problemas
4h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Examen final


Objetivos: 2 5 3 6 4 1
Semana: 18 (Fuera de horario lectivo)
Teoría
3h
Problemas
0h
Laboratorio
0h
Aprendizaje dirigido
0h
Aprendizaje autónomo
10h

Metodología docente

Las clases teóricas presentan conceptos y técnicas fundamentales, que luego se aplican en sesiones de resolución de problemas y laboratorio mediante una colección de ejercicios evaluados por un juez automático.

Las sesiones teóricas se realizan semanalmente durante dos horas, mientras que las clases de laboratorio y resolución de problemas tienen lugar cada dos semanas, también con una duración de dos horas cada una.

El curso se basa en la programación con Python.

Método de evaluación

EP = nota del examen parcial (entre 0 i 10)
EF = nota del examen final (entre 0 i 10)
AC= activitades de evalucacicón continuada (problemas)
EJ= ejercicios de programación (jutge)

NOTA = 10.0%AC + 10.0%EJ+ 35.0%EP + 45.0%EF

La nota del examen de reevaluación sustituye la nota del examen parcial y del examen final.

Bibliografía

Básica:

Complementaria:

Web links

Capacidades previas

Se requiere que los estudiantes tengan una base en programación imperativa orientada a objetos, incluyendo el paso de parámetros, clases, objetos, métodos, punteros, memoria dinámica, recursividad e iteradores. También deben conocer Python y tener nociones básicas de cálculo de eficiencia de algoritmos, incluyendo la notación asintótica y el análisis de coste en tiempo y espacio.