Aperfeiçoar a capacidade do aluno em projetar algoritmos para resolver problemas complexos de programação.
Assumindo que o aluno, com formação em computação, tem conhecimento sólido sobre as estruturas de dados elementares, esta disciplina oferece lhe a oportunidade de sedimentar e avançar a capacidade de tratar problemas complexos.
Análise da complexidade de algoritmos. Notação assintótica. Paradigmas de resolução de problemas: backtracking, programação dinâmica, divisão e conquista, algoritmos gulosos. Resolução de problemas típicos de grandes classes: strings, aritmética e álgebra, teoria dos números, ordenação, grafos, geometria.
Trabalhos práticos de programação e provas envolvendo a resolução de problemas.
- CORMEN, T.H.; LEISESON, C.E.; RIVEST, R.L.; STEIN, C. Algoritmos – Teoria e Prática. Elsevier, 2a Ed. 2002.
- ZIVIANI, N. Projeto de Algoritmos com Implementação em Pascal e C. Ed. Thomson, 2a Ed. 2004.
- LEVITIN, A.V. Introduction to the Design and Analysis of Algorithms (2nd. Edition). Addison Wesley, 2003.
- SEDGEWICK, R. Algorithms in C – part 5 Graph Algorithms. 3rd Edition. Addison-Wesley, 2002.
- SKIENA, S.S. The Algorithm Design Manual. Springer, 1998.
- SKIENA, S.S.; REVILLA, M.A. Programming Challenges – The Programming Contest Training Manual. Springer, 2003.
- KLEINBERG, J; TARDOS, E. Algorithm Design. Addison-Wesley. 2006.