Familiarizar o aluno com diferentes técnicas de desenvolvimento de programas corretos e bem estruturados, com o estudo de ferramentas matemáticas úteis para a análise de algoritmos e com a análise da complexidade assintótica de algoritmos.
Introdução a diferentes técnicas para o desenvolvimento de programas, bem como técnicas de análise da complexidade dos algoritmos.
Técnicas de desenvolvimento de algoritmos baseadas em indução fraca e forte, tentativa e erro, técnicas gulosas e programação dinâmica. Elementos de análise assintótica de algoritmos (notação O, Omega e Theta) iterativos e recursivos. Desenvolvimento e análise da complexidade de diferentes algoritmos de ordenação (BubbleSort, InsertionSort, SelectionSort, QuickSort, MergeSort, HeapSort, CountingSort e RadixSort).
Bibliografia - Livro texto: CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L.; STEIN, C. “Algoritmos - Teoria e Prática”, GEN LTC, 3ª edição, 2012. ZIVIANI, N. “Projeto de Algoritmos”, Cengage Learning, 3ª edição revista e ampliada, 2011. FEOFILOFF, P. “Algoritmos em linguagem C”, Campus/Elsevier, 1ª edição, 2009. Bibliografia Complementar: KON, F; GOLDMAN, A. e SILVA, P.J.S. “Introdução à Ciência de Computação com Java e Orientação a Objetos”, IME – USP, 2004.