Refinar o conhecimento de programação de computadores e suas aplicações através do estudo de algoritmos, estruturas de dados e tipos abstratos de dados fundamentais e de exercícios de programação.
Tipos abstratos de dados e estruturas de dados. Algoritmos de ordenação. Processamento de texto, algoritmos em grafos e aplicações interdisciplinares. Prática de programação.
Tipos abstratos de dados (ADTs), uso de ADTs, e implementação de ADTs através da classes. Algoritmos de ordenação elementares, linearítmicos e lineares. ADTs fundamentais: pilhas, filas, filas de prioridade e tabelas de símbolos. Estruturas de dados básicas: listas ligadas, árvores de busca e tabelas de espalhamento. Exemplos envolvendo processamento de texto; busca em grafos e caminhos mínimos em grafos; aplicações interdisciplinares. Extensa prática de programação e depuração de programas.
1. R. Sedgewick, K. Wayne, Introduction to programming in Java: an interdisciplinary approach, Addison-Wesley, 2008. 2. R. Sedgewick, K. Wayne, Algorithms, 4th. ed., Addison-Wesley, 2011. 3. R. Sedgewick, K. Wayne, R. Dondero, Introduction to programming in Python: an interdisciplinary approach, Addison-Wesley, 2015. 4. R. Sedgewick, K. Wayne, Computer science: an interdisciplinary approach, Addison-Wesley, 2016 5. P. Feofiloff, Algoritmos em Linguagem C, Elsevier, 2009.