Cambiar a contenido.

UPV/EHU

Secciones
Herramientas Personales

Guía docente

Objetivos

Competencias

Requisitos

Temario

Descripción de los temas

Metodología

 

OBJETIVOS

El objetivo del curso es establecer los fundamentos para el análisis y diseño de algoritmos, dotando de conceptos y habilidades para incrementar la capacidad de desarrollo de soluciones algorítmicas eficientes. Además se ofrece una colección de algoritmos clásicos, para aumentar el repertorio de soluciones conocidas que faciliten la construcción de soluciones a problemas similares mediante adaptación o modificación de las del repertorio.

 

COMPETENCIAS

  • Reconocer situaciones donde poder reutilizar el repertorio de estructuras de datos y algoritmos clásicos.
  • Aplicar con criterio las técnicas básicas de análisis y diseño de algoritmos.
  • Analizar críticamente y con suficiente precisión distintas soluciones algorítmicas, para clasificarlas y para optar por la más conveniente.
  • Diseñar justificadamente soluciones algorítmicas eficientes de problemas propios de este nivel académico.

Más específicamente:

  • Comprender los conceptos básicos del análisis de algoritmos: operación elemental, tamaño de la entrada, función de coste; así como aprender los procesos pertinentes para expresar la función de coste de los algoritmos. Comprender lo que significa analizar un algoritmo en el caso peor y en el caso medio.
  • Asimilar el significado de cada notación asintótica y la técnica básica para clasificar funciones en la notación asintótica correspondiente.
  • Resolver recurrencias mediante las técnicas de expansión y  de la ecuación característica. Aplicar los teoremas de clasificación de recurrencias en notaciones asintóticas.
  • Adaptar los algoritmos de recorrido en anchura y recorrido en profundiad para resolver problemas formalizados sobre grafos.
  • Aplicar la técnica Divide y Vencerás a la resolución de problemas algorítmicos. Comprender los algoritmos Ordenación_por_Mezcla, Ordenación_rápida y Búsqueda_Dicotómica y utilizar sus fundamentos en la resolución de problemas análogos.
  • Comprender las implementaciones eficientes de la estructura de Montículo y reconocer situaciones en las que pueden utilizarse para mejorar la eficiencia de algunos procesos.
  • Reconocer problemas algorítmicos que pueden resolverse con la técnica de Programación Dinámica y aplicar la técnica para la resolución de los mismos. Comprender el algoritmo de Floyd y el que resuelve el problema de la mochila para utilizar sus fundamentos en la resolución de problemas análogos.
  • Reconocer problemas algorítmicos que pueden resolverse con la técnica Voraz y aplicar la técnica para la resolución de los mismos. Comprender los algoritmos de Prim, Kruskal y Dijkstra para utilizar sus fundamentos en problemas análogos.
  • Reconocer problemas algorítmicos que pueden tener alguna solución más eficiente aplicando la técnica de Vuelta Atrás y proponer soluciones alternativas aplicando esta técnica.

inicio

REQUISITOS

Conocimientos típicos de un curso de programación de algoritmos en el que se hayan estudiado estructuras de datos como vectores, listas y árboles. Conocimientos básicos de matemática discreta.

inicio

TEMARIO

  1. Análisis de algoritmos.
  2. Notación asintótica.
  3. Resolución de recurrencias.
  4. Recorridos de grafos.
  5. Divide y Vencerás.
  6. Montículos.
  7. Programación Dinámica.
  8. Algoritmos voraces.
  9. Algoritmos de vuelta atrás.

inicio

DESCRIPCIÓN DE LOS TEMAS

En el tema 1 se define la terminología propia del análisis de algoritmos: operación elemental, tamaño de la entrada, función de coste, tasa de crecimiento, análisis en el caso mejor, en el caso peor y en el caso promedio.

En el tema 2 se definen distintos tipos de notación asintótica, con el fin de definir conjuntos para clasificar las funciones de coste en base a su tasa de crecimiento. Asimismo se presentan algunas propiedades de cada notación y la técnica para la clasificación de funciones.

El tema 3 trata de la clasificación de las funciones de coste típicas de los algoritmos recursivos.

En el tema 4 se estudian dos recorridos fundamentales de la estructura de grafo: el recorrido en profundidad y el recorrido en anchura.

El tema 5 está dedicado a la técnica de diseño denominada Divide y Vencerás, que es una técnica de diseño recursivo. Se describe el esquema fundamental de la técnica y se estudian dos algoritmos de ordenación, el algoritmo de búsqueda dicotómica y el algoritmo de selección del segmento de suma máxima.

En el tema 6 se estudia la estructura de datos Montículo y su aplicación en un algoritmo de ordenación.

El tema 7 se dedica a la técnica de Programación Dinámica, se describen los pasos convenientes para la utilización de la técnica y se estudia su aplicación a  problemas de optimización como el problema de la mochila, el problema de la subsecuencia común más larga y el problema de determinar la distancia mínima entre cada par de nodos de un grafo.

En el tema 8 estudiamos la técnica de diseño voraz, que se emplea para resolver problemas de optimización. Dedicamos especial atención a la demostración de corrección del criterio de la selección voraz. Estudiamos el problema de selección de actividades, el problema de la mochila con fracciones y dos algoritmos para calcular un árbol de recubrimiento mínimo de un grafo. Para la implementación de uno de esos algoritmos, estudiamos la estructura de datos Partición. Terminamos con el estudio del problema de determinar la distancias mínimas desde un nodo origen al resto de los nodos de un grafo.

El tema 9 se dedica a la técnica de Vuelta a Atrás, que consiste en la exploración sistemática de un árbol virtual de estados. Se aplica la técnica en la solución de los problemas siguientes: un coloreado de mapas, un cálculo de mínimo número de monedas, el problema de la suma de subconjunto y el problema de la mochila.

inicio

METODOLOGÍA

Consideraremos tres tipos de sesiones lectivas:
[M] Sesión de clase magistral para la presentación de la materia del curso.
[P] Sesión de realización de ejercicios y problemas para afianzar los conceptos y técnicas que se presentan en el curso.
[S] Sesión dedicada a actividades de presentación, discusión o evaluación de tareas realizadas por los alumnos.

Cada semana consta de tres sesiones lectivas: dos de tipo [M] y una más, que puede ser de tipo [P] o [S] (véase una propuesta en la tabla accesible desde aquí).

En las sesiones de tipo [M] se explican los conceptos y se ilustran con ejemplos. En lo referente a las técnicas de diseño de algoritmos, en primer lugar se explica el esquema fundamental para la aplicación de la técnica y posteriormente se explican soluciones algorítmicas que aplican ese esquema. Los algoritmos son siempre analizados.

El mejor modo de alcanzar las competencias mencionadas es asegurarse de que se comprenden los conceptos presentados en clase y realizar semanalmente actividades de estudio y puesta en práctica de las técnicas presentadas.

Además de la asistencia a las clases, cada semana conviene leer con detenimiento los textos indicados en la tabla de lecturas recomendadas, correspondientes a los temas de esa semana.

Es necesario dedicar un tiempo semanal suficiente a la realización individual de ejercicios. Adjuntamos una pequeña colección de ejercicios resueltos, por cada tema, que pretenden indicar el nivel de problema que debería ser capaz de resolver alguien que terminara este curso con aprovechamiento. También pueden conseguirse otros muchos enunciados en los libros que se citan en la bibliografía, algunos de los cuales incluyen indicación de soluciones. 

Además es muy conveniente la participación activa en los seminarios [S].

inicio