MC558 - Design and Analysis of Algorithms II

MC558 - Projeto e Análise de Algoritmos II

MC558 - Proyecto y Análisis de Algoritmos II

"Computer science is no more about computers than astronomy is about telescopes, biology is about microscopes or chemistry is about beakers and test tubes. Science is not about tools. It is about how we use them, and what we find out when we do." "Ciência da computação tem tanto a ver com o computador como a astronomia com o telescópio, a biologia com o microscópio, ou a química com os tubos de ensaio. A Ciência não estuda ferramentas, mas o que fazemos e o que descobrimos com elas." "La ciencia de la computación no trata más sobre computadoras que la astronomía sobre telescopios, la biología sobre microscopios o la química sobre tubos de ensayo. La ciencia no se trata de herramientas. Se trata de cómo las usamos y de lo que descubrimos cuando lo hacemos."
Attributed toAtribuída aAtribuída a Edsger W. Dijkstra

This is an undergraduate course in Computer Science that aims to present the main concepts and algorithms in graphs, introduce classes of computational complexity (P, NP, NP-complete), and proofs of NP-completeness, as well as discuss basic notions of linear programming. It is expected that, by the end of the semester, the student will be able to solve computational problems by designing algorithms on graphs, proving their correctness, and analyzing their complexity. Additionally, the student should be capable of demonstrating the membership of problems in the NP-complete class and proposing linear programming models for some problems.

Esta é uma disciplina de graduação em Ciência da Computação que objetiva apresentar os principais conceitos e algoritmos em grafos, introduzir classes de complexidade computacional (P, NP, NP-completo) e provas de NP-completude, assim como discutir noções básicas de programação linear. Se espera que, no final do semestre, o aluno consiga resolver problemas computacionais projetando algoritmos em grafos, provando que são corretos e analisando sua complexidade; ademais de ser capaz de provar pertença de problemas à classe NP-completo e propor modelos de programação linear para alguns problemas.

Esta es una asignatura de pregrado en Ciencia de la Computación que tiene como objetivo presentar los conceptos y algoritmos principales en grafos, introducir clases de complejidad computacional (P, NP, NP-completo) y demostraciones de NP-completitud, así como discutir nociones básicas de programación lineal. Se espera que, al final del semestre, el estudiante pueda resolver problemas computacionales diseñando algoritmos en grafos, demostrando su corrección y analizando su complejidad; además de ser capaz de demostrar la pertenencia de problemas a la clase NP-completo y proponer modelos de programación lineal para algunos problemas.


Offering: Second semester of 2024, from 05/08/2024 to 27/11/2024 Oferecimento: Segundo semestre de 2024, do 05/08/2024 ao 27/11/2024 Oferta: Segundo semestre de 2024, del 05/08/2024 al 27/11/2024
Schedule: Monday and Wednesday, from 2:00PM. to 4:00PM. Horário: Segunda-feira e quarta-feira, das 14:00 às 16:00 Horario: Lunes y miércoles, de las 2:00PM. a las 4:00PM.
Location: PB14 Local: PB14 Localización: PB14
Timeline: Cronograma: Cronograma: Download here Baixe aqui Baje aquí
Student tutoring: Monday from 5:00PM. to 7:00PM. at room 6 / IC1, Thursday from 6:00PM. to 8:00PM. at lab 305 / IC3 Monitorias: Segunda-feira das 17h às 19h na sala 6 / IC1, quinta-feira das 18h às 20h no lab 305 / IC3 Monitorías: Lunes de las 5:00PM. a las 7:00PM. en la sala 6 / IC1, jueves de las 6:00PM. a las 8:00PM. en el lab 305 / IC3

Bibliography

Bibliografia

Bibliografía

Main reference

Referência principal

Referencia principal


T. Cormen, C. Leiserson, R. Rivest, C. Stein. "Introduction to Algorithms". MIT Press (MA); 3rd ed. (2009).

Complementary references

Referências complementares

Referencias complementares


C. Papadimitriou, K. Steiglitz. "Combinatorial Optimization: Algorithms and Complexity". Dover Publications. (1998).
M. Sipser. "Introduction to the Theory of Computation". Cengage Learning; 3rd ed. (2012).

J. Kleinberg, E. Tardos. "Algorithm Design". Pearson; 1st ed. (2005).
R. Vanderbei. "Linear Programming: Foundations and Extensions". Springer; 3rd ed. (2010).

Reduction examples

Exemplos de reduções

Ejemplos de reducciones


Lectures

Aulas

Clases

The slides will be added after each lecture. These can be used as a guide to review the lessons. To study and practice, you should read the main bibliography and solve the suggested exercises.

Os slides serão disponilizados após cada aula. Estes podem ser usados como guia para revisar as aulas. Para estudar e praticar, devem ler a bibliografia principal e resolver os exercícios sugeridos.

Los slides serán disponibilizados después de cada clase. Estos pueden ser utilizados como guía para revisar las lecciones. Para estudiar y practicar, deben leer la bibliografía principal y resolver los ejercicios sugeridos

Topics Tópicos Asuntos
slides (Portuguese only) slides (somente em Português) soluciones (solo en Portugués)
Lecture 01 - Graph concepts Aula 01 - Conceitos sobre grafos Aula 01 - Conceptos sobre grafos
Lecture 02 - Cuts, connectivity, trees, and bipartite graphs Aula 02 - Cortes, conexidade, árvores e grafos bipartidos Aula 02 - Cortes, conectividad, árboles y grafos bipartitos
Lecture 03 - Bipartite, directed, and weighted graphs Aula 03 - Grafos bipartidos, direcionados e ponderados Aula 03 - Grafos bipartitos, dirigidos y ponderados
Lecture 04 - Searches in graphs. Breadth-first search Aula 04 - Buscas em grafos. Busca em largura Aula 04 - Búsquedas en grafos. Búsqueda en amplitud
Lecture 05 - Depth-first search Aula 05 - Busca em profundidade Aula 05 - Búsqueda en profundidad
Lecture 06 - Topological sort Aula 06 - Ordenação topológica Aula 06 - Orden topológica
Lecture 07 - Connected components and strongly connected components. Aula 07 - Componentes conexas e fortemente conexas Aula 07 - Componentes conexas y componentes fuertemente conexas
Lecture 08 - Minimum spanning tree Aula 08 - Árvore geradora mínima Aula 08 - Árbol generador mínimo
Lecture 09 - Prim and Kruskal algorithms Aula 09 - Algoritmos de Prim e Kruskal Aula 09 - Algoritmos de Prim y Kruskal
Lecture 10 - Kruskal algorithm and disjoint sets Aula 10 - Algoritmo de Kruskal e conjuntos disjuntos Aula 10 - Algoritmo de Kruskal y conjuntos disjuntos
Lecture 11 - Minimum paths Aula 11 - Caminhos mínimos Aula 11 - Caminos mínimos
Lecture 12 - Dijktra's algorithm Aula 12 - Algoritmo de Dijkstra Aula 12 - Algoritmo de Dijkstra
Lecture 13 - Bellman Ford's algorithm Aula 13 - Algoritmo de Bellman Ford Aula 13 - Algoritmo de Bellman Ford
Lecture 14 - Floyd-Warshall's algorithm Aula 14 - Algoritmo de Floyd-Warshall Aula 14 - Algoritmo de Floyd-Warshall
Lecture 15 - Networks flow Aula 15 - Fluxo em redes Aula 15 - Flujo en redes
Lecture 16 - Ford-Fulkerson Aula 16 - Ford-Fulkerson Aula 16 - Ford-Fulkerson
Lecture 17 - Reductions Aula 17 - Reduções Aula 17 - Reducciones
Lecture 18 - Reductions and lower bounds Aula 18 - Reduções e cotas inferiores Aula 18 - Reducciones y límites inferiores
Lecture 19 - Linear programming Aula 19 - Programação linear Aula 19 - Programación lineal
Lecture 20 - A sufficient condition for integer solutions in LP Aula 20 - Uma condição suficiente para soluções inteiras de PL Aula 20 - Una condición suficiente para soluciones enteras de PL
Lecture 21 - Dual program and algorithms for LP Aula 21 - Programa dual e algoritmos para PL Aula 21 - Programa dual y algoritmos para PL
Lecture 22 - Linear integer programming Aula 22 - Programação linear inteira Aula 22 - Programación lineal entera
Lecture 23 - Linear integer programming Aula 23 - Programação linear inteira Aula 23 - Programación lineal entera
Lecture 24 - NP-complexity Aula 24 - NP-complexidade Aula 24 - NP-complejidad
Lecture 25 - NP-complete Aula 25 - NP-completude Aula 25 - NP-completud
Lecture 26 - NP-complete and reductions Aula 26 - NP-completude e reduções Aula 26 - NP-completud y reducciones

Acknowledgment: The slides are based on the material prepared by other professores. The list of professors that kindly provided the material is given below (in alphabetical order): Cândida Nunes da Silva, Cid Carvalho de Souza, Flávio Keidi Miyazawa, Lehilton Lelis Chaves Pedrosa, and Orlando Lee. The slides that will be shared has been adapted and modified by me, with possible introduction of errors, which I request to be reported to me.

Agradecimentos: Os slides foram baseados em material didático preparado por outros professores. A lista dos professores que gentilmente cederam o material é dada a seguir (em ordem alfabética): Cândida Nunes da Silva, Cid Carvalho de Souza, Flávio Keidi Miyazawa, Lehilton Lelis Chaves Pedrosa e Orlando Lee. O material que será disponibilizado foi adaptado e modificado por mim, com possível introdução de erros, que solicito sejam reportados a mim.

Agradecimientos: Los slides se basearon en material didáctico preparado por otros profesores. La lista de los profesores que amablemente proporcionaron el material es la siguiente (en orden alfabética): Cândida Nunes da Silva, Cid Carvalho de Souza, Flávio Keidi Miyazawa, Lehilton Lelis Chaves Pedrosa y Orlando Lee. El material que se proporcionará fue adaptado y modificado por mí, con posible introducción de errores, que solicito sean reportados a mí.

Exercises lists

Listas de exercícios

Listas de ejercicios

The files will be added during the course.

Os arquivos serão adicionados durante o curso.

Los archivos serán adicionados durante el curso.

files (Portuguese only) arquivos (somente em Português) archivos (solo en Portugués)
Exercise List 01 - Concepts about graphs Lista de exercícios 01 - Conceitos sobre grafos Lista de ejercicios 01 - Conceptos sobre grafos
Exercise List 02 - Concepts about graphs and breadth-first search Lista de exercícios 02 - Conceitos sobre grafos e busca em largura Lista de ejercicios 02 - Conceptos sobre grafos y búsqueda en amplitud
Exercise List 03 - Searches in graphs, topological sort Lista de exercícios 03 - Buscas em grafos, ordenação topológica Lista de ejercicios 03 - Búsqueda en grafos, orden topológica
Exercise List 04 - Graph concepts and algorithms Lista de exercícios 04 - Conceitos e algoritmos em grafos Lista de ejercicios 04 - Conceptos y algoritmos en grafos
Exercise List 05 - Minimum spanning tree Lista de exercícios 05 - Árvore geradora mínima Lista de ejercicios 05 - Árbol generador mínimo
Exercise List 06 - Minimum paths Lista de exercícios 06 - Caminhos mínimos Lista de ejercicios 06 - Caminhos mínimos
Exercise List 07 - Networks flows Lista de exercícios 07 - Fluxo em redes Lista de ejercicios 07 - Flujo en redes
Exercise List 08 - Weighted graphs and networks flows Lista de exercícios 08 - Grafos ponderados e fluxo em redes Lista de ejercicios 08 - Grafos con pesos y flujo en redes
Exercise List 09 - Linear programming Lista de exercícios 09 - Programação linear Lista de ejercicios 09 - Programación lineal
Exercise List 10 - Linear programming, reductions, and NP-complexity Lista de exercícios 10 - Programação linear, reduções e NP-complexidade Lista de ejercicios 10 - Programación lineal, reducciones y NP-complejidad


Project Orientation Orientação do Projeto Orientación del Proyecto
1- Minesweeper Campo Minado Buscaminas
2- Mastermind Senha Mastermind
3- Spiral Galaxies Spiral Galaxies Spiral Galaxies
5- Squares Quadrados Cuadrados
6- Tetris Tetris Tetris
7- Domino tatami covering Cobertura de tatame com peças de dominó Cobertura de tatame con piezas de dominó
9- Trainyard Trainyard Trainyard
10- Sokoban Sokoban Sokoban
11- Domino Dominó Dominó
13- Solitaire Solitário Solitário
14- Jigsaw Quebracabeças Rompecabezas
15- Hanano Hanano Hanano
16- Hanabi Hanabi Hanabi
17- Pandemic Pandemic Pandemic
18- Classic Nintendo Clássicos de Nintendo Clásicos de Nintendo
19- Clickomania Clickomania Clickomania
21- Cryptarithms Cryptarithms Cryptarithms
22- KPlumber KPlumber KPlumber
23- Battleship Batalha Naval Batalla Naval
24- Corral Corral Corral
25- Hiroimono Hiroimono Hiroimono
26- Nurikabe Nurikabe Nurikabe


Grades

Notas

Notas

Evaluation method

Método de avaliação

Método de evaluación


Two tests: P1 and P2. Three lists: L1, L2, and L3. One project: Pj. The final grade will be given by M=0.3P1+0.4P2+0.05L1+0.05L2+0.05L3+0.15Pj. Students with M in [2.5,5) may take a final test (E); for those students the new final grade will be M=min{5,0.5M+0.5E}. Students with M greater than or equal to 5 will be approved.

Duas provas: P1 e P2. Três listas: L1, L2 e L3. Um projeto: Pj. A média final será M=0.3P1+0.4P2+0.05L1+0.05L2+0.05L3+0.15Pj. Alunos com M no intervalo [2.5,5) poderão fazer o exame (E) e, para eles, a nova média final será M=min{5,0.5M+0.5E}. Alunos com M maior ou igual que 5 estarão aprovados.

Dos pruebas: P1 y P2. Tres listas: L1, L2 y L3. Un projecto: Pj. La media final será M=0.3P1+0.4P2+0.05L1+0.05L2+0.05L3+0.15Pj. Alumnos con M en el intervalo [2.5,5) podrán realizar el exámen (E) y, para ellos, la nueva media final será M=min{5,0.5M+0.5E}. Alumnos con M mayor o igual que 5 estarán aprobados.

Dates: P1 - 09/10/2024. P2 - 25/11/2024. E - 13/12/2024.

Datas: P1 - 09/10/2024. P2 - 25/11/2024. E - 13/12/2024.

Fechas: P1 - 09/10/2024. P2 - 25/11/2024. E - 13/12/2024.

The submission of exercise lists before the resolution and active participation in solving exercises during class may be considered to improve the grade.

A entrega de listas de exercícios antes da resolução e a participação da resolução de exercícios em aula, poderão ser coniseradas para melhorar a nota.

La entrega de listas de ejercicios antes da resolución y la participación de la resolución de ejercicios en clase, podrán ser coniserados para mejorar la nota.

Exercises solved in exams or submitted in the lists must be done individually. Any detection of fraud will result in a final grade of zero.

Exercícios resolvidos nas provas ou entregues nas listas, devem ser feitos individualmente. Qualquer detecção de fraude implicará em zerar a nota final.

Los ejercicios resueltos en las pruebas o entregados en las listas deben realizarse de forma individual. Cualquier detección de fraude implicará la anulación de la nota final.

Files

Arquivos

Archivos


Attendance and grade files will be uploaded here.

Arquivos com as notas e a frequência serão disponibilizados aqui.

Archivos con las notas y la asiduez serán disponibilizados aquí.



Attendance Frequência Asiduez
List 1 Lista 1 Lista 1
List 2 Lista 2 Lista 2
List 3 Lista 3 Lista 3