Apresentação de conceitos avançados que levem o aluno a uma maturidade em programação estruturada, com conhecimento de uma linguagem de programação com recursos avançados. Aprendizado de técnicas para construção de algoritmos e para análise da complexidade de algoritmos. Aprendizado de algoritmos clássicos de ordenação e busca em memória interna. Prática de Programação.
Introdução de conceitos avançados em linguagem de programação estruturada. Análise de algoritmos: critérios de complexidade. Notação Assintótica. Análise do pior caso, melhor caso e caso médio. Paradigmas de Projeto de algoritmos (indução, recursividade, divisão e conquista, etc.). Algoritmos de ordenação (por inserção, seleção, partição) diretos e avançados, e de busca (direta, seqüencial, indexada) em memória interna. Espalhamento (hashing).
Análise de algoritmos: conceitos básicos, critérios de complexidade de tempo e espaço, notação assintótica, análise de pior caso, melhor caso e caso médio, técnicas de contagem de operações e análise de recorrências, prática e discussão com problemas computacionais relevantes. Algoritmos de ordenação interna simples e avançados: conceitos básicos, métodos de ordenação bubblesort, quicksort, inserção, shellsort, seleção, heapsort, mergesort, contagem de menores, contagem de tipos e radixsort, análise dos algoritmos de ordenação, prática e discussão com problemas computacionais relevantes. Algoritmos de busca interna: conceitos básicos, métodos de busca seqüencial, seqüencial indexada, binária e por interpolação, análise dos algoritmos de busca anteriores e considerações sobre busca em árvores, prática e discussão com problemas computacionais relevantes. Hashing interno: conceitos básicos, tipos de hashing, funções hash, tratamento de colisões, análise dos algoritmos de busca, inserção e remoção com base em hashing. Paradigmas de projeto de algoritmos: conceitos básicos, paradigmas de indução, recursividade, tentativa e erro, divisão e conquista, programação dinâmica, algoritmos gulosos e algoritmos aproximados, prática e discussão com problemas computacionais relevantes.
Livro texto:- CORMEN, T.H. et al.: Algoritmos: Teoria e Prática. Elsevier e Campus (tradução). ISBN 853520926-3.- CORMEN, T.H.; LEISERSON, C.E.; RIVEST, R.L.; STEIN, C. Algoritmos: Teoria e Prática. Editora Campus.2002.-AHO,A.V.; HOPCROFT,J.E.; ULLMAN,J.D. Data Structure and Algorithms. Readings, Addison Wesley, 1983. -HOROWITZ,E.; SAHNI,S. Data Structures in Pascal, Computer Science Press, 1990.-SZWARCFITER, J. & MARKEZON, L. Estruturas de Dados e seus Algoritmos. LTC Editora, 2a. Ed., 1994.-WIRTH,N. Algoritmos e Estruturas de Dados, Rio de Janeiro, LTC, 1989.Bibliografia Complementar:-HOROWITZ,E.; SAHNI,S. Fundamentos de Estrutura de Dados, Rio de Janeiro, Campus, 1984, Ano de Publicação, 1986.-TENEMBAUM,A.M. et alli Data Structures Using C, Prentice-Hall, 1990.-SIMCOVEC,R.F. E WIENER,R.S. - Data Structures Using Módula 2, John Wiley e Sons, 1986.