Estruturas de Dados II
1. Componente Curricular:
Estrutura de Dados II
2. Carga Horária:
60 horas
3. Objetivo:
Tendo como base a execução de atividades práticas e o desenvolvimento de produtos, apresentar ao estudante os principais conceitos relacionados as principais formas de uso avançado das Estrutura de Dados computacionais.
4. Ementa Oficial:
Heaps. Filas de prioridades. Tabelas de espalhamento. Árvores: árvores de busca binária, árvores AVL, árvores vermelho-preto, árvores B. Grafos: representação de grafos, busca em largura, busca em profundidade, ordenação topologia e componentes fortemente conexos.
5. Conteúdo Programático:
1. Revisão de Algoritmos e Estrutura de Dados.
2. Introdução à Teoria dos Grafos.
3. Árvores Binárias.
4. Árvores Múltiplas.
5. Ordenação.
6. Abordagem Metodológica:
Aprender fazendo e fazer aprendendo. As ações implementadas têm como foco o aprendizado de Estrutura de Dados pelo uso de recursos computacionais - privilegiando o projeto por simuladores e o desenvolvimento prático; seguido de exposições teóricas, apoiadas por: simulações, slides e vídeos. Em resumo, a metodologia tem como base a tríade Conteúdo, Atividade e Produto.
A nota final será dada pelas avaliações dos artefatos (relatório, lista de exercício - manuscritas, apresentação oral, pôster, postagem, vídeo, ...) produzidos durante as aulas e entregues em cada uma das datas especificadas. O aluno também será avaliado através de outros recursos, como p.ex. a frequência e a apresentação de artefatos não obrigatórios - os quais poderão até ter pontuação extra.
7. Plano de Aprendizado:
Aula 1
Conteúdo:
Revisão: Algoritmos e Estrutura de Dados.
Drozdek, A. Estrutura de Dados e Algoritmos em C++. Capítulos 3 e 4.
Atividades:
Produtos:
Algoritmo e Estrutura de Dados: O início da Jornada de um Programador!
Programa de Iniciação Científica - Apostilas.
Ferramentas: 8-Bit Assembler (tutorial), JDoodle, Tynker.
Outros: Tabela ASCII.
Aula 2
Conteúdo:
Introdução à Teoria dos Grafos.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópicos 8.1 a 8.5).
Atividades:
Aplicações de Grafos.
Produtos:
Aula 3
Conteúdo:
Árvores Binárias - Conceito e Características.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópicos 6.1 a 6.3).
Atividades:
Produtos:
Aula 4
Conteúdo:
Árvores Binárias - Operações e Aplicações.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópicos 6.4 a 6.6).
Atividades:
PARA QUE usar Árvores (Binária ou Não)?
Perguntas:
Qual o motivo da escolha?
Uma árvore é um tipo de grafo ou um grafo é um tipo de árvore?
Método fácil para percursos em Árvore Binária (Pré-Ordem, Em-Ordem, Pós-Ordem).
Pergunta: Como implementar a definição do nível hierárquico de cada nó?
Produtos:
Aula 5
Conteúdo:
Revisão de conteúdos e 1ª Avaliação.
Atividades:
Relatório de Produto 1 ou Prova Prática 1.
Aula 6
Conteúdo:
Árvores Binárias - Balanceamento e Ajuste.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópicos 6.7 e 6.8).
O que são ÁRVORES BALANCEADAS? Complexidade de BUSCA, INSERÇÃO, REMOÇÃO.
Atividades:
Pergunta: Como implementar o cálculo da altura de cada sub-árvore?
Pergunta: Como balancear uma árvore pronta (armazenada em arquivo).
Produtos:
Aula 7
Conteúdo:
Árvores Binárias - Heaps e Filas com Prioridade.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópico 6.9).
Atividades:
Tarefa: Implementar Ordenação.
Pergunta: Heaps podem facilitar a implementação de Filas com Prioridade?
Produtos:
Aula 8
Conteúdo:
Árvores Binárias - Treaps e K-d.
Atividades:
Produtos:
Aula 9
Conteúdo:
Árvores Binárias - Avaliação de Expressões.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópico 6.12).
Atividades:
STALLINGS, W. Arquitetura e Organização de Computadores: Projeto para Desempenho, 8a ed (pg. 323 e 324).
Produtos:
Aula 10
Conteúdo:
Revisão de conteúdos e 2ª Avaliação.
Atividades:
Relatório de Produto 2 ou Prova Prática 2.
Aula 11
Conteúdo:
Árvores Múltiplas - Família das Árvores B.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópico 7.1).
Atividades:
Diferenciando Árvores B de Árvores B+ (inserir 15 números em ordem decrescente).
Questões:
Qual é a mais eficiente no processo de inserção?
Liste pelo menos 2 aplicações para estas árvores.
Produtos:
Aula 12
Conteúdo:
Árvores Múltiplas - Tries.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópico 7.2).
Atividades:
Observando a criação de uma Árvore Trie.
Questão: Liste pelo menos 2 aplicações para estas árvores.
Produtos:
Aula 13
Conteúdo:
Ordenações elementares e Árvore de Decisão.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópicos 9.1 e 9.2).
Aplicação para Ordenações e Árvores.
Atividades:
Observando e Comparando Algoritmos de Ordenação.
Questões:
Qual a importância dos algoritmos de ordenação?
Liste pelo menos 2 aplicações para estas árvores.
Simplificando o processo de aprendizado.
Produtos:
Aula 14
Conteúdo:
Ordenações Eficientes.
DROZDEK, A. Estrutura de Dados e Algoritmos em C++ (Tópico 9.3).
Atividades:
Comparando Radix Sort com Radix Tree.
Produtos:
Aula 15
Conteúdo:
Revisão de conteúdos e 3ª Avaliação.
Atividades:
Relatório de Produto 3 ou Prova Prática 3.
8. Bibliografia:
Cormen, T. H., Leiserson, C. E., Rivest, R. L., e Stein, C. (2012). Algoritmos – Teoria e Prática. Campus, 3a edição.
Drozdek, A. (2017). Estrutura de Dados e Algoritmos em C++. Cengage, 4a edição.
Goldbarg, M. C. e Goldbarg, E. (2012). Grafos – Conceitos, Algoritmos e Aplicações. Elsevier, 1a edição.