MO417 - Complexidade de Algoritmos I

Segundo semestre de 2018

Prof. Orlando Lee




Conteúdo desta página



Avisos importantes

Para ver as notas finais clique aqui.



Horário das aulas e atendimento



Objetivos

O que será visto no curso:
  1. Análise de complexidade assintótica de algoritmos.
  2. Projeto de algoritmos eficientes e elegantes para vários problemas computacionais básicos.
  3. Natureza recursiva de vários problemas e como explorá-la para projetar algoritmos eficientes.
  4. Complexidade computacional e classes de problemas.


Programa da disciplina

Abaixo seguem os tópicos que serão cobertos e sugestões para leitura ([CLRS] é a referência [3], mas vocês podem usar [1] ou [2]; [Manber] é a referência [4]. Em verde encontram-se os tópicos já cobertos em aula:


Listas de Exercícios

Abaixo estão indicados vários exercícios do CLRS (referência [3]) e do Manber (referência [4]). Note que o Manber possui vários exercícios resolvidos. Exercícios adicionais serão sugeridos durante o semestre.

Sugere-se que cada aluno tente resolver individualmente os exercícios e só depois discutir em grupo. Dúvidas ou dificuldades devem ser discutidas com o docente.

  1. [Básico]([CLRS] Capítulo 1): Exercícios 1.2-2, 1.2-3; Problema 1-1.
  2. [Básico]([CLRS] Capítulo 2): Exercícios 2.1-3, 2.1-4, 2.2-2, 2.2-3, 2.3-3, 2.3-5, 2.3-6, 2.3-7; Problema 2-1.
  3. [Notação assintótica, crescimento de funções] ([CLRS] Capítulo 3): Exercícios 3.1-1, 3.1-2, 3.1-3, 3.1-4, 3.1-6, 3.1-7, 3.1-8, 3.2-3; Problemas 3-1, 3-2, 3-3, 3-4.
  4. [Indução] ([Manber] Capítulo 2): Exercícios 2.1, 2.4, 2.7, 2.9, 2.12, 2.14, 2.15 (substituindo, no enunciado, o número 81 por 49), 2.18 (substituindo, no enunciado, a palavra cycle por circle), 2.19, 2.21. Extra (faça pelo menos a 11 e a 12).
  5. [Recorrências] ([CLRS] Capítulo 4): Exercícios 4.1-2, 4.1-5, 4.2-2, 4.2-4, 4.2-5, 4.3-1, 4.3-2, 4.3-4, 4.3-5, 4.4-2; Problemas 4-1, 4-3, 4-5.
  6. [Projeto de algoritmos por indução] ([Manber] Capítulo 5): Exercícios 5.6, 5.12, 5.14, 5.15, 5.25a.
  7. [Ordenação] ([Manber] Capítulo 6): Exercícios 6.14, 6.22, 6.23, 6.24, 6.25, 6.29.
  8. [Heapsort] ([CLRS] Capítulo 6): Exercícios 6.1-4, 6.1-5, 6.2-1, 6.2-2, 6.2-3, 6.2-4, 6.2-6, 6.4-3, 6.4-4, 6.4-5, 6.5-8.
  9. [Quicksort] ([CLRS] Capítulo 7): Exercícios 7.2-2, 7.2-3; Problemas 7-3, 7-4.
  10. [Ordenação] ([Manber] Capítulo 6): Exercícios 6.11, 6.21, 6.34.
  11. [Ordenação em tempo linear] ([CLRS] Capítulo 8): Exercícios 8.1-1, 8.1-2, 8.2-1, 8.2-2, 8.2-3, 8.2-4, 8.3-1, 8.3-3, 8.3-4, 8.4-1, 8.4-2; Problemas: 8-2, 8-3a, 8-6.
  12. [Estatísticas de ordem] ([CLRS] Capítulo 9): Exercícios 9.2-1, 9.2-3, 9.2-4, Problemas: 9-1, 9-2;
  13. [Estatísticas de ordem] ([CLRS] Capítulo 9): Exercícios 9.1-1, 9.3-1, 9.3-2, 9.3-3, 9.3-5, 9.3-6, 9.3-7, 9.3-8, 9.3-9.
  14. [Programação dinâmica] ([CLRS] Capítulo 15): Exercícios 15.2-1, 15.2-2, 15.2-3, 15.3-2, 15.3-3, 15.3-5, 15.4-1, 15.4-2, 15.4-3, 15.4-4, 15.4-5, 15.4-6, 15.5-1, 15.5-2, 15.5-3; Problemas: 15-2, 15-6, 15-7.
  15. [Algoritmos gulosos] ([CLRS] Capítulo 16): Exercícios 16.1-1, 16.1-2, 16.1-3, 16.1-4, 16.1-5, 16.2-1, 16.2-2, 16.2-3, 16.2-4, 16.2-5, 16.3-1, 16.3-4, 16.3-7, 16.3-8; Problemas: 16-1.
  16. [Representação de grafos]([CLRS] Capítulo 22): Exercícios 22.1-1 a 22.1-6.
  17. [BFS]([CLRS] Capítulo 22): Exercícios 22.2-1 a 22.2-9.
  18. [DFS]([CLRS] Capítulo 22): Exercícios 22.3-1 a 22.3-12.
  19. [Ordenação Topológica]([CLRS] Capítulo 22): Exercícios 22.4-1 a 22.4-5.
  20. [Componentes Fortemente Conexos]([CLRS] Capítulo 22): Exercícios 22.5-1 a 22.5-7; Problema 22-1.
  21. [AGM - Básico]([CLRS] Capítulo 23): Exercícios 23.1-1 a 23.1-11.
  22. [AGM - Prim e Kruskal]([CLRS] Capítulo 21 e 23): Exercícios 21.2-1 a 21.2-2, 21.2-4 a 21.2-6; 23.2-1 a 23.2-5, 23.2-8; Problemas 23-1 e 23-4.
  23. [CM - Grafos Orientados Acíclicos]([CLRS] Capítulo 24:) Exercícios 24.2-1 a 24.2-4; Problema 24-2.
  24. [CM - Dijkstra]([CLRS] Capítulo 24:) Exercícios 24.3-1 a 24.3-8.
  25. [CM - Bellman-Ford]([CLRS] Capítulo 24:) Exercícios 24.1-1 a 24.1-4, 24.1-6.
  26. [CM - Sistemas de Diferenças]([CLRS] Capítulo 24:) Exercícios 24.4-1 a 24.4-8, 24.4-10 a 24.4-11.
  27. [CM - Floyd-Warshall]([CLRS] Capítulo 25:) Exercícios 25.2-1 a 25.2-9.
  28. [Redução e NP-completude] pdf1 e pdf2 (atualizado 5/12 - havia alguns exercícios que não deveriam estar nas listas)


Material didático

O material didático (slides) que será usado neste curso foi preparado pelo professor Cid Carvalho de Souza e por Cândida Nunes da Silva. O que disponibilizarei aqui será basicamente o mesmo com algumas adaptações, modificações e erros introduzidos por mim.

Esses slides foram preparados na época da segunda edição do CLRS (referência [2]). A terceira edição do CLRS (referência [3]) tem algumas diferenças em relação à anterior (alguns capítulos foram acrescentados e/ou modificados; a notação usada nos pseudo-códigos é mais similar a códigos de linguagens como Pascal ou C). Os slides não foram atualizados levando em conta essas mudanças (os pseudo-códigos usam o estilo de [2]).

O material serve principalmente como guia e de nenhum modo deve ser usado como única fonte de estudos. Para isso, deve-se consultar a bibliografia.

Os slides estão em arquivos no formato PDF (idênticos aos usados em aula) e serão disponibilizados ao longo do semestre.

Redução de problemas e classes de complexidade



Avaliação



Datas importantes



Referências Bibliográficas

Os livros-texto do curso são as referências [3] (ou [1] ou [2]) e [4] (em algumas partes da matéria).