Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL...
-
Upload
phungkhanh -
Category
Documents
-
view
217 -
download
0
Transcript of Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL...
![Page 1: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/1.jpg)
Árvores de Pesquisa (Parte II)
Prof. Túlio Toffolohttp://www.toffolo.com.br
BCC202Algoritmos e Estruturas de Dados I
2014-01 – Aula 20Adaptado por Reinaldo Fortes para o curso de 2014-01Arquivo original: 22._arvores_(parte_2)
![Page 2: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/2.jpg)
Pesquisa em Memória Primária Introdução - Conceitos Básicos Pesquisa Sequencial Pesquisa Binária Árvores de Pesquisa
Árvores Binárias de Pesquisa Árvores AVL
Transformação de Chave (Hashing) Listas Encadeadas Endereçamento Aberto Hashing Perfeito
2
![Page 3: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/3.jpg)
Inserindo os nós 30, 20, 40, 10, 25, 35 e 50 nesta ordem, teremos:
Árvores Binárias de Pesquisa
30
20
10 25
40
35 50
![Page 4: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/4.jpg)
Inserindo os nós 10, 20, 30, 40 e 50 nesta ordem, teremos:
Árvores Binárias de Pesquisa
10
20
30
40
50
![Page 5: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/5.jpg)
• 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.
Árvores Binárias Balanceadas
![Page 6: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/6.jpg)
• 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 7: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/7.jpg)
PROGRAMAÇÃODE TRIPULAÇÕESÁRVORE AVL
![Page 8: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/8.jpg)
Árvore AVL
Árvore binária de busca tal que, para qualquer nó interno v, a diferença das alturas dos filhos de v é no máximo 1.
Árvores AVL são balanceadas
8 8
4 4
1 7 7 8
3 2 5 0
4 8 6 2
2
4
1
1
2
3
1
1
* Os números próximos aos nós são suas alturas.
![Page 9: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/9.jpg)
• Algoritmo de balanceamento de árvores binárias.
• A origem da denominação AVL vem dos seus dois criadores: Adel’son-Vel’skii e Landis.
• Ano de divulgação: 1962.
AVL
![Page 10: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/10.jpg)
• Algoritmo de balanceamento de árvores binárias.
• A origem da denominação AVL vem dos seus dois criadores: Adel’son-Vel’skii e Landis.
• Ano de divulgação: 1962.
AVL
![Page 11: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/11.jpg)
TAD-Árvore AVL Estrutura de dados:
typedef long TipoChave; typedef struct { TipoChave Chave; /* outros com ponentes */} TItem ;
typedef struct No { TItem item ; struct No *pEsq, *pDir;} TNo;
typedef TNo *TArvoreAVL;
![Page 12: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/12.jpg)
• Uma árvore binária balanceada é aquela na qual, para cada nó, as alturas de suas sub-árvores esquerda e direita se diferem de, no máximo, 1.
• Fator de balanceamento (FB) 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 de p) - altura(sub-árvore direita de p)
• Em uma árvore binária balanceada todos os FB de todos os nós estão no intervalo -1 ≤ FB ≤ 1
Árvores AVL
![Page 13: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/13.jpg)
FB e Altura
int FB (TNo* pRaiz) { if (pRaiz = = NULL) return 0; return Altura(pRaiz-> pEsq) - Altura(pRaiz-> pDir);}
int Altura(TNo* pRaiz) { int iEsq,iDir;
if (pRaiz = = NULL) return 0;
iEsq = Altura(pRaiz-> pEsq); iDir = Altura(pRaiz-> pDir);
if ( iEsq > iDir ) return iEsq + 1; else return iDir + 1;}
![Page 14: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/14.jpg)
• Inicialmente inserimos um novo nó na árvore normalmente.
• A inserção deste nó 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 15: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/15.jpg)
• Primeiro caso: (rotação simples para a direita):
– 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 16: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/16.jpg)
AVL
• Primeiro caso: (rotação simples para a direita)
3
2
1
2
1 3
![Page 17: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/17.jpg)
• Segundo caso: (rotação simples para a esquerda)
– 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 18: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/18.jpg)
• Segundo caso: (rotação simples para a esquerda)
AVL
1
2
3
2
1 3
![Page 19: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/19.jpg)
• Terceiro caso: (rotação dupla para a direita)
– 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 20: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/20.jpg)
• Terceiro caso: (rotação dupla para a direita)
AVL
1
3
2
2
1 3
3
2
1
![Page 21: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/21.jpg)
• Quarto caso: (rotação dupla para a esquerda)
– 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 22: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/22.jpg)
• Quarto caso: (rotação dupla para a esquerda)
AVL
1
3
2
1
2
3
2
1 3
![Page 23: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/23.jpg)
Rotações Simples
T0T1
TT3 T0 T1 T2
T3
Rotação Simples(esquerda)
2
T3T2
T1
T0 T3T2T1
T0
Rotação Simples(direita)
![Page 24: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/24.jpg)
Rotações Simplesvoid RSE(TNo** ppRaiz) { TNo *pAux; pAux = (*ppRaiz)-> pDir; (*ppRaiz)-> pDir = pAux-> pEsq; pAux-> pEsq = (*ppRaiz); (*ppRaiz) = pAux;}
void RSD(TNo** ppRaiz) { TNo *pAux; pAux = (*ppRaiz)-> pEsq; (*ppRaiz)-> pEsq = pAux-> pDir; pAux-> pDir = (*ppRaiz); (*ppRaiz) = pAux;}
T0 T1 TT3 T0 T1 T2
T3
2
T3T2T1T0 T3T2T1
T0
![Page 25: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/25.jpg)
Rotações Duplas
Rotação Dupla(direita)
c
ba
T0T2
T1
T3 T0
T2T3 T1
cb
a
T1
Rotação Dupla(esquerda)
a
bc
T0T2 T3 T0
T2T3T1
ab
c
![Page 26: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/26.jpg)
Rotações Duplasint BalancaEsquerda(TNo** ppRaiz) { int fbe = FB ( (*ppRaiz)-> pEsq ); if ( fbe > 0 ) { RSD(ppRaiz); return 1; } else if (fbe < 0 ) { /* Rotação Dupla Direita */ RSE( &((*ppRaiz)-> pEsq) ); RSD( ppRaiz ); /* &(*ppRaiz) */ return 1; } return 0;}
int BalancaDireita(TNo** ppRaiz) { int fbd = FB( (*ppRaiz)-> pDir); if ( fbd < 0 ) { RSE (ppRaiz); return 1; } else if (fbd > 0 ) { /* Rotação Dupla Esquerda */ RSD( &((*ppRaiz)-> pDir) ); RSE( ppRaiz ); /* &(*ppRaiz) */ return 1; } return 0;}
Rotação Dupla(esquerda)
a
bc
T0T2 T3 T0
T2T3T1
ab
c
![Page 27: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/27.jpg)
Rotações Duplasint BalancaEsquerda(TNo** ppRaiz) { int fbe = FB ( (*ppRaiz)-> pEsq ); if ( fbe > 0 ) { RSD(ppRaiz); return 1; } else if (fbe < 0 ) { /* Rotação Dupla Direita */ RSE( &((*ppRaiz)-> pEsq) ); RSD( ppRaiz ); /* &(*ppRaiz) */ return 1; } return 0;}
int BalancaDireita(TNo** ppRaiz) { int fbd = FB( (*ppRaiz)-> pDir); if ( fbd < 0 ) { RSE (ppRaiz); return 1; } else if (fbd > 0 ) { /* Rotação Dupla Esquerda */ RSD( &((*ppRaiz)-> pDir) ); RSE( ppRaiz ); /* &(*ppRaiz) */ return 1; } return 0;}
Rotação Dupla(direita)
c
ba
T0T2
T1
T3 T0
T2T3 T1
cb
a
T1
![Page 28: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/28.jpg)
Balanceamento
int Balanceam ento(TNo** ppRaiz) { int fb = FB(*ppRaiz); if ( fb > 1) return BalancaEsquerda(ppRaiz); else if (fb < -1 ) return BalancaDireita(ppRaiz); else return 0;}
![Page 29: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/29.jpg)
Inserção em uma Árvore AVL
Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo. Exemplo: Inserção do 54
44
17 78
32 50 88
48 62
54w
b=x
a=y
c=z
44
17 78
32 50 88
48 62
antes da inserção depois da inserção
![Page 30: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/30.jpg)
Reestruturação Trinodo
x, y, z (filho, pai e avô) renomeados como a,b,c (percurso interfixado)
rotações levam b para o topo
b=y
a=z
c=x
T0
T1
T2 T3
b=y
a=z c=x
T0 T1 T2 T3
c=y
b=x
a=z
T0
T1 T2
T3b=x
c=ya=z
T0 T1 T2 T3caso 1: rotação simplesà esquerda (em torno de a)
caso 2: rotação dupla à esquerda (rotação simples à direita seguida de rotação simples à esquerda)
(os outros dois casos são simétricos)
![Page 31: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/31.jpg)
Exemplo de inserção (cont.)
88
44
17
7832 50
48
622
4
1
1
2 2
3
154
1
T0 T1
T2
T3
x
y z
desbalanceado
balanceado
T1
88
44
17 78
32 50
48 62
2
5
1
1
3
4
2
1
54
1
T0T2
T3
x
y
z
![Page 32: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/32.jpg)
Inserçãoint Insere(TNo** ppRaiz, Titem * x){ if (*ppRaiz = = NULL) { *ppRaiz = (TNo*)m alloc(sizeof(TNo)); (*ppRaiz)-> item = *x; (*ppRaiz)-> pEsq = NULL; (*ppRaiz)-> pDir = NULL; return 1; } else if ( (*ppRaiz)-> item .chave > x-> chave ) { if ( Insere(&(*ppRaiz)-> pEsq,x) ) { if (Balanceam ento(ppRaiz)) return 0; else return 1; } }
else if ( (*ppRaiz)-> item .chave < x-> chave ) { if ( Insere(&(*ppRaiz)-> pDir,x) ) { if (Balanceam ento(ppRaiz)) return 0; else return 1; } else return 0; } else return 0; /* valor jah presente */}
![Page 33: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/33.jpg)
Remoção em uma árvore AVL
Remoção começa como em uma árvore binária de busca pode causar desbalanceamento
Exemplo: Remoção do 32
44
17
7832 50
8848
62
54
44
17
7850
8848
62
54
Antes da remoção Depois da remoção
![Page 34: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/34.jpg)
Rebalanceamento após uma remoção
Seja z o primeiro nó desbalanceado encontrado acima de w. Seja y o filho de z com maior altura, e x o filho de y com maior altura.
Executar a função Balanceam ento para rebalancear z. Pode ocorrer desbalanceamento de outro nó acima
continuar verificação de balanceamento até à raiz.
44
17
7850
8848
62
54
w
c=x
b=y
a=z
44
17
78
50 88
48
62
54
![Page 35: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/35.jpg)
Remoçãoint Rem ove (TNo** ppRaiz, TItem * pX){ if (*ppRaiz = = NULL) return 0; else if ( (*ppRaiz)-> item .chave = = pX-> chave) { *pX = (*ppRaiz)-> item ; Antecessor(ppRaiz, & ((*ppRaiz)-> pEsq)); /* registro m ais à direita na subárvore esquerda */ Balanceam ento(ppRaiz); return 1; } else if ( (*ppRaiz)-> item .chave > pX-> chave ) { if (Rem ove((*ppRaiz)-> pEsq, pX)) { Balanceam ento(ppRaiz); return 1; } else return 0; } else { if (Rem ove((*ppRaiz)-> pDir, pX)) { Balanceam ento(ppRaiz); return 1; } else return 0; }}
![Page 36: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/36.jpg)
PROGRAMAÇÃODE TRIPULAÇÕES
ÁRVORE AVL
ANÁLISE
![Page 37: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/37.jpg)
Complexidade de Tempopara árvores AVL
uma única reestruturação é O(1) usando uma árvore binária implementada com estrutura ligada
pesquisa é O(log n) altura de árvore é O(log n), não necesita reestruturação
inserir é O(log n) busca inicial é O(log n) reestruturação para manter balanceamento é O(log n)
remove é O(log n) busca inicial é O(log n) reestruturação para manter balanceamento é O(log n)
![Page 38: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/38.jpg)
Verifica se uma árvore é AVLint EhArvoreArvl(TNo* pRaiz)
{ int fb;
if (pRaiz = = NULL) return 1;
if (!EhArvoreArvl(pRaiz-> pEsq)) return 0;
if (!EhArvoreArvl(pRaiz-> pDir)) return 0;
fb = FB (pRaiz); if ( ( fb > 1 ) || ( fb < -1) ) return 0; else return 1;}
![Page 39: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/39.jpg)
PROGRAMAÇÃODE TRIPULAÇÕES
ÁRVORE BINÁRIA DE PESQUISA
APLICAÇÕES
![Page 40: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/40.jpg)
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 41: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/41.jpg)
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 42: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/42.jpg)
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 43: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/43.jpg)
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 44: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/44.jpg)
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 45: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/45.jpg)
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 46: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/46.jpg)
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 47: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/47.jpg)
Códigos e Caracteres
Caracteres são letras, números e símbolos Códigos são sequê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 48: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/48.jpg)
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 49: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/49.jpg)
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 50: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/50.jpg)
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 51: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/51.jpg)
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 52: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/52.jpg)
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 53: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/53.jpg)
Perguntas?
![Page 54: Árvores de Pesquisa (Parte II) - DECOM-UFOP 20 - Arvores... · Inserção em uma Árvore AVL Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo.](https://reader034.fdocument.pub/reader034/viewer/2022051803/5c07d1b609d3f29f288bb332/html5/thumbnails/54.jpg)
Exercício
Mostre (desenhe) uma árvore AVL após a inserção dos seguintes elementos, em ordem:10, 20, 5, 8, 12, 22, 23, 24, 11, 13, 18
Mostre como ficará a árvore acima após a remoção dos seguintes elementos, na ordem abaixo:22, 11, 5, 10