Árvores digitais - início - instituto de computação -...

80
Árvores Digitais Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturas de Dados e seus Algoritmos, 3a. ed. LTC. Capítulo11 1

Upload: doandang

Post on 24-Dec-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores Digitais

Fonte de consulta: Szwarcfiter, J.; Markezon, L. Estruturasde Dados e seus Algoritmos, 3a. ed. LTC. Capítulo11

1

Page 2: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Premissas do que vimos até aqui} As chaves têm tamanho fixo} As chaves cabem em uma palavra do computador (para

propiciar manipulação eficiente em memória)

2

Page 3: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Premissas do que vimos até aqui} As chaves têm tamanho fixo} As chaves cabem em uma palavra de computador (para

propiciar manipulação eficiente em memória)

} Na prática, isso nem sempre acontece} Exemplo: aplicação que armazena um texto e permite busca

por frases nesse texto} Chaves: frases

} Tamanho variável} Não cabem em uma palavra de computador

3

Page 4: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Premissas do que vimos até aqui} As chaves têm tamanho fixo} As chaves cabem em uma palavra de computador (para

propiciar manipulação eficiente em memória)

} Na prática, isso nem sempre acontece} Exemplo: aplicação que armazena um texto e permite busca

por frases nesse texto} Chaves: frases

} Tamanho variável} Não cabem em uma palavra de computador

4

Soluções que vimos até agora não são aplicáveis para indexar esse tipo de chave

Page 5: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Solução} Uso de Busca Digital

} Árvore Digital} Árvore Digital Binária} Árvore Patrícia (implementação eficiente de Árvore Digital

Binária)

5

Page 6: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Busca Digital} Árvore Digital} Árvore Digital Binária} Árvore Patrícia (implementação eficiente de Árvore

Digital Binária)

6

Page 7: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores Digitais} Também chamadas de Tries} Chave não é indivisível

} Considera-se que uma chave é uma sequência de dígitos que podem ser usados na indexação

} Ao invés de comparar a chave inteira, a comparação é feita dígito a dígito

7

Page 8: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo

8

b

m a

d

n

p

Chaves Indexadas:madribarcelonamamanausparisportoa

o

a r c e o n al

r i

a u s

i sr

t or

Page 9: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo

9

Nós azuis apontam para o registro que contém aquela chave

Nós brancos apontam para NULL

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

t or

Page 10: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: Buscar a chave madri

10

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

t or

Page 11: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: Buscar a chave madri

11

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

t or

Page 12: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: Buscar a chave bahia

12

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

t or

Page 13: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: Buscar a chave bahia

13

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

t or

Page 14: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: Buscar a chave bahia

14

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr Busca é mal sucedida pois o nó marcado em vermelho não tem uma aresta rotulada com ”h”

t or

Page 15: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Definições} S = {s1, .., sn} é o conjunto de chaves a serem indexadas} Cada chave si é formada por uma sequência de elementos

dj denominados dígitos} Supõe-se que existe, em S, um total de m dígitos distintos,

que compõe o alfabeto de S} Os dígitos do alfabeto admitem ordenação, tal que d1 < ...

< dm

} Os p primeiros dígitos de uma chave compõem oprefixo de tamanho p da chave

15

Page 16: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Definições} Uma árvore digital para S é uma árvore m-ária T, não

vazia, tal que:1. Se um nó v é o j-ésimo filho de seu pai, então v corresponde

ao dígito dj do alfabeto de S (isso exige que a posição dos nós que não existem seja preservada, para o caso de precisarem ser inseridos no futuro)

2. Para cada nó v, a sequencia de dígitos definida pelo caminho desde a raiz de T até v corresponde a um prefixo de alguma chave de S

} A raiz da árvore sempre existe e não corresponde a nenhum dígito do alfabeto

16

Page 17: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

No exemplo anterior} S = {madri, barcelona, ma, manaus, paris, porto}} Alfabeto de S = {a, b, c, d, e, i, l, m, n, o, p, r, s, t, u}

17

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

t or

Page 18: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo que mostra espaço preservado

18

e r s

r s

r se e

s s

S = {erre, erres, es, esse, esses, se, ser, serre, re, res, rese, reses, serres, seres}Alfabeto de S = {e, r, s} (árvore ternária)

e

s

e

s

e

r

r

e

s

e

s

Page 19: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Representação da árvore} Alfabeto de tamanho m (árvore m-ária)} Cada nó v apontado por pt (pt ≠ λ) possui m filhos

ordenados apontados por pt­.pont[1], ..., pt­.pont[m], respectivamente

} Se algum i-ésimo filho desse nó estiver ausente, então pt­.pont[i] = λ

} Se v for nó terminal de alguma chave, então v.info = terminal. Caso contrário, v.info = não terminal

19

Page 20: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Procedimento de Busca} A chave x a ser procurada possui k dígitos,

denotados por d[1], ..., d[k]} O parâmetro pt indica o nó corrente da árvore} Os parâmetros l e a indicam o resultado da

busca} l = tamanho do maior prefixo de x que coincide com

um prefixo de alguma chave. Esse prefixo é obtido percorrendo-se a árvore desde sua raiz até o nó wapontado por pt ao final do processo

} Se a = 1, chave foi encontrada no nó w, caso contrário, a = 0

20

Page 21: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Procedimento Busca Digital/* Procedimento assume que a árvore é

representada conforme slides anterioresA chamada externa é:

buscadig(x, pt, l, a), com pt = ptraiz, l = 0, a = 0; x é a chave a ser buscada

*/procedimento buscadig(x, pt, l, a)

se l < k então /* k é o número de dígitos da chave x */seja j a posição de d(l+1) na ordenação do alfabetose pt­.pont[j] ≠ λ então

pt := pt­.pont[j];l := l + 1buscadig(x, pt, l, a)

senão se pt­.info = terminal então a := 1

21 Fonte: Algoritmo 11.1, página 261

Page 22: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave bahia

22

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

t or

Page 23: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave bahia

23

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

l = 1a = 0

pt

t or

Page 24: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave bahia

24

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

l = 1a = 0

pt

l = 2a = 0

pt

t or

Page 25: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave bahia

25

b

m a

d

n

p a

o

a r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

l = 1a = 0

pt

l = 2a = 0

pt

t or

Nesse ponto não existe aresta rotulada com ”h”.Busca é encerrada, com a = 0

Page 26: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Inserção} Para incluir uma nova chave x = d(1), ..., d(k) numa

árvore digital m-ária, utiliza-se o procedimento de busca

} Se x foi localizado, inclusão inválida} Caso contrário, a busca determina o nó w apontado

por pt, tal que o caminho da raiz até w corresponde ao maior prefixo de chave que coincide com x. O tamanho l desse prefixo também é conhecido

} Seja j a posição de d(l+1) na ordenação de dígitos. Um novo nó é incluído na árvore de modo a se constituir o j-ésimo filho de w

} O processo se repete até que todos os dígitos de xtenham sido esgotados

26

Page 27: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserir chave bahia

27

b

m a

d

n

p a

o

wa r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

l = 1a = 0

pt

l = 2a = 0

pt

t or

Page 28: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserir chave bahia

28

b

m a

d

n

p a

o

wa r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

l = 1a = 0

pt

l = 2a = 0

pt

h

t or

Page 29: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserir chave bahia

29

b

m a

d

n

p a

o

wa r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

l = 1a = 0

pt

l = 2a = 0

pt

h i

t or

Page 30: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserir chave bahia

30

b

m a

d

n

p a

o

wa r c e o n al

r i

a u s

i sr

l = 0a = 0

pt

l = 1a = 0

pt

l = 2a = 0

pt

h i a

t or

Page 31: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Procedimento Insereprocedimento insere(x, ptraiz)

pt := ptraizl := 0a := 0buscadig(x, pt, l, a)se a = 0 então

para h = l + 1, ..., k façaseja j a posição de d(h) na ordenação do alfabetoocupar(ptz)para i = 1, ..., m faça ptz­.pont[i] := λpt­.pont[j] := ptzptz.info := não terminalpt := ptz

pt­.info = terminal senão “inclusão inválida”

31 Fonte: Algoritmo 11.2, página 262

Page 32: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Uso de Árvores Digitais} Bastante utilizadas para implementar verificação

ortográfica e dicionários

32

Page 33: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Considerações sobre Árvores Digitais} Consomem muito espaço em memória

} Para uma árvore com n chaves de tamanho máximo t com prefixos distintos, o espaço necessário seria O(n m t)

} Árvores com muitos zigue-zagues quase sempre são ineficientes (um zigue-zague de uma árvore T é uma subárvore parcial cujos nós possuem apenas um único filho em T)

33

Page 34: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Busca Digital} Árvore Digital} Árvore Digital Binária} Árvore Patrícia (implementação eficiente de Árvore

Digital Binária)

34

Page 35: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvore Digital Binária} É simplesmente o caso binário de uma árvore digital,

onde m = 2} Alfabeto é representado por {0,1}

} Vantagens: } Número de ponteiros NULL é menor (ocupa menos espaço)} Chaves podem ser facilmente convertidas em binário

} Desvantagem:} Zigue-zagues ainda podem ocorrer

35

Page 36: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvore Binária de Prefixos} É uma Árvore Digital Binária onde nenhuma chave é

prefixo de outra} Propriedade interessante: todas as chaves estão nas folhas

36

Page 37: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Contra Exemplo

37 Fonte: Figura 11.2, pág. 254

Não é Árvore de Prefixo, pois o nó ** é prefixo do nó *

Page 38: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo

38

É Árvore de Prefixo, pois nenhuma chave é prefixo de outra. Todas as chaves estão nas folhas.

Page 39: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Uso de árvores de Prefixo} São muito usadas para aplicações de codificação e

compressão} Nas próximas aulas aprenderemos a usar esse tipo de

árvore para gerar códigos únicos onde um não é prefixo do outro (propriedade necessária para viabilizar a decodificação)

39

Page 40: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Busca Digital} Árvore Digital} Árvore Digital Binária} Árvore Patrícia (implementação eficiente de Árvore

Digital Binária)

40

Page 41: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvore Patrícia} Construída a partir da árvore binária de

prefixos

} S = {s1, ..., sn} são as chaves indexadas pela árvore

} Nenhuma chave si é prefixo de outra

41

Page 42: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Motivação: Busca por s4 (11100) em Árvore Digital Binária} A certo ponto do caminho, a busca entra em

um zigue-zague (v1, v2)} Em cada nó do zigue-zague, há sempre uma

única opção de caminho} Ideia:

} Ao chegar em v1

pular para o quinto dígito} É preciso adicionar essa informação em v1

42

Page 43: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvore Patrícia} Cada vértice v possui um rótulo r(v) que será

usado para “cortar caminho”

43

Page 44: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Construção de Árvore Patrícia} Seja H a Árvore de Prefixos original} Construir a Árvore Patrícia T da seguinte forma:

} Para cada zigue-zague v1, ..., vk em H:} Se vk é um nó folha referente à chave si, compactar v1, ...,

vk em v1 e definir r(v1) = si. } Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w

em v1 e definir r(v1) = nivelH(v1) + k} Se algum vértice v de T permaneceu sem rótulo,

definir rótulo r(v) = nívelH(v)

44

Page 45: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

45

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 46: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

46

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 47: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

47

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

0 1

0

s2 s3

0 1

1

0

s4 s5

0 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 48: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

48

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

0 1

0

s2 s3

0 1

1

0

s4 s5

0 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 49: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

49

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

0 1

w

0

s2 s3

0 1

1

0

s4 s5

0 1

nível v1 = 3k = 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 50: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

50

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

4

0 1

s2s3

0 1 1

0

s4 s5

0 1

nível v1 = 3k = 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 51: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

51

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

0 1

1

0

s4 s5

0 1

4

s2 s3

0 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 52: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

52

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

0 1

1

w

0

s4 s5

0 1

nível v1 = 3k = 2

4

s2 s3

0 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 53: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

53

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

s1

0 1

5

0 1

s4 s5

0 1

nível v1 = 3k = 2

4

s2 s3

0 1

Para cada zigue-zague v1, ..., vk em H:Se vk é um nó folha referente à chave si, compactar v1, ..., vk em v1 e definir r(v1) = si. Caso contrário, vk possui o filho w. Compactar v1, ..., vk, w em v1 e definir r(v1) = nivelH(v1) + k

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 54: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Árvores H e T

54

Árvore de Prefixos H Árvore Patrícia T correspondente

s1

0 1

0 1

0

s2

0 1

s3

0

1

0

s4 s5

0 1

1

s1 2

0 1

5

0 1

s4 s5

0 1

Se algum vértice v de T permaneceu sem rótulo, definir rótulo r(v) = nívelH(v)

4

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 55: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Propriedade dos Rótulos da Árvore Patrícia} Em uma busca por chave x, o rótulo de um nó

v, não folha, é o índice do dígito de x relativo a v

55

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 56: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave 11101} 11101

56

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 57: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave 11101} 11101

57

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 58: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave 11101} 11101

58

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 59: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: buscar chave 11101} 11101

59

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 60: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Procedimento Busca/* procedimento retorna a = 1 se chegar a uma folha

nesse caso ainda é necessário comparar x com o rótulo do nó apontado por pt para concluir que a chave x foiencontrada

*/procedimento buscapat(x, pt, a)

se pt­.esq = λentão a := 1senão se k < pt­.r então a := 2

senão se d[pt­.r] = 0 então pt := pt­.esqbuscapat(x, pt, a)

senão pt := pt­.dirbuscapat(x, pt, a)

60 Fonte: Algoritmo 11.3, página 267

Page 61: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Inserção numa Árvore Patrícia T} Efetuar busca da chave x em T (x tem comprimento

k)} A busca termina num nó y (interno ou folha) de T} Selecionar y’, um dos nós folha descendentes de y.

Seja si a chave contida em y’ (Se y é folha, y’ = y)} Seja l o comprimento do maior prefixo comum de x

e si (ou seja, x e si coincidem exatamente até o l-ésimo dígito)

} Seja c o comprimento de si

} Se l = k, inserção inválida (x é prefixo de si)} Se l = c, inserção inválida (si é prefixo de x)

61

Page 62: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Se inserção for válida} Determinar nó z de T onde será feita a inclusão} Se y’ é o único nó em T, então z = y’} Senão, seja z’ o pai de y’, e A o caminho da raiz de

T até z’} Se r(z’) ≤ l + 1 então z = y’} Quando r(z’) > l + 1, z será o nó de A mais próximo

da raiz de T, tal que r(z) > l + 1} Criar dois nós novos, v e w, com rótulos r(v) = l +

1, r(w) = x. O pai de v será o antigo pai de z. Os filhos de v serão w e z, sendo w o filho esquerdo se d(l + 1) = 0 ou o direito quando d(l + 1) = 1

} Se z era a raiz de T, a nova raiz passa a ser v.

62

Page 63: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção inválidaInserir chave 10

63

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 64: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção inválidaInserir chave 10

64

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

Buscar 10

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 65: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção inválidaInserir chave 10

65

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

Buscar 10

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 66: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção inválidaInserir chave 10

66

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

Buscar 10A busca termina num nó y (interno ou folha) de TSelecionar y’, um dos nós folha descendentes de y. Seja si a chave contida em y’ (Se y é folha, y’ = y)

y

y'

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 67: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção inválidaInserir chave 10

67

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

Seja l o comprimento do maior prefixo comum de x e si(ou seja, x e si coincidem exatamente até o l-ésimodígito)Seja c o comprimento de siSe l = k, inserção inválida (x é prefixo de si)Se l = c, inserção inválida (si é prefixo de x)

y

y'

l = 2k = 2c = 4

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 68: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção inválidaInserir chave 10

68

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1y

y'

l = 2k = 2c = 4

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Seja l o comprimento do maior prefixo comum de x e si(ou seja, x e si coincidem exatamente até o l-ésimodígito)Seja c o comprimento de siSe l = k, inserção inválida (x é prefixo de si)Se l = c, inserção inválida (si é prefixo de x)

Page 69: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

69

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 70: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

70

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

Buscar 111101

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 71: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

71

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

Buscar 111101

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 72: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

72

Buscar 111101A busca termina num nó y (interno ou folha) de TSelecionar y’, um dos nós folha descendentes de y. Seja si a chave contida em y’ (Se y é folha, y’ = y)

y = y'

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 73: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

73

l = 3k = 6c = 5

y = y'

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Seja l o comprimento do maior prefixo comum de x e si(ou seja, x e si coincidem exatamente até o l-ésimodígito)Seja c o comprimento de siSe l = k, inserção inválida (x é prefixo de si)Se l = c, inserção inválida (si é prefixo de x)

Page 74: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

74

Determinar nó z de T onde será feita a inclusãoSe y’ é o único nó em T, então z = y’Senão, seja z’ o pai de y’, e A o caminho da raiz de Taté z’Se r(z’) ≤ l + 1 então z = y’Quando r(z’) > l + 1, z será o nó de A mais próximo da raiz de T, tal que r(z) > l + 1

l = 3k = 6c = 5

y = y'

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

z'

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101

Page 75: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

75

Criar dois nós novos, v e w, com rótulos r(v) = l + 1, r(w) = x.

l = 3k = 6c = 5

y = y'

1

s1 2

0 1

5

0 1

s4 s5

0 14

s2 s3

0 1

z

4

vs6

w

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101s6 = 111101

Page 76: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

76

O pai de v será o antigo pai de z.

l = 3k = 6c = 5

1

s1 2

0 1

5

0 1

s4 s5

0 1

4

s2 s3

0 1 z4

v

s6

w

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101s6 = 111101

Page 77: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exemplo: inserção válidaInserir chave 111101

77

Os filhos de v serão w e z, sendo w o filho esquerdo se d(l + 1) = 0 ou o direito quando d(l + 1) = 1Se z era a raiz de T, a nova raiz passa a ser v.

l = 3k = 6c = 5

1

s1 2

0 1

5

0 1

s4 s5

0 1

4

s2 s3

0 1z

4

v

s6

w0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101s6 = 111101

Page 78: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exercícios1. Desenhar a árvore digital correspondente ao conjunto de chaves abaixo AR ASA RASARA ASAS RASAARAR ASSA RASASARARA ASSAS SAARAS ASSAR SAARAARRASA ASSARA SARAARRASAR RA SARARARRASARA RARA SARARASAS RARAS SARAS

78

Page 79: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exercícios2. Simular o algoritmo de busca das chaves 11100, 111, 111101, 1010 na árvore Patrícia abaixo

79

1

s1 2

0 1

5

0 1

s4 s5

0 1

4

s2 s3

0 1 4

s6

0 1

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101s6 = 111101

Page 80: Árvores Digitais - Início - Instituto de Computação - …vanessa/material/ed2/08-ArvoresDigitais.pdfPremissas do que vimos até aqui}As chaves têm tamanho fixo}As chaves cabem

Exercícios3. Inserir as chaves 111, 101, 111110 na árvore Patrícia abaixo

80

s1 = 0s2 = 1000s3 = 10010s4 = 11100s5 = 11101s6 = 111101

1

s1 2

0 1

5

0 1

s4 s5

0 1

4

s2 s3

0 1 4

s6

0 1