Árvore binária & avl equipe: felipe pontes gustavo márcio márcio de medeiros
TRANSCRIPT
Árvore Binária & AVL
Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros
Sumário
Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicações
Árvore Binária & AVL
Introdução
Inserir em Array Ordenado: Achar o Local da inserção: O(log N); Inserir: Mover os elementos para frente (N/2 movimentos);
Procurar em Lista Encadeada: Comparar cada elemento da lista: N/2 comparações; Tempo necessário: O(N);
Solução para os problemas?Solução para os problemas? SIM!!SIM!!
ÁRVORE BINÁRIA
Sumário
Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicações
Árvore Binária & AVL
Raiz; Caminho; Nó; Folha; Pai e Filho; Sub-árvore; Níveis; Árvores Binárias.
Conceitos Básicos
Sumário
Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicativos e Aplicações
Árvore Binária & AVL
Algoritmos
Função Insere ( Elemento , Árvore ) Árvore
começar
se EvaziaArv ( Árvore )
devolver CriarArv (Árvore, NULL, NULL )
senão
começar
se ( Elemento < No ( Árvore ))
devolver CriarArv ( No ( Árvore ), Insere ( Elemento, fe ( Árvore )), fd ( Árvore))
senão
devolver CriarArv ( No ( Árvore ), fe ( Árvore ), Insere ( Elemento, fd ( Árvore ))
acabar
acabar
Inserção
Algoritmos
DeleçãoFunção eliminar (Elemento, Árvore) Árvore;começar
se EvaziaArv ( Árvore )eliminar = NULL
senãocomeçar
se No ( Árvore )=xcomeçar
se EvaziaArv (fd(a))eliminar=fe(a)
senãose EvaziaArv (fe(a))
eliminar=fd(a)senão
eliminar = CriarArv (min(fd(a)),fe(a),eliminar(min(fd(a))),fd(a))acabarsenãocomeçar
Se x < No(Árvore)eliminar = CriarArv (no(a),eliminar(x,fe(a),fd(a));
senãoelimina = CriarArv (no(a),fe(a),eliminar(x,fd(a));
acabaracabardevolver Árvore
acabar
Algoritmos
BuscaO algoritmo de busca é idêntico ao algoritmo de inserção, com pequenas modificações:
Função Busca (Elemento, Árvore) Árvorecomeça
enquanto (Nó(Árvore) != Elemento)se (Nó (Árvore) = NULL)
devolva NULLse (Elemento < Nó (Árvore))
Busca (Elemento, fe(Árvore))senão
começase (Elemento > Nó(Árvore))
Busca (Elemento, fd(Árvore))Senãocomeça
se (Elemento = Nó(Árvore))devolve Nó(Árvore)
acabaacaba
acaba_enquantoacaba
O percurso InOrder fará com que todos os nós sejam visitados na ordem ascendente, baseada em seus valores chaves
Algoritmo Simplificado
1. Chama a si mesmo para percorrer a subárvore esquerda do nó;
2. Visita o nó;
3. Chama a si mesmo para percorrer a subárvore a direita do nó.
Algoritmos
Percurso - InOrder
O percurso PreOrder fará com que todos os nós sejam visitados de modo a gerar uma expressão algebrica prefixa.
Algoritmo Simplificado
1. Visita o nó;2. Chama a si mesmo para percorrer a subárvore esquerda do nó;3. Chama a si mesmo para percorrer a subárvore a direita do nó.
Algoritmos
Percurso - PreOrder
O percurso PostOrder fará com que todos os nós sejam visitados de modo a gerar uma expressão algebrica posfixa.
Algoritmo Simplificado
1. Chama a si mesmo para percorrer a subárvore esquerda do nó;2. Chama a si mesmo para percorrer a subárvore a direita do nó.3. Visita o nó;
Algoritmos
Percurso - PostOrder
A * (B + C)
A
B C
*
+
Infixa: A*(B+C)Posfixa: ABC+*Prefixa: *A+BC
Sumário
Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicativos e Aplicações
Árvore Binária & AVL
Inserindo os nós 30, 20, 40, 10, 25, 35 e 50 nesta ordem, teremos:
Árvores Binárias Balanceadas e AVL
30
20
10 25
40
35 50
Inserindo os nós 10, 20, 30, 40 e 50 nesta ordem, teremos:
Árvores Binárias Balanceadas e AVL
10
20
30
40
50
• Existem ordens de inserção de nós que conservam o balanceamento de uma árvore binária.
• Na prática é impossível prever essa ordem ou até alterá-la.
• Algoritmos para balanceamentos.
Árvores Binárias Balanceadas
• A vantagem de uma árvore balanceada com relação a uma degenerada está em sua eficiência.
• Por exemplo: numa árvore binária degenerada de 10.000 nós são necessárias, em média, 5.000 comparações (semelhança com arrays ordenados e listas encadeadas).
• Numa árvore balanceada com o mesmo número de nós essa média reduz-se a 14 comparações.
Árvores Binárias Balanceadas
• Uma árvore binária balanceada é aquela na qual, para cada nó, as alturas de suas sub-árvores esquerda e direita diferem de, no máximo, 1.
• Fator de balanceamento de um nó é a diferença entre a altura da sub-árvore esquerda em relação à sub-árvore direita.
FB(p) = altura(sub-árvore esquerda p) - altura(sub-árvore direita p)
• Em uma árvore binária balanceada todos os Fatores de Balanceamento de todos os nós estão no intervalo -1 <= FB <= 1
Árvores Binárias Balanceadas
• Algoritmo de balanceamento de árvores binárias.
• A origem da denominação AVL vem dos seus criadores: Adel’son-Vel’skii e Landis.
• Ano de divulgação: 1962.
AVL
• Inicialmente inserimos um novo nó na árvore normalmente.
• A inserção deste pode degenerar a árvore.• A restauração do balanceamento é feita através
de rotações na árvore no nó “pivô”.• Nó “pivô” é aquele que após a inserção possui
Fator de Balanceamento fora do intervalo.
AVL
• Primeiro caso:
• FB > 1 (subárvore esquerda maior que subárvore direita)• E a subárvore esquerda desta subárvore esquerda é
maior que a subárvore direita dela• Então realizar uma rotação simples para a direita.
AVL
3
2
1
AVL
• Primeiro caso:
3
2
1
2
1 3
• Segundo caso:
• FB < -1 (subárvore esquerda menor que subárvore direita)
• E a subárvore direita desta subárvore direita é maior que a subárvore esquerda dela
• Então realizar uma rotação simples para a esquerda.
AVL
1
2
3
• Segundo caso:
AVL
1
2
3
2
1 3
• Terceiro caso:
• FB > 1 (subárvore esquerda maior que subárvore direita)• E a subárvore esquerda desta subárvore esquerda é
menor ou igual que a subárvore direita dela• Então realizar uma rotação dupla para a direita.
AVL
1
3
2
• Terceiro caso:
AVL
1
3
2
1
2
3
2
1 3
• Quarto caso:
• FB < -1 (subárvore esquerda menor que subárvore direita)
• E a subárvore direita desta subárvore direita é menor que a subárvore esquerda dela
• Então realizar uma rotação dupla para a esquerda.
AVL
1
3
2
• Quarto caso:
AVL
1
3
2
2
3
1
2
1 3
Sumário
Introdução Conceitos Básicos Algoritmos Árvores Binárias Balanceadas e AVL Aplicações
Árvore Binária & AVL
Aplicações
Para que servem as Árvores Binárias?
Exemplos de aplicações: Redes de Comunicação de Dados
Envio de pacotes ordenados e/ou redundantes Codificação de Huffman
Compressão e Descompressão de arquivos
1) Redes de Comunicação
A maioria dos protocolos de comunicação fragmenta as mensagens em pacotes que são numerados e enviados através da rede
Não há garantia da chegada em ordem dos pacotes
Perdas de pacotes geram novos envios e estes podem causar duplicatas dos mesmos
Reconstrução da Mensagem
Como reconstruir a mensagem corretamente? Descartar os pacotes repetidos Ordenar os pacotes
Como implementar tal algoritmo? Utilizando Árvores Binárias
Exemplo:
R
R
R
RR
A B
P3
P1
P2
P3
P1
P2
P3
P1P1
Ordem de Chegada:
P3 P1 P2
Confirmação de envio: P1 e P3.
P1 Ok
P2 ?
P3 Ok
Reenvio de P2.
P2 P2
Problemas: ordens e redundância dos pacotes
Algoritmo
O primeiro pacote é colocado na raiz da árvore. Cada pacote sucessivo é comparado com o da raiz
Se for igual, descarta-se a réplica. Se for menor ou maior, percorre-se os lados esquerdo ou direito da árvore
Sub-árvore vazia implica inserção do novo pacote
Sub-árvore não vazia implica comparação dos pacotes com a mesma
Problemas resolvidos?
Problema da ordenação A ordenação dos pacotes pode ser feita
trivialmente com apenas uma chamada ao método inOrder() da árvore binária
Problema da redundância Solucionado com o algoritmo de inserção na
árvore, visto que o pacote, antes de ser inserido, é comparado com os demais que já se encontram na árvore binária
2) Codificação de Huffman
Algoritmo utilizado para comprimir arquivos Todo o algoritmo é baseado na criação de
uma Árvore Binária Programas como Winzip e WinRAR utilizam
este algoritmo Criado por David Huffman em 1952
Códigos e Caracteres
Caracteres são letras, números e símbolos Códigos são seqüências de bits que podem
representar de maneira ÚNICA um caracter b bits para representar c caracteres: Exemplos:
c = 2b
ASCII (7 bits) Extended ASCII (8 bits)
2 = 128 caracteres7
2 = 256 caracteres8
Como comprimir arquivos?
No código ASCII, todos os caracteres têm um número fixo de bits
Números variáveis de bits implica menor capacidade de armazenamento
Associações com bits variáveis podem comprimir consideravelmente o arquivo
Como comprimir arquivos desta maneira? Utilizando a Codificação de Huffman!
Exemplo:
Freqüências: A = 10; B = 8; C = 6; D = 5; E = 2 Construção da Árvore Binária Comparação do número de bits
Tamanho Fixo (8 bits) Total = 248 bits Tamanho Variável Total = 69 bits
AAAAAAAAAABBBBBBBBCCCCCCDDDDDEE
Considere o arquivo com o seguinte texto:
Compressão
Depois da geração da árvore, o arquivo é percorrido novamente e cada caracter do arquivo é substituído pelo código binário contido na árvore, gerando uma cadeia de bits
Criação da tabela de caracteres e códigos binários
O que é armazenado? Cadeia de bits gerada Tabela de caracteres e códigos
Descompressão
Regeneração da árvore binária através da tabela de caracteres e códigos
A cadeia de bits é percorrida e, à medida que uma sub-cadeia é encontrada na tabela de caracteres e códigos, a mesma é substituída pelo caracter correspondente
Conclusões
As árvores binárias são uma das estruturas de dados mais importantes devido a grande aplicabilidade das mesmas.
A maioria dos algoritmos das árvores binárias são de simples entendimento, facilitando sobremaneira o desenvolvimento de sistemas.
• http://w3.ualg.pt/~hshah/ped/• http://www.geocities.com/grupotrees/AVL/avl.htm• http://inf.unisinos.br/~anibal/prog2avl.rtf• http://www.inf.unisinos.br/~osorio/lab2/lab2-a09b.pdf• http://www.howtodothings.com/showarticle.asp?article=313• http://www.ppgia.pucpr.br/~laplima/aulas/materia/
arvbin_m.html• Material disponível em http://www.gmmc.kit.net/bd
Bibliografia
Dúvidas