MCTA003-17 - Análise de Algoritmos Segundo Quadrimestre de 2023


Avisos importantes

  • 🆕 03/10 - Nota da REC e conceitos finais liberados: so long and thanks for all the fish!
so-long.jpg
  • 20/09 - Sala da recuperação foi definida
  • 01/09 - Conceito divulgados
  • 21/08 - Atualização sobre o local e horário da sub da P2 Sub
  • 19/08 - Detalhes sobre a Sub
  • 17/08 - Slide de Complexidade atualizado (pequenas correções)
  • 12/08 - Nota da P1 liberada
  • 11/08 - Inserção dos slides sobre complexidade e exercícios sobre redução e complexidade
  • 09/08 - Inserção dos slides sobre redução
  • 06/08 - Atualização dos slides de gulosos (slides novos incluídos este ano)
  • 04/08 - Adicionado à página: lista de exercícios sobre algoritmos gulosos
  • 01/08 - Adicionado à página: lista de exercícios sobre programação dinâmica
  • 27/07 - Seções sobre Programação Dinâmica e Algoritmos Gulosos foram adicionadas
  • 27/07 - Lista de exercício para entrega foi corrigida
  • 22/07 - Uma nova lista para entregar foi disponibilizada no site
  • 22/07 - Novos, e importantes, exercícios foram adicionados à lista de exercícios de grafos.
  • 22/07 - Planilha com as notas das listas atualizada
  • 22/07 - Material da aula de grafos foi atualizado
  • 15/07 - Uma versão preliminar das notas de aula sobre grafos foi adicionada
  • 05/07 - Colinha foi atualizada: teorema mestre e teorema mestre simplificado foram adicionados. Veja o novo arquivo para se familiarizar com as seções.
  • 02/07 - Liberado exercícios sobre ordenação.
  • 01/07 - O enunciado do exercício para a terceira lista de entrega foi corrigido.
  • 29/06 - Planilha com as notas das listas (já contém a nota da L1) foi criada em Notas e Frequência.
  • 29/06 - Material adicionado à página: Slides sobre algoritmos recursivos, Exercícios sobre correção e análise de tempo de algoritmos recursivo, e a 3º lista para entrega (prazo 07/07).
  • 🧙‍ 23/06 - Aparências enganosas, cuidado deve-se ter. Um limitante melhor do que \(O(n^2)\) para a função ABACATE da lista 2 você pode ter.
  • 20/06 - Atualizações diversas: Adicionado listas de exercício sobre tempo de execução e recorrência, disponibilizada uma nova Lista de Exercícios para Entregar, atualizações diversas na seção Tópicos
  • 07/06 - Lista de Exercícios para Entregar - disponibilizados
  • 06/06 - Adicionei listas de exercícios para correção de algoritmos e notação assintótica
  • 01/06 - Seção Notas e Frequência foi criada
  • 31/05 🔥🔥🔥🔥🔥 Enquente (até 02/06): https://forms.gle/WCwVByrBeNcmYKnm8
  • 31/05 - Página no ar.

Objetivos

  • Apresentar noções e conceitos de complexidade de computação;
  • Apresentar métodos e conceitos que permitam ao aluno, de maneira confiável, avaliar a qualidade de um algoritmo. A essência destes métodos e conceitos estará focalizada no cálculo de complexidade e prova de corretude de algoritmos;
  • Caracterizar técnicas gerais de desenvolvimento de algoritmos que permitam ao aluno melhor projetá-los conforme sua natureza. As técnicas gerais escolhidas a serem estudadas são Divisão e Conquista, Método Guloso e Programação Dinâmica;
  • Apresentar noções básicas de Classes de Complexidade, em particular as classes P, NP e NP-Completo.

Ementa da disciplina

Conceitos básicos: recorrências, medidas de complexidade: melhor caso, caso médio e pior caso. Técnicas gerais de projeto de algoritmos: divisão e conquista, método guloso e programação dinâmica. Classes de complexidade: P, NP e NP-completude.

Recomendações

Disciplinas: Matemática Discreta, Algoritmos e Estruturas de Dados I

aa_recomendacoes.png

Para facilitar o acompanhamento do curso, é recomendado que você possua:

  • conhecimentos de programação (em qualquer linguagem imperativa), com boas noções de algoritmos recursivos,
  • familiaridade com estruturas de dados básicas (vetores, listas, pilhas, filas e árvores),
  • capacidade para reconhecer argumentos lógicos em uma prova matemática (por indução, contradição, construção),
  • familiaridade com linguagem matemática (como quantificadores lógicos, somatórios e manipulação de funções).

Outros materiais de apoio:

Bibliografia e outros materiais

  1. [LM] Lintzmayer, C. N.; Mota, G. O.. Notas de aulas - Análise de algoritmos e estruturas de dados (o conteúdo dessa disciplina está completo no livro, mas sempre existem atualizações - verifique sempre sua versão).
  2. [CLRS3] Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C.. Introduction to Algorithms . 3rd ed. MIT Press. 2009.
  3. [CLRS2] Cormen, T. H.; Leiserson, C. E.; Rivest, R. L.; Stein, C.. Introduction to Algorithms. 2nd ed. MIT Press. 2002.
  4. [Ma] Manber, U.. Introduction to Algorithms: A Creative Approach. 1989
  5. Colinha

Critérios de avaliação regular

A média final antes da REC ( MF ) será calculada da seguinte forma:

\[ MF = 0.85\sqrt{P1 \times P2} + 0.15 L, \]

onde,

  • P1 e P2 são as notas da primeira e segunda avaliações, respectivamente.
  • L é a média aritmética das listas de exercícios.

\[ CF = \begin{cases} \textbf{A} ,& \text{se } MF \in [8.5;10.0]\\ \textbf{B} ,& \text{se } MF \in [7.0;8.5) \\ \textbf{C} ,& \text{se } MF \in [6.0;7.0) \\ \textbf{F} ,& \text{se } MF < 5.0\\ \textbf{O} ,& \text{Se o número de faltas exceder 25% do total de aulas (independente do valor MF)} \end{cases} \]

🚨 Caso seja verificado ocorrência de fraude acadêmica, o aluno será automaticamente reprovado com F.

Vale Moral

No início da P1 e P2, você poderá entregar uma xerox de todos os exercícios (que não valeram nota) feitos por você durante a sua preparação para aquela prova. Isso servirá como uma evidência do seu esforço durante o curso. Esses exercícios não valem nota, mas valem moral. Caso você precise de um \(\epsilon\), onde \(\epsilon < 0.5\), de arredondamento de conceito, o abono de 1 falta e etc, vou consultar quanta moral você tem. Dependendo de quanta moral você tem, o seu pedido pode ou não ser aceito.

Ter uma alta frequência nas aulas (no máximo duas faltas), ser um regular frequentador das monitorias, também valem moral.

Em nenhuma hipótese será feito o arrendondamento de conceitos ou abono de falta para alunos sem moral.

Mecanismo de recuperação

  • A recuperação será aplicada apenas aos alunos que tiverem conceito final D ou F .
  • Consistirá numa avaliação, cujo conteúdo englobará todos os temas vistos durante o quadrimestre.
  • A nota obtida na avaliação de recuperação (NR) será usada para obter a nota final com recuperação (NFR), que consiste na média:

\[NFR = \frac{MF + NR}{2} \]

  • O conceito final com recuperação (CFR) será calculado da seguinte maneira:

\[ CFR = \begin{cases} C, & \text{se } CF = D \text{ e } NFR \geq 6;\\ D, & \text{se } CF = D \text{ e } NFR < 6;\\ D, & \text{se } CF = F \text{ e } NFR \geq 5;\\ F, & \text{caso contrário}. \end{cases} \]

Plágio

🚨 Leitura obrigatória 🚨

Entre outros, o código de ética da UFABC estabelece em seu artigo 25 que é eticamente inaceitável que os discentes:

  1. fraudem avaliações,
  2. fabriquem ou falsifiquem dados,
  3. plagiem ou não creditem devidamente autoria,
  4. aceitem autoria de material acadêmico sem participação na produção,
  5. vendam ou cedam autoria de material acadêmico próprio a pessoas que não participaram da produção.

Muitos ainda têm dúvidas sobre a interpretação das regras definidas pelo Código de Ética da UFABC. Por esta razão, diversos professores elaboraram um documento (disponível aqui) com vários exemplos e esclarecendo a interpretação das regras acima. Abaixo uma versão resumida, que não substitui de modo algum sua leitura. Sempre consulte o documento completo ou converse com o seu professor em caso de dúvidas!

  • Regra 1: Você não pode enviar para avaliação um trabalho que não seja de sua própria autoria ou que seja derivado/baseado em soluções elaboradas por outros.
  • Regra 2: Você não pode compartilhar a sua solução com outros alunos nem pedir aos seus colegas que compartilhem as soluções deles com você.
  • Regra 3: Nos trabalhos enviados para avaliação você deve indicar eventuais assistências que você tenha recebido.
  • Nós encorajamos fortemente que você procure outras pessoas quando houver a necessidade. Discuta o problema e possíveis ideias para soluções, mas elabore sua própria solução, por conta própria.
  • Qualquer violação às regras descritas acima implicará em descarte dos conceitos atribuídos a TODAS as tarefas avaliativas regulares de TODOS os envolvidos, causando assim suas reprovações automáticas com conceito F.
  • Possível denúncia à Comissão de Transgressões Disciplinares Discentes da Graduação, a qual decidirá sobre a punição adequada à violação que pode resultar em advertência, suspensão ou desligamento, de acordo com os artigos 78-82 do Regimento Geral da UFABC.

Dias, horários e locais das aulas

  • Quartas-feiras: 21h - 23h (sala S-212-0);
  • Sextas-feiras: 19h - 21h (sala S-214-0);

Datas Importantes

  • Avaliação 1: 07/07 (Sex)
  • Avaliação 2: 18/08 (Sex)
  • Avaliação substitutiva: 22/08 (Ter)
  • Recuperação: 23/09 (Sáb) às 10h – Sala S-212-0

    Avaliação substitutiva está disponível apenas para casos excepcionais.

Prova substitutiva

P1

Será aberta a todos.

Sejam P1 e SP1 as notas da P1 e da Sub da P1, respectivamente. A sua nota final da P1, denotada por P1*, será calculada por P1* = max {P1, SP1}.

Horário: 22/08 (⚠⚠*Terça-feira*⚠⚠) às 19h00 na Sala 214-0 (esta é uma reposição de uma quarta-feira).

P2

Fechada (apenas para os casos justificados).

Caso você deseje fazer a sub da P2, você deve entrar em contato comigo via e-mail até o dia 20/08. Você também deve manifestar no e-mail se desejará realizar a sub da P1.

Horário: 22/08 (⚠⚠*Terça-feira*⚠⚠) às 21h00 às 23h00 na Sala S-311-2

P1 e P2

Caso você tenha o direito de fazer a Sub da P2 e também deseje fazer a Sub da P1, a segunda prova será aplicada das 21h - 23h no mesmo dia (22/08). Detalhes serão combinados via e-mail.

Atendimento

Local: Bloco A, Torre 2, Piso 5, Sala 518-2

  • Quarta-feira: 19h - 20:40h (Maycon Sambinelli)

Local: Bloco A, Torre 2, Piso 5, Sala de Atendimento ao Aluno (perto do banheiro feminino)

  • Segunda-feira: 17h - 19h (Monitor)

Cronograma

Aula Data Tópico
1 31/05 Sobre o curso e resolução de exercícios de revisão.
2 02/06 Introdução à análise de algoritmos. Correção em algoritmos iterativos.
3 07/06 Notação assintótica
  09/06 🛁 Feriado
4 14/06 Insertion-Sort: Análise e Correção
5 16/06 Tempo de execução & Insertion Sort
6 21/06 Solução de recorrências (Substituição e Iteração)
7 23/06 Solução de recorrências (Árvore de recursão e Mestre).
8 28/06 Correção e tempo em algoritmos recursivos & Divisão e Conquista (Merge-Sort)
9 30/06 Selection-Sort & Heap
10 05/07 Heap & Heapsort. Limitante inferior da ordenação
11 07/07 Avaliação 1
12 12/07 Análise probabilística e Algoritmo aleatório.
13 14/07 Quick-Sort
14 19/07 Introdução a grafos e à análise de algoritmos em grafos. Busca em Grafos
15 21/07 Busca em largura & distância
16 26/07 Programação dinâmica
17 28/07 Programação dinâmica
18 02/08 Algoritmos gulosos
19 04/08 Algoritmos gulosos
20 09/08 Redução entre problemas.
21 11/08 Classes P, NP, NP-completo e NP-difícil. Problemas NP-completos.
22 16/08 Análise Amortizada?? Mais exemplos de Gulosos?? (Huffman??) Mais exemplos de PD??
23 18/08 Avaliação 2
24 22/08 Substitutiva
  23/09 Recuperação

Tópicos

Introdução

Correção de Algoritmos

Notação Assintótica

Tempo de execução de Algoritmos

InsertionSort

Recorrências

Algoritmos recursivos

Ordenação (InsertionSort, SelectionSort, HeapSort e etc)

Grafos

Programação Dinâmica

Algoritmos Gulosos

"One thing you will notice about greedy algorithms is that they are usually easy to design, easy to implement, easy to analyze, and they are very fast, but they are almost always difficult to prove correct." — Ian Parberry, Problems on Algorithms

Reduções e Complexidade

Lista de Exercícios para Entregar