53
Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo http://www.toffolo.com.br BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado por Reinaldo Fortes para o curso de 2014-01 Arquivo original: 22._arvores_(parte_2)

Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

Embed Size (px)

Citation preview

Page 1: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

Árvores de Pesquisa (Parte II)

Prof. Túlio Toffolohttp://www.toffolo.com.br

BCC202 – Aula 24

Algoritmos 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) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

PROGRAMAÇÃODE TRIPULAÇÕESÁRVORE AVL

Page 8: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

Á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

* Os números próximos aos nós são suas alturas.

Page 9: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

TAD-Árvore AVL Estrutura de dados:

typedef long TipoChave; typedef struct { TipoChave Chave; /* outros componentes */} TItem;

typedef struct No { TItem item; struct No *pEsq, *pDir;} TNo;

typedef TNo *TArvoreAVL;

Page 11: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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 12: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 13: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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 14: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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 15: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

AVL

• Primeiro caso: (rotação simples para a direita)

3

2

1

2

1 3

Page 16: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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 17: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• Segundo caso: (rotação simples para a esquerda)

AVL

1

2

3

2

1 3

Page 18: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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 19: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• Terceiro caso: (rotação dupla para a direita)

AVL

1

3

2

2

1 3

3

2

1

Page 20: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• 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 21: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

• Quarto caso: (rotação dupla para a esquerda)

AVL

1

3

2

1

2

3

2

1 3

Page 22: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

Rotações Simples

T0T1

TT3 T0 T1 T2

T3

Rotação Simples(esquerda)

2

T3T2

T1

T0 T3T2T1

T0

Rotação Simples(direita)

Page 23: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 24: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 25: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 26: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 27: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 28: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 29: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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)

(os outros dois casos são simétricos)

Page 30: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 31: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

Inserçãoint Insere(TNo** ppRaiz, Titem * x){ if (*ppRaiz == NULL) { *ppRaiz = (TNo*)malloc(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 (Balanceamento(ppRaiz)) return 0; else return 1; } }

else if ( (*ppRaiz)->item.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 32: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 33: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 Balanceamento 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 34: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

Remoçãoint Remove (TNo** ppRaiz, TItem* pX){ if (*ppRaiz == NULL) return 0; else if ( (*ppRaiz)->item.chave == pX->chave) { *pX = (*ppRaiz)->item; Antecessor(ppRaiz, &((*ppRaiz)->pEsq)); /* registro mais à direita na subárvore esquerda */ Balanceamento(ppRaiz); return 1; } else if ( (*ppRaiz)->item.chave > pX->chave ) { if (Remove((*ppRaiz)->pEsq, pX)) { Balanceamento(ppRaiz); return 1; } else return 0; } else { if (Remove((*ppRaiz)->pDir, pX)) { Balanceamento(ppRaiz); return 1; } else return 0; }}

Page 35: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

PROGRAMAÇÃODE TRIPULAÇÕES

ÁRVORE AVL

ANÁLISE

Page 36: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 37: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 38: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

PROGRAMAÇÃODE TRIPULAÇÕES

ÁRVORE BINÁRIA DE PESQUISA

APLICAÇÕES

Page 39: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 40: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 41: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 42: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 43: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 44: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 45: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 46: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 47: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 48: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 49: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 50: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 51: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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 52: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

Perguntas?

Page 53: Árvores de Pesquisa (Parte II) Prof. Túlio Toffolo  BCC202 – Aula 24 Algoritmos e Estruturas de Dados I 2014-01 – Aula 20 Adaptado

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