Você está na página 1de 67

Busca Digital

(Trie e rvore Patrcia)


Estrutura de Dados II
Jairo Francisco de Souza

Introduo
No problema de busca, suposto que existe um
conjunto de chaves S={s1, , sn} e um valor x
correspondente a uma chave que se deseja
localizar em S.
Nos mtodos vistos at agora, tentavam estruturar
S de alguma forma conveniente e, atravs de
comparaes de x com si de S, tentar localizar x
em S.
Nesses mtodos, cada chave si, bem como a chave
desejada x, tratada como um nico elemento
indivisvel.

Introduo
Porm, nem sempre as chaves sero do mesmo
tamanho e podem exceder o espao definido para
elas.
Suponha que se deseje armazenar um texto
literrio para, em seguida, tentar localizar frases
nesse texto.
Neste caso, o conjunto S de chaves corresponderia
s frases armazenadas e cada si uma frase
passvel de ser buscada.
Neste cenrio, a busca digital a mais apropriada.

Busca digital
A diferena entre a busca digital e a busca estudada at agora
que a chave no tratada como um elemento indivisvel.
Isto , assume-se que cada chave constituda de um conjunto de
caracteres ou dgitos definidos em um alfabeto apropriado.
Em vez de se comparar a chave procurada com as chaves do
conjunto armazenado, a comparao efetuada, individualmente,
entre os dgitos que compem as chaves, dgito a dgito.
O mtodo de pesquisa digital anlogo pesquisa manual em
dicionrios: com a primeira letra da palavra so determinadas
todas as pginas que contm as palavras iniciadas por aquela
letra e assim por diante

Introduo
TRIE vem de RETRIEVAL
RECUPERAO
Pronncia: TRI ou TRAI

um tipo de rvore de
busca.
Idia geral: usar partes
das CHAVES como
caminho busca
Origem: anos 60 por
Edward Fredkin

CHAVES: Caractersticas
Cada chave formada por palavras sobre um
alfabeto
Palavras com tamanho varivel e ilimitado
Em geral associam-se chaves a elementos ou
registros, como na tabela Hash

CHAVES: Caractersticas
Cada chave formada a partir de alfabeto de
smbolos
Exemplos de alfabetos:
{0,1}, {A, B, C, D, E,...Z}, {0,1,2,3,4,5,...,9}
Exemplos de chaves:
ABABBBABABA 19034717 Maria
010101010000000000101000000001010
Chaves parcialmente partilhadas entre os
elementos

Trie: A estrutura
rvore ordenada e n-ria
Chaves em geral caracteres
Ao contrrio da rvore de busca binria
nenhum n armazena a chave
Chave determinada pela posio na
rvore

Trie: A estrutura
Descendentes de mesmo n com mesmo
prefixo
Raiz: cadeia vazia
Valores ou elementos associados a folhas
ou a alguns ns internos de interesse
O caminho da raiz para qualquer outro n
um prefixo de uma string

Trie: A estrutura
rvore ordenada e n-ria

Trie: A estrutura
O grau corresponde ao tamanho do alfabeto
A trie pode ser vista como um autmato finito
Cada nvel percorrido corresponde a avanar um
elemento na chave

Montando uma rvore TRIE


amy 56
ann 15
emma 30
rob 27
roger 52
Estes so pares que queremos colocar na
rvore TRIE

Montando uma rvore TRIE


amy 56
a

<- Nvel 0
(RAIZ)
<- Nvel 1

<- Nvel 2

<- Nvel 4

/0
56

<- Nvel 5

Montando uma rvore TRIE

Montando uma rvore TRIE


ann 15
a
m

/0
56

/0
15

Montando uma rvore TRIE

INSIRA

emma 30

Montando uma rvore TRIE


emma 30
a

m
a

/0
56

/0
15

/0
30

Montando uma rvore TRIE

INSIRA
rob

27

Montando uma rvore TRIE


rob 27
a

a
/0
56

/0
15

/0
30

/0
27

Montando uma rvore TRIE

INSIRA
roger

52

Montando uma rvore TRIE


roger 52
a
m
y

m
a

/0
56

/0
15

/0
30

b
/0
27

g
e
r
/0
52

Montando uma rvore TRIE

INSIRA
anne

67

Montando uma rvore TRIE


anne 67
a
m
y

/0
56

e
/0
67

/0
15

a
/0
30

b
/0
27

g
e
r
/0
52

Montando uma rvore TRIE

INSIRA
ro

23

Montando uma rvore TRIE


ro 23
a
m
y

/0
56

e
/0
67

/0
15

a
/0
30

b
/0
27

g
e
r
/0
52

EXERCCIO
Quais chaves/palavras esto
representadas nesta trie?
v

f
o
i
*

u
r
a
*

i
*

a
i
*

i
*

e
r
*
e

u
*

o
m

o
s
*

s
*

Implementando uma TRIE


Implementao mais simples: R-WAY
A rvore contm dois tipos de ns: n de desvio e n
de informao.
Cada n de desvio contm todos os valores do
alfabeto mais 1 smbolo especial para determinar
uma chave.
H desperdcio de espao.

Considere uma trie para armazenar chaves do


alfabeto {a, b, c, d, , z}
Ou seja, 27 letras

Implementando uma TRIE


A rvore seguinte contm dois tipos de ns: n
de desvio e n de informao .

Implementando uma TRIE


N de desvio contm 27 campos + 1 (b) para
determinar uma chave.

Implementando uma TRIE


TST- Ternary Search Tree
Cada n aloca trs ponteiros
Centro: caractere seguinte
Filhos da esquerda e direita:
caracteres alternativos
Tem desempenho melhor no que
se refere a espao.

Implementando uma TRIE


TST- Ternary Search Tree
Chaves: by, sea, sells,
shells, shore, the

raiz

Operaes em TRIES
INSERO
Faz-se uma busca pela palavra a ser inserida.
Se ela j existir na TRIE nada feito.
Caso contrrio, recuperado o n at onde
acontece a maior substring da palavra a ser
inserida.
O restante dos seus caracteres so adicionados
na TRIE a partir daquele n

Operaes em TRIES
Insero : bbaabb
b

a
a

b
a

b
a
a

a
a
b
a
b
b

b
Busca pra
aqui

Operaes em TRIES
Insero : bbaabb
b

a
a

b
a

b
a
a

a
a

b
a

b
b

b
b
b

Operaes em TRIES
MEMBRO
1. Busca no nvel superior o nodo que confere com o
primeiro caractere (corrente) da chave
2. Se nenhum n confere, retorna FALSO
Seno
3. Se o caractere que confere \0
Retorna Verdadeiro
Seno
4. Move para a subTRIE que confere com esse
caractere
5. Avana para o prximo caractere na chave
6. V para passo 1

Operaes em TRIES
MEMBRO: ro (/0)
a
m
y

/0
56

e
/0
67

/0
15

a
/0
30

/0
23

b
/0
27

g
e
r
/0
52

Operaes em TRIES
REMOO
Busca-se o n que representa o final da
palavra a ser removida.
So removidos os ns que possuem
apenas um filho pelo caminho
ascendente.
A remoo concluda quando se
encontra um n com mais de um filho

Operaes em TRIES
Remoo : bbaaa
b

a
a

a
a

b
a

a
a

b
b
b

Operaes em TRIES
Remoo : bbaaa
b

a
a

b
b

b
a

a
a

b
b
b

Operaes em TRIES
COMPLEXIDADE
A altura da rvore igual ao comprimento da chave mais
longa
O tempo de execuo das operaes no depende do
nmero de elementos da rvore
Complexidade: O (AK)
A = tamanho do alfabeto
K = tamanho da chave
A utilizao de uma TRIE s compensa se o acesso aos
componentes individuais das chaves for bastante rpido
Quanto maior a estrutura mais eficiente o uso do espao.
Para enfrentar o desperdcio de espao com estruturas
pequenas foram criadas as rvores de PREFIXO e a PATRCIA

rvore Digital Binria


rvore digital binria simplesmente o caso binrio da
rvore digital, ou seja, uma rvore m-ria com m=2.
Neste caso, representa-se o alfabeto por {0,1}

A seleo do filho esquerdo de um n interpretada


como o dgito 0 e o direito como 1.
A maior utilizao de rvores digitais d-se,
possivelmente, nesse caso binrio.
Chaves ou cdigos binrios so os mais empregados na
computao.

rvore Digital Binria: Exemplo


Chaves:
00 *
0000
00010 +
00011
010110
010111
10
101
1010

0
0

0
0

0
1

1
1

+
0

rvore Digital Binria


Caso sejam gravadas
somentes as chaves
{1010, 010110, 010111,
0000, 00010, 00011}
Zig-zags desnecessrios
Maior espao de
memria ocupado
desnecessariamente
Alternativa
Criar a rvore tentando
reduzir os zig-zags
inteis

0
0

0
0

0
1

1
1

+
0

rvore Binria de Prefixo


Ao analisar as chaves, verificamos que algumas so prefixos
de outras na coleo.
Por exemplo:
00
0000
00010
00011

010110
010111

10
101
1010

Isso corresponde a dizer que o caminho da raiz at o n de


chave 00 parte do caminho da raiz at o n de chave
00010
Frequentemente, para melhor manipular a estrutura, desejase que tal situao no acontea.
Assim, uma rvore binria de prefixo uma rvore digital
binria tal que nenhum cdigo seja prefixo do outro.

rvore Binria de Prefixo


S1 = 0
S2 = 1000
S3 = 10010
S4 = 11100
S5 = 11101

S1

1
1

0
0

1
0

S2

0
S3

S4

1
S5

rvore Binria de Prefixo


Uma propriedade interessante
da rvore binria de prefixo
que h uma correspondncia
entre o conjunto de chaves e o
das folhas das rvores.
Isto , cada chave
unicamente representa por
uma folha e a codificao
binria dessa chave
corresponde ao caminho da
raiz at essa folha.

S1

1
1

0
0

1
0

S2

0
S3

S4

1
S5

Outra alternativa

Nem sempre poder ser possvel criar uma rvore de prefixo


Caso deseja-se incluir chaves rosa ou rosachoque, por exemplo

Porm, podemos simplificar a estrutura evitando adicionar todo o


caminho at o n, caso o caminho at o n seja o nico a ser percorrido.
Por exemplo, ao inserir a chave rosachoque, no precisaramos
inserir o caminho choque caso s exista a chave rosa.
Essa soluo til quando temos controle sobre as chaves que sero
buscadas. Ou seja, no teramos uma busca da chave rosaclaro!
Caso no se tenha controle das chaves que sero buscadas,
necessrio verificar, ao final do caminho, se o valor da chave
correspondente ao n encontrado o mesmo da chave pesquisada.
Caso no seja, a chave no existe na rvore.

Outra alternativa

Como implementar essa abordagem? rvore Patrcia!

rvore Patrcia
Patricia abreviatura de
Practical Algorithm To Retrieve Information Coded In
Alphanumeric (Algoritmo Prtico para Recuperar Informao
Codificada em Alfanumrico)

O algoritmo para construo da rvore Patricia


baseado no mtodo de pesquisa digital, mas sem
apresentar o inconveniente das tries.
construda a partir da rvore binria de prefixo.

O problema de caminhos de uma s direo


eliminado por meio de uma soluo simples e elegante:
cada n interno da rvore contm o ndice do caractere
a ser testado para decidir qual subrvore seguir

Insero X = B

Insero X = J

Insero X = H

Insero X = H

Insero X = Q

Insero X = Q

Insero X = C

Insero X = C

Insero X = K

Insero X = K

Insero X = W

W=110110

Insero X = W

W=110110

Insero X = W
Obs: A rvore PATRICIA
no necessariamente
binria!

W=110110

rvore Patrcia: Algoritmo de insero


1. Se a subrvore atual for vazia, criado um n de informao
com a chave X (isto ocorre somente na insero da primeira
chave) e o algoritmo termina
2. Se a subrvore atual for simplesmente um n de informao, os
bits da chave X so comparados, a partir do bit de ndice
imediatamente aps o ltimo ndice da seqncia de ndices
consecutivos do caminho de pesquisa, com os bits
correspondentes da chave X deste n de informao, at
encontrar um ndice i cujos bits sejam diferentes
A comparao dos bits a partir do ltimo ndice consecutivo
melhora o desempenho do algoritmo: se todos forem iguais, a
chave j se encontra na rvore e o algoritmo termina; seno,
vai para o passo 4

rvore Patrcia: Algoritmo de insero


3. Se a raiz da subrvore atual for um n de desvio, deve-se
prosseguir para a subrvore indicada pelo bit da chave X de
ndice dado pelo n atual, de forma recursiva
4. Criar um n de desvio e um n de informao: o primeiro
contendo o ndice i e o segundo a chave X. A seguir, o n de
desvio ligado ao de informao pelo ponteiro de subrvore
esquerda ou direita, dependendo se o bit de ndice i da chave X
seja 0 ou 1, respectivamente
5. O caminho de insero percorrido novamente de baixo para
cima, subindo com o par de ns criados no passo 4 at chegar a
um n de desvio cujo ndice seja menor que o ndice i
determinado no passo 2: este o ponto de insero e o par de
ns inserido

Aplicaes das TRIES


Dicionrios (telefone celular)
Corretores Ortogrficos
Programas para compreender Linguagem
Natural
Auto-preenchimento:
browsers,
e-mail,
linguagens de programao

Aplicaes das TRIES


*Compresso de dados
*Biologia computacional

* Tabelas de roteamento para endereos IP


* Armazenar e consultar documentos XML
* Fundamental para o Burstsort (o mtodo mais
rpido de ordenao de strings em memria/cache)
* Tabelas de smbolos em compiladores

Exerccio
Insira as seguintes chaves em uma rvore Patrcia:
A
B
C
D
E
F
G
H

000100
010100
000010
100100
001001
001100
101000
101010

Você também pode gostar