Aperfeiçoar a capacidade do aluno em projetar algoritmos para resolver problemas complexos de programação. 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 relacionados a tópicos tais como: strings, busca binária, teoria dos números e grafos.