Árvores binárias de busca 2 -...

32
1 Árvores Binárias de Busca 2 Ivandré Paraboni

Upload: lyque

Post on 13-Dec-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

1

Árvores Binárias de Busca 2

Ivandré Paraboni

Page 2: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

2/9

Custo de busca bem-sucedida

� Comprimento do caminho interno (CI): número total de comparações efetuadas para localizar cada chave da árvore. m

f x

b t

o

Número de comparações necessárias = nível k do nó

1

22

3 3

4

CI = 1+2+2+3+3+4 = 15

Page 3: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

3/9

Custo de busca fracassada

� Igualmente importante é o comprimento do caminho externo (CE), que é número de comparações necessárias para estabelecer que uma chave não existe m

f x

b t

o

Número de comparações necessárias: nível k-1

33

44

3

22

Page 4: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

4/9

Custo de busca fracassada� Exemplo:

m

f x

b t

o

Número de comparações necessárias: nível k-1

33

44

3

22

CE = 2+2+3+3+3+4+4 = 21

Page 5: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

5/9

Caminho interno e externo

� Os comprimentos de caminho interno (CI) e externo (CE) são indicativos da qualidade da árvore para o problema de busca

� Número médio de comparações necessárias� para sucesso: CI / n� para fracasso: CE / n + 1

� A árvore completa minimiza CI e CT� CI e CE não são independentes: CE = CI + n

Page 6: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

6/9

Freqüência de acesso diferenciado

� A árvore completa tem desempenho ótimo se as freqüências de acesso aos nós são idênticas

� Na prática, porém, a freqüência de acesso pode ser desigual

Page 7: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

7/9

Comprimento de caminho externo ponderado� É a soma dos caminhos externos associados

às suas probabilidades

23

47

9

35

33

44

3

22

Ex.: (5*2)+(3*2)+(3*3)+(2*3)+(9*3)+(7*4)+(4*4)=102

Page 8: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

8/9

Árvore de caminho externo ponderado mínimo� Algoritmo de Huffman – entrada:

� Seja uma lista de n pesos p1...pn fornecidos;� Seja uma lista L de árvores binárias expandidas;� Cada nó possui três campos: esq, dir e peso.� Inicialmente, todas árvores em L possuem

apenas um nó, o qual é externo e possui peso pi.� Exemplo (n=6): p1=2, p2=3, p3=5, p4=7, p5=9,

p6=13

L=

2 3 5 7 9 13

Page 9: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

9/9

Árvore de caminho externo ponderado mínimo� A função menor(L) retorna a árvore de

menor peso em L� O peso de uma árvore de altura h > 1 é a

soma dos pesos de suas sub-árvores esquerda e direita

2 3

5

L=

2 3 5 7 9 13

Page 10: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

10/9

Algoritmo de Huffman

Árvore i = 1:

L=

2 3 5 7 9 13

Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

Page 11: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

11/9

Algoritmo de Huffman

2

Árvore i=1:

L=

3 5 7 9 13

Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

Page 12: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

12/9

Algoritmo de Huffman

2 3

L=

5 7 9 13

Árvore i=1: 5Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

Page 13: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

13/9

Algoritmo de Huffman

2 3

L=

5 7 9 13

5

Árvore i=2:Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

Page 14: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

14/9

Algoritmo de Huffman

2 3

L=

5 7 9 13

5

Árvore i=2:Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

Page 15: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

15/9

Algoritmo de Huffman

2 3

5

Árvore i=2:Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

L=

7 9 13

5

10

Page 16: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

16/9

Algoritmo de Huffman

2 3

5

Árvore i=3:

Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

L=

7 9 13

5

10

Page 17: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

17/9

Algoritmo de Huffman

2 3

5

Árvore i=3:

Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

L=

9 13

5

10

7

Page 18: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

18/9

Algoritmo de Huffman

2 3

5

Árvore i=3:

Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

L=

13

5

10

7 9

16

Page 19: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

19/9

Algoritmo de Huffman

2 3

5

Árvore i=4:Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

L=

13

5

10

7 9

16

Page 20: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

20/9

Algoritmo de Huffman

2 3

5

Árvore i=4:Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

L=

13

5

10

7 9

16

Page 21: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

21/9

Algoritmo de Huffman

2 3

5

Árvore i=4:Huffman(L, n)

for (i=1;i<n;i++){

nova.esq�menor(L);nova.dir�menor(L);peso�peso(esq)+peso(dir);Insere(L,nova);

}

L=

5

10

7 9

16

13

23

Page 22: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

22/9

Algoritmo de Huffman

2 3

5 5

10

7 9

16

13

23L=

Árvore i=5:

39

CE ponderado:(2*4)+(3*4)+(5*3)+(13*2)+(7*2)+(9*2) = 93Melhor árvore completa = 95

Page 23: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Código de Huffman

� Algoritmo para a compressão de arquivos, principalmente arquivos textos

� Atribui códigos menores para símbolos mais frequentes e códigos maiores para símbolos menos frequentes

� Código é um conjunto de bits

Page 24: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Código de Huffman

� Representação dos dados é feita com códigos de tamanho variável

Código ASCII

A=01000001

B=01000010.

.

.

a=01100001

b=01100010

Código de Huffman

A=? (0)

B=? (110).

.

.

a=? (1111110)

b=? (11111111110)

Page 25: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Exemplo

� Supondo A e C mais frequentes que C e D no conjunto de valores possíveis

Símbolo

A

B

C

D

Código

0

110

10

111

ABACDA= 0 110 0 10 111 0

A B A C D A

Page 26: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Requisito

� O código de um símbolo não pode ser prefixo de um outro código� Se isso acontece, tem-se ambiguidade na

decodificação

� Ex: ACBA = 01010� Os dois bits em vermelhoé A e C ou B?� Veja que o código de A é prefixo do código de B

Símbolo

A

B

C

Huffman

0

01

1

Page 27: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Problema

� Dada uma tabela de frequências como determinar o melhor conjunto de códigos, ou seja, o conjunto que comprimirá mais os símbolos?

� Huffman desenvolveu um algoritmo para isso e mostrou que o conjunto de símbolos obtidos é o melhor para conjuntos de dados que têm a frequência de seus símbolos igual a tabela de frequência usada

Page 28: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Informações de frequência

� Algoritmo de Huffman produz tabela de códigos baseada em informações de frequência

� Dependência do tipo de dado primário

Page 29: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

O algoritmo em si

� Dado: Tabela de freqüências dos N símbolos de um alfabeto

� Objetivo: Atribuir códigos aos símbolos de modo que os mais freqüentes tenham códigos menores (menos bits)

Page 30: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

O processo de compressão

FdjoiasdjfoidsjfoisofnsdoSdjfoisdjfoisdfoisdfoid

OidsfoisdnfosdfSdoifsjfsdfskodnfsdknf

A-0.2B-0.1a-0.1

.

.

.

A-0B-10a-110

.

.

.

Huffman

Arquivocomprimido

Page 31: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Idéia básica

� Construir uma árvore binária tal que � A) suas folhas sejam os N símbolos do alfabeto� B)cada ramo da árvore seja um valor 1 (esquerda) ou

0 (direita)� Isso é uma convenção, o contrário também funciona

� O código de um símbolo será a seqüência de bitsdos ramos da raiz até sua posição na árvore

Page 32: Árvores Binárias de Busca 2 - wiki.icmc.usp.brwiki.icmc.usp.br/images/8/82/ArvoresBináriasBusca2.pdf · A) suas folhas sejam os N símbolos do alfabeto B)cada ramo da árvore seja

Exemplo

Símbolo

A

B

C

D

Código

0

110

10

111