MCCC003-23 -- Algoritmos em Grafos -- 2025.3


Atualizado em 16/09/25

Expediente

  • Professor: Aritanan Gruber , sala S-539.2
  • Aulas: Qua. 08–10h e Sex. 10–12h na S-108.0
  • Atendimento: Qua. 10–12h (na S-539.2)
  • Monitoria: (a definir)
  • Moodle: AG-Q24.3-DA1
    andamento do curso, links úteis, material, avaliações, notas, mensagens, etc.

Ementa

Revisão da terminologia básica de Teoria dos Grafos. Noções de análise de algoritmos. Estruturas de dados para representação de grafos. Buscas em largura e profundidade e suas aplicações: caminhos mínimos sem pesos, componentes conexas. Grafos ponderados. Árvores geradoras mínimas: algoritmos de Prim e Kruskal. Grafos Eulerianos e Hamiltonianos. O Problema do Caixeiro Viajante. Digrafos: definições básicas, componentes fortemente conexas e ordenação topológica. Caminhos mínimos em digrafos ponderados: algoritmos de Dijkstra, Bellman-Ford e Floyd–Warshall. Fluxo máximo: algoritmo de Ford-Fulkerson e suas aplicações.

Objetivos

Mostrar como representar um grafo computacionalmente (Matriz de Adjacências e Lista de Adjacências), discutir as vantagens e desvantagens de cada abordagem e discutir como adaptar tais estruturas para representar grafos nos quais os vértices e/ou arestas possuam atributos (por exemplo, grafos orientados, grafos ponderados, grafos com os vértices coloridos). Apresentar algoritmos eficientes para problemas clássicos em grafos e discutir, sem a necessidade de muito rigor formal, os tempos de execução dos algoritmos estudados. Discutir o impacto das estruturas de dados escolhidas para a implementação dos algoritmos sobre o tempo de execução desses. Espera-se que ao final do curso o aluno seja capaz de modelar problemas em grafos. Espera-se que este conheça os principais problemas em grafos e os algoritmos eficientes que os resolvem. Espera-se também que o aluno tenha demonstrado capacidade de implementar tais algoritmos em uma linguagem de alto nível. Por fim, espera-se que o aluno tenha noções da complexidade de tempo de execução dos algoritmos cobertos ao longo do curso. Este curso tem como objetivo desenvolver tanto habilidades teóricas (algoritmos) como práticas (implementações eficientes de tais algoritmos).

Recomendação

Natureza da Informação, Funções de Uma Variável, Algoritmos e Estruturas de Dados I e II, Programação Estruturada, Matemática Discreta I e II.

Avaliações e critérios

  • listas de exercícios serão disponibilizadas no Moodle no decorrer do quadrimestre (em geral, a cada 4 aulas);
    devem ser feitas (fazem parte do seu estudo), mas não valem nota;
  • três exercícios programas $E_1$, $E_2$ e $E_3$; datas de entrega a serem definidas ao longo do quadrimestre;
  • três provas regulares $P_1$, $P_2$ e $P_3$ e uma prova substitutiva $P_4$ aberta;
    • $P_1$ : Sex. 10/10 @ 10h
    • $P_2$ : Sex. 07/11 @ 10h
    • $P_3$ : Sex. 05/12 @ 10h
    • $P_4$ : Sex. 12/12 @ 10h

Nota nominal ($N$): com $$ \begin{align*} P &= \frac{1}{3}\max\left\{\sum_{j\in S}P_j\,:\,S\in\binom{[4]}{3}\right\} \\ &= \frac{1}{3}\max\big(P_1 + P_2 + P_3,\ P_1 + P_2 + P_4,\ P_1 + P_3 + P_4,\ P_2 + P_3 + P_4\big), & P_j\in[0,10] \end{align*} $$ i.é, $P$ é a média das três melhores dentre quatro notas ($P_j=0$ em caso de ausência) e $$ E =\frac{1}{3}\big(E_1 + E_2 + E_3\big), \quad\quad E_i\in[0,10] $$ tem-se que $$ N = \frac{4}{5}P + \frac{1}{5}E. $$

Conceito nominal ($C_N$): reflete o seu desempenho frente ao material apresentado e às avaliações realizadas; obtido pelo encaixe de $N$ em um dos intervalos: $$-\infty < \mathbf{F} < 5.0 \leq \mathbf{D} \leq 6.0 < \mathbf{C} \leq 7.0 < \mathbf{B} \leq 8.5 < \mathbf{A} < \infty.$$

Recuperação

Caso seu conceito $C_N$ seja $\mathbf{D}$ ou $\mathbf{F}$, você tem direito a uma prova de recuperação $P_R$. Esta será única e contemplará toda a matéria do quadrimestre. Uma nova nota nominal $\overline{N}=(N+P_R)/2$ será utilizada para gerar um novo conceito (nominal) final pós-recuperação $\overline{C}_N$. Note que seu conceito final pós-recuperação pode ser menor que o pré-recuperação: uma vez feita, a recuperação é parte integrante da sua avaliação.

Bibliografia

Primária

  • [CLRS] T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms, 3rd ed., MIT University Press (2009)
    Versão em Português: Algoritmos: Teoria e Prática, 3a ed., Elsevier (2012)
  • [KT] J. Kleinberg, E. Tardos, Algorithm Design, Pearson Education, Inc. (2006)

Secundária

  • [AMO] R.K. Ahuja, T.L. Magnanti, J.B. Orlin, Network Flows: Theory, Algorithms, and Applications, Prentice Hall (1993)
  • [BM] J.A. Bondy, U.S.R. Murty, Graph Theory, Springer-Verlag (2008)
  • [Eri] J. Erickson, Algorithms, self-published on the web (2019)
  • [Feo] P. Feofiloff, Algoritmos para Grafos via Sedgewick, self-published on the web (2020)
  • [Sed] R. Sedgewick, Algorithms in C, Part 5: Graph Algorithms, 3rd ed., Addison-Wesley (2002)
  • [SW] R. Sedgewick, K. Wayne, Algorithms, 4th ed., Addison-Wesley (2011)

Requisitos

Lista de tópicos (tentativa)

Detalhes de cada tópico (coberto nas aulas) serão atualizados no Moodle ao longo do quadrimestre.

Aulas Datas Tópicos
A01 17/09 Grafos e digrafos: definições, exemplos e representações
A02 19/09 Mais definições e resultados elementares; notações assintóticas
A03 24/09 Conectividade, distâncias e busca em largura (BFS)
A04 26/09 Ciclos ímpares, biparticionalidade e bi-coloração
A05 01/10 Mais conectividade e busca em profundidade (DFS)
A06 03/10 Ordenação topológica e componentes fortemente conexas (Kosaraju)
A07 08/10 Tours eulerianos e 2-satisfatibilidade
A08 10/10 Prova P1
A09 15/10 Aresta-biconectividade e componentes fortemente conexas (Tarjan)
A10 17/10 Caminhos de custo mínimo: origem simples (Dijkstra, Bellman-Ford)
A11 22/10 Caminhos de custo mínimo: todos os pares (Floyd-Warshal, Johnson)
A12 24/10 Aplicações de caminhos mínimos
A13 29/10 Árvores geradoras de custo mínimo (Prim, Boruvka)
A14 31/10 Árvores geradoras de custo mínimo (Kruskal + UnionFind)
A15 05/11 Arborescências de custo mínimo (Edmonds) [*]
A16 07/11 Prova P2
A17 12/11 Fluxos-máximos / cortes-mínimos: teoria
A18 14/11 Fluxos-máximos / cortes-mínimos: algoritmos (Edmonds-Karp, Dinics)
A19 19/11 Fluxos-máximos / cortes-mínimos: aplicações
A20 21/11 [Ponto facultativo => reposição em R01: 12/12]
A21 26/11 Emparelhamentos em grafos bipartidos (algoritmo húngaro) [*]
A22 28/11 Ciclos hamiltonianos e TSP: condições suficientes, NP-hardness
A23 03/12 Ciclos hamiltonianos e TSP: programação dinâmica (Held-Karp), aproximação (Christofides)
A24 05/12 Prova P3
R01 12/12 Prova P4 (Substitutiva)
REC xx/02 A recuperação será feita no início do Q2026.1 em data a ser definida posteriormente

[*] se o tempo permitir; em caso contrário, as aulas serão usadas para terminar os tópicos das aulas anteriores.

Estudando para esta disciplina

A natureza do tópico, o posicionamento do curso na grade, e a lista de pré-requisitos indicam que esta é uma disciplina de nível intermediário; e será tratada como tal. Você deve assistir às aulas, estudar a bibliografia indicada, e dedicar-se às listas de exercícios.

Caso seus pré-requisitos não estejam tão sólidos quanto desejável (falta de familiaridade com formalismo matemático e raciocínio algorítmico, atitude passiva com relação ao aprendizado, tempo dedicado insuficiente, etc.), será possível fazer confusões e sentir-se perdido no início.

Alguns procedimentos que costumam funcionar em cursos introdutórios para mitigar os motivos relacionados também costumam funcionar por aqui:

  • Refaça os exemplos e re-prove os resultados fornecidos em sala de aula.
  • Preste atenção aos processos de solução (aprenda-os!) e não foque somente nos resultados finais.
  • Assista ativamente às aulas; resolva os exercícios nelas propostos e os contidos nas listas.
  • Estude a bibliografia indicada, monte grupos de estudo, e faça um bom uso dos horários de atendimento.
  • Tenha sempre em mente que aprendizado é uma tarefa ativa; não fique somente assistindo. “Ouvir” às aulas e “ler” os livros tem pouco ou nenhum efeito neste curso – e em qualquer disciplina matemática/algorítmica que o valha.
  • Se ainda assim, sentir-se perdido, repita os passos acima. Mais cedo ou mais tarde, eles convergirão à compreensão.

Note que você não será convidado a regurgitar respostas fornecidas em aula ou presente nos livros. As questões em listas e provas testarão sua capacidade de entender os problemas e apresentar uma solução para eles. Às vezes, serão uma adaptação simples ou uma extensão direta do que foi visto. Outras, será necessário relacionar dois ou mais métodos ou conceitos apresentados. Outras ainda, irão requerer análise e raciocínio mais profundo (o que leva tempo, então não deixe nada para a última hora!).

Tenha em mente: além do escrito acima, para aproveitar bem este curso, você deve familiarizar-se com o material na leitura sugerida correspondentes antes da aula, e estudá-los com afinco depois.

Integridade acadêmica e transgressões

O Artigo 25 do Código de Ética da UFABC estabelece, à página 23: “Quanto aos trabalhos acadêmicos, é eticamente inaceitável que os discentes:

  • I - fraudem avaliações;
  • II - fabriquem ou falsifiquem dados;
  • III - plageiem ou não creditem devidamente autoria;
  • IV - aceitem autoria de material acadêmico sem participação na produção;
  • V - vendam ou cedam autoria de material acadêmico próprio a pessoas que não participaram da produção.”

Trabalhos (listas, provas, programas) suspeitos de cópia ou de outra representação fraudulenta acarretarão aos envolvidos conceitos $\mathbf{F}$ (falha) no curso. A atividade será reportada à Comissão Disciplinar Discente da universidade para que sejam tomadas todas as providências disciplinares cabíveis.

LLMs

Representam um grande avanço da inteligência artificial generativa. O uso para estudo é encorajado, mas cuidado com alucinações e respostas incorretas. Note que o uso de tais ferramentas durante avaliações enquadram-se no Artigo 25 acima.

Para pensar ao longo do curso: Do que adianta as máquinas aprenderem e os alunos não?

Avatar
Aritanan Gruber
Assistant Professor

“See, if y’all haven’t the same feeling for this, I really don’t give a damn. If you ain’t feeling it, then dammit this ain’t for you!"
(desconheço a autoria; agradeço a indicação)