Aula 01 - Introdução
Universidade Federal do Rio Grande do Sul
Instituto de Informática
Departamento de Informática Teórica
Estes slides utilizam conteúdo adaptado da bibliografia da disciplina e também de notas de aula e slides prévios dos professores Bruno Grisci, Rodrigo Machado e André Grahl.
Disciplina: INF05027 – Projeto e Análise de Algoritmos I
Professor: Lucas Nunes Alegre
Carga horária: 60h (50 em sala de aula, 10 em atividades autônomas)
Créditos: 4
Lucas Nunes Alegre:
E-mail: lnalegre@inf.ufrgs.br
Presencial: Sala 233, prédio 43424 (segundo andar)
Interesses:

As mudanças no currículo vão na seguinte direção:
Desta forma, PAA1 + PAA2 no novo currículo cobrem conteúdos que eram vistos de forma não integrada em: - Teoria dos Grafos e Análise Combinatória - Complexidade de Algoritmos - Classificação e Pesquisa de Dados
Bibliografia:
Moodle:
https://moodle.ufrgs.br/

GitHub:
https://github.com/BrunoGrisci/projeto-e-analise-de-algoritmos
Atividades Avaliadas:
NF = 0.35 \times P1 + 0.35 \times P2 + 0.2 \times Lab + 0.1 \times Aut
Conceito definido a partir de NF da forma tradicional: A (\geq9), B (\geq7.5), C (\geq6), D(<6), FF (menos de 75% de frequência).
Exame de Recuperação
Nova nota final recalculada seguindo a seguinte fórmula:
NE = 0.2 \times NF + 0.8 \times EXAME
Análise de Algoritmos
Grafos: conceitos e algoritmos fundamentais
Estratégia gulosa de projeto de algoritmos:
Algoritmos gulosos para grafos e estruturas de dados avançadas:
Antes:
Depois:
Na verdade
Laboratório de Programação Competitiva - LPC:
Silicon Valley
E-mail Entrevista Google:
![]() |
![]() |
![]() |
![]() |
IA ajuda, mas não substitui prática: é como aprender um idioma, você precisa treinar para ganhar fluência.
IA não é antagonista: eu pesquiso IA e usei como ferramenta ao longo da disciplina.
Mas você precisa saber conferir: sem base, você não detecta erros, suposições ruins e respostas “convincentes” porém incorretas.
A disciplina não é só “programar”: é aprender a modelar problemas, escolher abordagens e justificar decisões.
Cautela com quem vende IA como solução para tudo (aprenderam antes de haver IA).
Generalização para problemas novos: IA tende a ir bem em soluções canônicas, mas e quando o problema é inédito ou exige uma ideia nova?
Fundamentos que não mudam: corretude, complexidade, limites e trade-offs valem com ou sem IA.
Metodologia transferível: o que você aprende aqui serve para outras áreas (ciência de dados, bio, redes, sistemas, etc.).
E sim, também é divertido!
Projeto: técnicas para construção
Análise: verificação da qualidade do algoritmo
Algoritmos: processos computacionais
Objetivo. Dadas denominações de moedas (ex.: \{1, 5, 10, 25, 100\}), pagar um valor usando o menor número de moedas.
Objetivo. Dadas denominações de moedas (ex.: \{1, 5, 10, 25, 100\}), pagar um valor usando o menor número de moedas.
Algoritmo do caixa (guloso). Repetidamente escolha a maior moeda que não excede o valor restante.
Exemplos (ideia)
Pergunta. O algoritmo do caixa é ótimo para as moedas dos EUA \{1,5,10,25,100\}?
Pergunta. O algoritmo do caixa é ótimo para as moedas dos EUA \{1,5,10,25,100\}?
Discussão: (A) é falsa em geral; (B) também é falsa; (C) é a correta nesse caso.
Resposta curta: não.
Contraexemplo (selo/“postage”): denominações 1, 10, 21, 34, 70, 100, 350, 1225, 1500.

Pode falhar até em viabilidade se c_1>1: denominações 7,8,9.
Para denominações \{1,5,10,25,100\}, qualquer solução ótima satisfaz:
Consequência chave:
P + 5N + 10D + 25Q \le 99.
(Isto limita o quanto dá para “fazer troco” sem usar moedas de 1 dólar.)
Teorema. O algoritmo do caixa é ótimo para \{1,5,10,25,100\}.
Ideia da prova (indução no valor x):
Intuição: a prova é um “argumento de troca” + indução.
Proposição. O algoritmo do caixa produz a única solução ótima para \{1,5,10,25,100\}.
Esboço (caso das moedas de 1 dólar):
?