Estruturas de Dados / Organização de Dados I  —  2019/2

Página principal

Informações

Bibliografia sugerida

Estruturas de Dados e seus Algoritmos     Introduction to Algorithms    
(J. L. Szwarcfiter, L. Markenzon)     (Cormen, Leiserson, Rivest & Stein)    
         


Conteúdo das aulas

07/08


Primeira conversa sobre o curso: derrotando o código alheio.
(Comparem a ementa deste curso com o e-mail do Google com dicas para se preparar para uma entrevista para trabalhar com eles.)

Começando a pensar em complexidade de algoritmos, e a compará-las. O problema dos armários.  
 

12/08


Complexidade assintótica. Notação O. Número harmônico.

Implementações distintas do problema dos armários, comparando as complexidades formais e os tempos de execução (na prática).
Código (Python) feito em sala de aula no GitHub.  
 

14/08


O problema da celebridade. Pensando nos algoritmos em termos de complexidade assintótica.

Por quê as constantes podem de fato ficar em segundo plano. Programinha que compara funções: código no GitHub.  
 

19/08


Discussão sobre complexidade de pior caso vs complexidade de caso médio.
O problema de se buscar um elemento presente em uma lista de n elementos com sqrt(n) cópias de cada elemento 1, 2, ..., sqrt(n). Pior caso e caso médio da busca sequencial.

Listas: alocação sequencial (arrays) vs alocação encadeada (linked lists). Principais operações, comparação de performance. Deleção física vs deleção lógica de arrays.  
 

21/08


Implementação de listas encadeadas. Entendendo os detalhes.
Código (C) feito em sala de aula no GitHub.  
 

26/08


Não houve aula em função da Semana da Computação.  
 

28/08


Não houve aula em função da Semana da Computação.  
 

02/09


Filas e pilhas. Aplicações. Implementação com arrays (de forma circular) e listas encadeadas.  
 

04/09


Árvores. Aplicações. Representação, classificação (binária, ternária, n-ária, estritamente n-ária, completa, cheia).  
 

09/09


Buscas (traversals) em árvores. Busca em pré-ordem, pós-ordem, ordem simétrica. Aplicações.  
 

16/09


Árvore binária de busca ótima. Primeiras noções de Programação Dinâmica.
(Aula dada pelo Prof. Claudson Bornstein)  
 

18/09


Árvores binárias de busca auto-balanceáveis. Árvore AVL.
(Aula dada pelo Prof. Claudson Bornstein)  
 

23/09


Árvores red-black (rubronegras).  
 

25/09


Revisão para a P1. O problema da representação parentisada de árvores binárias.
Código (C) feito em sala de aula (Java) no GitHub.  
 

07/10


Resolução da lista de exercícios.  
 

09/10


Fim da resolução da lista de exercícios.
Programação Dinâmica top-down com recursão e memoização.

14/10


P1.  
 

16/10


Correção da P1.  
 

28/10


Hashing. Encadeamento externo. Fator de carga.  
 

30/10


Implementação de tabelas hash com encadeamento externo.  
 

04/11


Término da implementação. Capacidade inicial. Rehashing.
Outras técnicas de resolução de colisões.  
 

06/11


Tries. Radix trees. Árvores PATRICIA (ideia geral).  
 

13/11


UNION/FIND em conjuntos disjuntos (disjoint sets). Union by rank. Path compression.  
 

18/11


Heaps binomiais e filas de prioridade (priority queues).
Árvores B (ideia geral).  
 

25/11


Algoritmos de ordenação. Complexidade, estabilidade, uso de memória adicional.
Selection Sort, Insertion Sort, Bubble Sort, Heap Sort, Merge Sort, Quick Sort, Count Sort, Bucket Sort.  
 

27/11


P2.  
 

Voltar ao topo