6 3 8 4 v z pesquisa em memória primária – Árvores avl david menotti algoritmos e estruturas de...
TRANSCRIPT
![Page 1: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/1.jpg)
6
3 8
4
v
z
Pesquisa em Memória Primária –
Árvores AVLDavid Menotti
Algoritmos e Estruturas de Dados I
DECOM – UFOP
![Page 2: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/2.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Á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
88
44
17 78
32 50
48 62
2
4
1
1
2
3
1
1
Exemplo: números próximo dos nós são suas alturas.
![Page 3: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/3.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 4: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/4.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 5: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/5.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 6: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/6.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/7.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 8: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/8.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
TAD-Árvore AVL Estrutura de dados:
typedef long TipoChave; typedef struct Registro { TipoChave Chave; /* outros componentes */} Registro;
typedef struct No * Apontador;typedef Apontador TipoDicionario;
typedef Struct No { Registro Reg; Apontador pEsq, pDir;} No;
![Page 9: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/9.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 (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 10: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/10.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
FB e Alturaint 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 11: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/11.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 12: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/12.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 13: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/13.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
AVL
• Primeiro caso: (rotação simples para a direita)
3
2
1
2
1 3
![Page 14: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/14.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 15: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/15.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• Segundo caso: (rotação simples para a esquerda)
AVL
1
2
3
2
1 3
![Page 16: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/16.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 17: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/17.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• Terceiro caso: (rotação dupla para a direita)
AVL
1
3
2
2
1 3
3
2
1
![Page 18: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/18.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• 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 19: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/19.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
• Quarto caso: (rotação dupla para a esquerda)
AVL
1
3
2
1
2
3
2
1 3
![Page 20: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/20.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Rotações Simples
T0T1
TT3
c = xb = y
a = z
T0 T1 T2
T3
c = xb = y
a = zRotação Simples
2
T3T2
T1
T0
a = xb = y
c = z
T3T2T1
T0
a = xb = y
c = z
Rotação Simples
![Page 21: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/21.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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;}
![Page 22: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/22.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Rotações Duplas
Rotação Duplac = z
b = xa = y
T0T2
T1
T3 T0
T2T3 T1
c = zb = x
a = y
T1
Rotação Duplaa = z
b = xc = y
T0T2 T3 T0
T2T3T1
a = zb = x
c = y
![Page 23: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/23.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Rotações Duplas
int 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;}
![Page 24: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/24.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Balanceamento
int Balanceamento(TNo** ppRaiz)
{
int fb = FB(*ppRaiz);
if ( fb > 1)
return BalancaEsquerda(ppRaiz);
else if (fb < -1 )
return BalancaDireita(ppRaiz);
else
return 0;
}
![Page 25: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/25.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Inserção em uma Árvore AVL
Inserção como em uma árvore binária de pesquisa Sempre feita expandindo um nó externo. Exemplo:
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 26: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/26.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 T3
caso 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)
(outros dois casos são simétricos)
![Page 27: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/27.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Exemplo de inserção (cont.)
88
44
17 78
32 50
48 62
2
5
1
1
3
4
2
1
54
1
T0T2
T3
x
y
z
2
3
4
5
67
1
88
44
17
7832 50
48
622
4
1
1
2 2
3
154
1
T0 T1
T2
T3
x
y z
desbalanceado
balanceado
1
2
3
4
5
6
7
T1
![Page 28: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/28.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Inserção
int Insere(TNo** ppRaiz,Registro* x){ if (*ppRaiz == NULL) { *ppRaiz = (TNo*)malloc(sizeof(TNo)); (*ppRaiz)->Reg = *x; (*ppRaiz)->pEsq = NULL; (*ppRaiz)->pDir = NULL; return 1; } else if ( (*ppRaiz)->Reg.chave > x->chave ) { if ( Insere(&(*ppRaiz)->pEsq,x) ) { if (Balanceamento(ppRaiz)) return 0; else return 1; } }
else if ( (*ppRaiz)->Reg.chave
< x->chave )
{
if ( Insere(&(*ppRaiz)->pDir,x) )
{
if (Balanceamento(ppRaiz))
return 0;
else
return 1;
}
else
return 0;
}
else
return 0; /* valor jah presente */
}
![Page 29: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/29.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Implementação de Inserção Cálculo de fatores de balanceamento
Custo: O(log n) ?? Como melhorar?
Cada nó: Fator de balanceamento Profundidade x Altura
Problema: atualizar dados durante rotações
![Page 30: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/30.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Remoção em uma árvore AVL
Remoção começa como em uma árvore binária de busca pode causar desbalanceamento
Exemplo:
44
17
7832 50
8848
62
54
44
17
7850
8848
62
54
Antes da remoção de 32 Depois da remoção
![Page 31: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/31.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 restructure(x) 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 32: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/32.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Remoçãoint Remove (TNo** ppRaiz,Registro* pX){ if (*ppRaiz == NULL) return 0; else if ( (*ppRaiz)->Reg.chave = pX->chave) { *pX = (*ppRaiz)->Reg; Antecessor(ppRaiz,&((*ppRaiz)->pEsq)); Balanceamento(ppRaiz); return 1; } else if ( (*ppRaiz)->Reg.chave > pX->chave ) { if (Remove((*ppRaiz)->pEsq,pX)) { Balanceamento(ppRaiz); return 1;} else return 0; } else /* código para sub-árvore direita */}
![Page 33: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/33.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 34: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/34.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
Verificação Verifica se árvore é AVL
int 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 35: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/35.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 36: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/36.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 37: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/37.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 38: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/38.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 39: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/39.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 40: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/40.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 41: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/41.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 42: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/42.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 43: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/43.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 44: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/44.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 45: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/45.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 46: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/46.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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 47: 6 3 8 4 v z Pesquisa em Memória Primária – Árvores AVL David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP](https://reader036.vdocuments.mx/reader036/viewer/2022081602/552fc10b497959413d8c1ffc/html5/thumbnails/47.jpg)
© David Menotti Algoritmos e Estrutura de Dados I
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.