Top Banner
Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros
45

Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

Apr 17, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

Árvore Binária & AVL

Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros

Page 2: Á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

Page 3: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 4: Á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

Page 5: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

Raiz; Caminho; Nó; Folha; Pai e Filho; Sub-árvore; Níveis; Árvores Binárias.

Conceitos Básicos

Page 6: Á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 Aplicativos e Aplicações

Árvore Binária & AVL

Page 7: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 8: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 9: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 10: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 11: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 12: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 13: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

A * (B + C)

A

B C

*

+

Infixa: A*(B+C)Posfixa: ABC+*Prefixa: *A+BC

Page 14: Á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 Aplicativos e Aplicações

Árvore Binária & AVL

Page 15: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 16: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

Inserindo os nós 10, 20, 30, 40 e 50 nesta ordem, teremos:

Árvores Binárias Balanceadas e AVL

10

20

30

40

50

Page 17: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 18: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 19: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 20: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 21: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 22: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 23: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

AVL

• Primeiro caso:

3

2

1

2

1 3

Page 24: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 25: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• Segundo caso:

AVL

1

2

3

2

1 3

Page 26: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 27: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• Terceiro caso:

AVL

1

3

2

1

2

3

2

1 3

Page 28: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 29: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• Quarto caso:

AVL

1

3

2

2

3

1

2

1 3

Page 30: Á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

Page 31: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 32: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 33: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

Reconstrução da Mensagem

Como reconstruir a mensagem corretamente? Descartar os pacotes repetidos Ordenar os pacotes

Como implementar tal algoritmo? Utilizando Árvores Binárias

Page 34: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 35: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 36: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 37: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 38: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 39: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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!

Page 40: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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:

Page 41: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 42: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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

Page 43: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

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.

Page 44: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

• 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

Page 45: Árvore Binária & AVL Equipe: Felipe Pontes Gustavo Márcio Márcio de Medeiros.

Dúvidas