MAC0323 Algoritmos e Estruturas de Dados II
[Edição do 1o. Semestre de 2021]
(Página eternamente minimal e em mutação)
Transparências de Sedgewick e Wayne (cópia local; possivelmente foram atualizadas)
Sinopse das aulas
Abril
- Apresentação da disciplina. Um mínimo sobre Java e sobre as bibliotecas de Sedgewick e Wayne
Bag
. Tipos iteráveis. Genéricos. Implementação deBag
Tipos. - Análise amortizada e tabelas redimensionáveis. Aplicações: sacos, pilhas e filas
- Union-find (tipo-de-dado para partições de conjuntos ou conjuntos disjuntos)
- E03. Filas de prioridade com
heaps binários. Filas de prioridade com objetos indexados
(
IndexMinPQ.java
). E02
Comentários sobre os EPs (bibliotecas e
performance bugs). Critério de avaliação. Union-find: exemplos
de execução e grafos aleatórios. - Imutabilidade (comentários). Event driven simulation. Tabelas de símbolos: recapitulação + \(\varepsilon\)
Maio
- Tabelas de símbolos: recapitulação + \(\varepsilon\) (continuação). Implementações elementares e com árvores de busca
- breve texto). Internal path length e external path length Tabelas de símbolos: implementação com ABBs. Discussão sobre árvores binárias (
- Implementação de tabelas de símbolos com árvores balanceadas
- Implementação de tabelas de símbolos com árvores balanceadas (cont.)
- E05, Altura e IPL de ABBs e ARNEs. Tabelas de espalhamento (hashing) Discussão do
- L. Littleton e R. May, Simplified expectations in the birthday problem, The College Mathematics Journal, 47 (2016), no. 1, 50–55 Tabelas de espalhamento (hashing), cont. O paradoxo dos aniversários: veja
SET.java
,LookupCSV.java
,FileIndex.java
,Concordance.java
,SparseVector.java
,SparseMatrix.java
)
Tabelas de espalhamento, cont. Aplicações de
tabelas de símbolos (- Tries e TSTs
Junho
- Tries e TSTs (cont.)
- Break
- Break
- Compressão de dados: run length encoding; Huffman
- Compressão de dados: Huffman (cont.); LZW
- Compressão de dados: LZW (cont.)
- LZW (comentários finais). Ordenação de strings; vetor de sufixos
- Vetor de sufixos (cont.). LRS (longest repeated substring)
- Grafos: API e implementações; busca em profundidade
Julho
- Busca em profundidade (cont.); busca em largura; componentes conexas; Bacon numbers; outros problemas envolvendo grafos
- Grafos dirigidos. Buscas em grafos dirigidos. Ordenação topológica
- Componentes fortes de grafos dirigidos. Caminhos mínimos
- Caminhos mínimos (cont.). Algoritmo de Dijkstra. Caminhos mínimos em DAGs
- Caminhos mínimos em DAGs (cont.). Bellman-Ford. Circuitos negativos e arbitrage
- Busca de padrões em texto. O algoritmo de Knuth, Morris e Pratt (vídeoaula)
- Algoritmo de Boyer e Moore. Algoritmo de Rabin e Karp
- Expressões regulares. Autômatos não-determinísticos
- Russ Cox, Regular Expression Matching Can Be Simple And Fast (but is slow in Java, Perl, PHP, Python, Ruby, …). Bônus (teste de primalidade) Autômatos não-determinísticos (cont.). Comentários adicionais. Recomendado:
Página principal de MAC0323, 1o. semestre de 2021