Exercícios sobre árvores AVL Rodrigo de Alencar Hausen Exercício 1. Demonstre que o número de operações para manter uma árvore binária de busca ótima após uma inserção, no pior caso, é Ω(n) (dica: construa uma árvore binária completa e insira um elemento que faça com que todos os elementos tenham que ser rearranjados para voltarmos à uma árvore ótima). Interprete o resultado. Exercício 2. Escreva o pseudo-código completo da inserção. Exercício 3. Demonstre que cada uma das rotações duplas pode ser feita por meio de duas rotações simples. Exercício 4. Escreva o pseudo-código para remoção em uma árvore AVL. Considere que a remoção pode dar origem a O(log n) operações de rotação. Exercício 5. (Opcional - Implementação) Implementar o algoritmo para inserção, remoção e busca em uma árvore AVL em uma liguagem qualquer. Gere n nós, com n = 1 . . . 100000 e meça o pior tempo e o tempo médio necessários para inserções, buscas e remoções. Faça um gráfico e interprete os resultados. Exercício 6. (Extra) Quantas árvores AVL existem com altura 1, 2, 3 e 4? Faça o mesmo considerando um número mínimo de nós (dica: construa todas as possíveis árvores binárias que também sejam AVL). Exercício 7. (Extra. Requer conhecimento de prova por indução) Demonstre a fórmula fechada para o número de Fibonacci apresentada em aula (dica: talvez seja mais fácil usar a fórmula √ n an −(1−a) 1+ 5 √ Fn = , com a = 2 ). 5 Os exercícios marcados com “extra” são opcionais, para aqueles que desejam obter maior conhecimento matemático sobre o assunto. Bibliografia CORMEN, T. H.; LEISERSON, C. E.; RIVEST, R. L. e STEIN, C. Introduction to Algorithms, 3a edição, MIT Press, 2009. SZWARCFITER, J. L. e MARKENZON, L. Estruturas de Dados e seus Algoritmos, LTC, 1994. ZIVIANI, N. Projeto de Algoritmos: com implementações em Pascal e C, 2a edição, Cengage Learning, 2009.