1151040 Análisis y Diseño de Algoritmos
Trimestre 2022 Primavera
Profesor: Dr. Francisco Javier Zaragoza
Martínez.
Inicio y fin del curso:
lunes 11 de julio de 2022 a viernes 23 de septiembre de 2022.
Grupo: CSI81 (lunes,
miércoles y viernes de 14:30 a 16:00).
Asesorías: por correo
electrónico a través de cuentas institucionales.
Lugar: G206.
Cupo: 34.
Contenido
Se cubrirá el contenido oficial del curso (el cual se
detalla abajo). Es posible que el temario se cubra en un orden
distinto al allí mencionado.
- Análisis de correctitud y complejidad.
- Recursividad y ecuaciones de recurrencia.
- Algoritmos de divide y vencerás.
- Algoritmos de búsqueda con retroceso.
- Algoritmos de programación dinámica.
- Algoritmos de búsqueda local.
- Algoritmos glotones.
- Problemas NP completos.
Evaluación
Habrá al menos diez tareas semanales (valor máximo de 100 puntos
cada una, sí habrá puntos parciales) y cinco exámenes en
clase (valor máximo de 2 puntos cada uno, no habrá puntos
parciales). La mayoría de estas evaluaciones serán programas en C,
C++ o Java que se enviarán a omegaUp.
Para acreditar el curso se requieren al menos:
- 600 puntos en la tareas y 6 puntos en los exámenes para
obtener S,
- 700 puntos en la tareas y 7 puntos en los exámenes para
obtener B y
- 800 puntos en la tareas y 8 puntos en los exámenes para
obtener MB.
Consideraré cualquier copia o plagio de cualquier evaluación (ya sea
programa o no) de forma automática como NA para todos los
involucrados. Reportaré los casos que se presenten a las autoridades
correspondientes. No copies. No pases la tarea. No plagies.
Recuerden que, de acuerdo al Reglamento
del Alumnado de la UAM, es falta del alumnado en contra de la
Institución el suplantar o permitir ser suplantado en la realización
de actividades académicas (Artículo 9) y se impondrá desde
amonestación escrita hasta suspensión por dos trimestres (Artículo
13).
Calendario
El calendario que muestro abajo es tentativo e irá apareciendo
paulatinamente. Allí colocaré el material de estudio y de consulta.
Mientras tanto, unas transparencias para los primeros temas están aquí y unos materiales para los otros
temas están acá.
Preparativos: 27 de junio a 8 de julio
- Asegúrate de tener disponible una computadora con internet en
la que puedas editar, compilar y ejecutar programas en C. Si
tienes alguna distribución de Linux es probable que ya tengas
gcc y algún editor de texto instalado. Otra posibilidad es
instalar Code::Blocks.
En Windows instala la versión 17.12
para 32 bits o la 20.03 para 32
o 64
bits (tutorial)
o bien instala Dev-C++.
Para Mac OS X la versión más reciente de Code::Blocks es la 13.12
o instala Xcode.
En Android instala Coding
C y en iOS instala Mobile
C. Como último recurso, existen compiladores de C en línea
(repl.it, tio.run y onlinegdb).
- Usaremos exclusivamente el correo institucional. Si
no tienes el tuyo, actívalo
con la Coordinación de Servicios de Cómputo (CSC).
- Usaremos la plataforma de forma extensiva.
Crea una cuenta usando
tu correo institucional, tu usuario deberá ser tu nombre y los
cuatro últimos dígitos de tu matrícula (ejemplo:
FranciscoZaragoza1234). En tu perfil debes anotar tu nombre
completo y como escuela UAM Azcapotzalco. Mira el tutorial
de omegaUp.
- Envía un correo a mi ayudante José Luis Sánchez
(jlsh@azc.uam.mx) desde tu correo institucional con esta
información: tu nombre completo, tu número de matrícula, tu
carrera y tu usuario de omegaUp. Una vez que le envíes este
correo, él te registrará en el curso ADA 2022 Primavera de omegaUp.
Si tienes alguna duda acerca de estos preparativos, envía un
correo a mi ayudante desde tu correo institucional. No lo dejes
para el último momento.
Semana 1: 11 de julio a 15 de julio
Esta semana iniciaremos el Tema 1: Análisis de correctitud y
complejidad.
- 11 de julio: Presentación del curso. Inducción matemática.
- 13 de julio: Correctitud de algoritmos recursivos e
iterativos.
- 15 de julio: Complejidad de algoritmos iterativos y
recursivos.
- Material de consulta (en español): Actúa ahora.
- Material de consulta (en inglés): Recursión.
Análisis
de algoritmos. Uso
de energía de los lenguajes.
-
Tarea 1 (Tema 1, 100 puntos): Del 11 de julio a las 14:30 al 16
de julio a las 14:30.
Semana 2: 18 de julio a 22 de julio
Esta semana cubriremos el Tema 2: Recursividad y ecuaciones de
recurrencia.
- 18 de julio: Complejidad de algoritmos recursivos: sustitución
repetida.
- 20 de julio: Notación asintótica (ómicron, omega, theta).
- 22 de julio: Teorema general de ecuaciones de recurrencia.
- Material de consulta (en inglés): Ecuaciones
de recurrencia.
- Tarea 2 (Tema 2, 100 puntos): Del 18 de julio a las 14:30 al
23 de julio a las 14:30.
Semana 3: 25 de julio a 29 de julio
Esta semana iniciaremos el Tema 3: Algoritmos de divide y vencerás.
- 25 de julio: Mínimo y máximo simultáneos. Cálculo de
potencias. Búsqueda binaria.
- 27 de julio: Números de Fibonacci. Torres de Hanoi.
- 29 de julio: Ordenamiento por inserción y mezcla.
- Tarea 3 (Tema 2, 100 puntos): Del 25 de julio a las 14:30 al
30 de julio a las 14:30.
- Examen 1 (Temas 1 y 2, 2 puntos): 29 de julio de 14:30 a
15:15.
Semana 4: 1 de agosto a 5 de agosto
Esta semana continuaremos con el Tema 3: Algoritmos de divide y
vencerás.
- 1 de agosto: Quicksort, k-selección y cota inferior de
ordenamiento.
- 3 de agosto: Generación de cadenas binarias (con y sin
restricciones).
- 5 de agosto: Generación de particiones.
- Tarea 4 (Tema 3, 100 puntos): Del 1 de agosto a las 14:30 al 6
de agosto a las 14:30.
Semana 5: 8 de agosto a 12 de agosto
Esta semana terminaremos el Tema 3: Algoritmos de divide y
vencerás.
- 8 de agosto: Suma de subconjuntos.
- 10 de agosto: Multiplicación de enteros y de matrices.
- 12 de agosto: Generación de permutaciones.
- Tarea 5 (Tema 3, 100 puntos): Del 8 de agosto a las 14:30 al
13 de agosto a las 14:30.
- Examen 2 (Tema 3, 2 puntos): 12 de agosto de 14:30 a 15:15.
Semana 6: 15 de agosto a 19 de agosto
Esta semana cubriremos el Tema 4: Algoritmos de búsqueda con
retroceso.
- 15 de agosto: Suma de subconjuntos.
- 17 de agosto: Problema del agente viajero.
- 19 de agosto: Recorrido del caballo y problema de las reinas.
- Material de consulta (en inglés): Permutaciones.
- Tarea 6 (Tema 3, 100 puntos): Del 15 de agosto a las 14:30 al
20 de agosto a las 14:30.
Semana 7: 22 de agosto a 26 de agosto
Esta semana iniciaremos el Tema 5: Algoritmos de programación
dinámica.
- 22 de agosto: Recursión y memoización.
- 24 de agosto: Suma de subconjuntos.
- 26 de agosto: Subsecuencia creciente más larga.
- Tarea 7 (Tema 4, 100 puntos): Del 22 de agosto a las 14:30 al
27 de agosto a las 14:30.
- Examen 3 (Temas 3 y 4, 2 puntos): 26 de agosto de 14:30 a
15:15.
Semana 8: 29 de agosto a 2 de septiembre
Esta semana terminaremos el Tema 5: Algoritmos de programación
dinámica.
- 29 de agosto: Subsecuencia común más larga.
- 31 de agosto: Problema del cambio y problema de la mochila.
- 2 de septiembre: Producto encadenado de matrices.
- Tarea 8 (Tema 5, 100 puntos): Del 29 de agosto a las 14:30 al
3 de septiembre a las 14:30.
Semana 9: 5 de septiembre a 9 de septiembre
Esta semana cubriremos el Tema 6: Algoritmos de búsqueda local.
- 5 de septiembre: Ajedrez y cubo de Rubick.
- 7 de septiembre: Comesolo y gato.
- 9 de septiembre: Juego de 16.
- Tarea 9 (Tema 5, 100 puntos): Del 5 de septiembre a las 14:30
al 10 de septiembre a las 14:30.
- Examen 4 (Tema 5, 2 puntos): 9 de septiembre de 14:30 a 15:15.
Semana 10: 12 de septiembre a 16 de septiembre
Esta semana cubriremos el Tema 7: Algoritmos glotones.
- 12 de septiembre: Planificación de intervalos.
- 14 de septiembre: Planificación minimizando la tardanza.
- 16 de septiembre: Día feriado.
- Tarea 10 (Tema 6, 100 puntos): Del 12 de septiembre a las
14:30 al 17 de septiembre a las 14:30.
Semana 11: 19 de septiembre a 23 de septiembre
Esta semana cubriremos el Tema 8: Problemas NP completos.
- 19 de septiembre: Reducciones polinomiales.
- 21 de septiembre: Las clases P y NP.
- 23 de septiembre: .
- Material de consulta (en inglés): Reducciones.
Intratabilidad.
- Tarea 11 (Temas 7 y 8, 100 puntos): Del 19 de septiembre a las
14:30 al 24 de septiembre a las 14:30.
- Examen 5 (Temas 6, 7 y 8): 23 de septiembre de 14:30 a 16:00.
Entrega de actas y evaluación de recuperación: 26 de septiembre
a 14 de octubre
Estos días ocurrirán las evaluaciones de recuperación.
- 26 a 30 de septiembre: Entrega de actas de evaluación global.
- 26 de septiembre a 26 de octubre: XVII Concurso
de programación de la UAM.
- 3 de octubre: Inscripción a evaluación de recuperación.
- 5 de octubre: Evaluación de recuperación (13:00 a 16:00 en el
G206).
- 6 a 10 de octubre: Entrega de actas de evaluación de
recuperación.
Bibliografía
- Baase y
Van Gelder. Algoritmos
computacionales: Introducción
al
análisis y diseño. Addison Wesley.
- Castro Campos. Análisis
y diseño de algoritmos. UAM Azcapotzalco.
- Dasgupta, Papadimitriou,
Vazirani.
Algorithms.
Mc Graw Hill.
- Erickson. Algorithms.
UIUC.
- Kleinberg
y Tardos.
Algorithm Design.
Addison Wesley.
- Knuth.
The
Art of Computer Programming: Vol. 3 Sorting and Searching.
Addison Wesley.
- Parberry. Problems on
Algorithms. Prentice Hall.
- Roberts.
Thinking Recursively. Wiley.
- Sedgewick
y Flajolet. An Introduction to
the Analysis of Algorithms. Addison Wesley.
- Sedgewick y Wayne. Algorithms.
Addison Wesley.