Transcript Árvores PATRICIA
Slide 1
Apresentação:
Pratical Algorithm To Retrieve
Information Coded In Alphanumeric
(Algoritmo prático para recuperar informações codificadas em alfanumérico)
Rogério Vargas
[email protected]
Slide 2
Conceito:
P.A.T.R.I.C.I.A. é um algoritmo desenvolvido que gera uma árvore
onde somente os nodos folhas possuem as chaves.
A grande vantagem apontada por esta estrutura é que sua consulta
torna-se muito rápida, pois a árvore P.A.T.R.I.C.I.A. evita comparações
desnecessárias entre os elementos analisados.
Slide 3
Como Funciona:
A árvore P.A.T.R.I.C.I.A. possui em seus nodos
(exceto nos nodos folha) um registro com os seguintes campos:
1) Avançar;
2) Comparar_com;
Slide 4
Como Funciona:
1) Campo Avançar:
Este campo faz parte de um registro inicial que integra todos os nodos,
exceto os folhas.
A proposta de solução declara-o como um inteiro ( integer / int ) que tem a
função de informar o programa de qual caracter da chave analisada deve
ser comparado com o campo “Comparar_com”, que veremos a seguir.
“Avançar” é um campo acumulativo, ou seja, a medida que o
caminhamento sobe nos níveis da árvore, ele soma o valor do campo
anterior com o do nodo visitado, até que se chegue a um nodo folha.
Slide 5
Como Funciona:
2) Campo Comparar_com:
Faz parte do mesmo registro de “Avançar”, sendo este declarado como
um caracter (char).
Ele indica ao programa o caracter com o qual deve ser comparado o
caracter da chave.
No caso de uma inserção, se o caracter da chave for menor ou igual (<=)
ao do nodo comparado, este então é alocado à esquerda do nodo pai que
será criado, senão, à direita.
No caso de consulta, o caminhamento é feito através do mesmo processo
da inserção.
Compara os caracteres.
Se for menor ou igual desloca-se para a esquerda, caso contrário deslocase para a direita.
Slide 6
Funcionamento:
Cada nodo de uma árvore P.A.T.R.I.C.I.A. contém o número de posições
que será movido adiante e o caractere que será comparado. Um sinal de
comparação ( <= ) indica que deve ir para a subárvore esquerda e um
sinal ( > ) indica uma subárvore a direita.
Slide 7
Funcionamento Passo-a-Passo:
Palavras
Antirevolucionario
Antirepublicano
Antigo
Angola
Antes
Slide 8
Funcionamento Passo-a-Passo:
Palavras
1 – Comparação:
Antirevolucionario
( AntirePublicano ) <= ( AntireVolucionario )
7º caracter diferente
Antirepublicano
Antigo
Angola
Antes
Slide 9
Funcionamento Passo-a-Passo:
Palavras
2 – Comparação:
Antirevolucionario
( AntiGo ) <= ( AntiRepuplicano )
5º caracter diferente
Antirepublicano
Antigo
Angola
Antes
Slide 10
Funcionamento Passo-a-Passo:
Palavras
3 – Comparação:
Antirevolucionario
( AnGola ) <= ( AnTigo )
3º caracter diferente
Antirepublicano
Antigo
Angola
Antes
Slide 11
Funcionamento Passo-a-Passo:
4 e 5 – Comparação:
( AnGola ) <= ( AnTes ) 3º caracter diferente
( AntEs ) <= ( AntIgo ) 4º caracter diferente
Palavras
Antirevolucionario
Antirepublicano
Antigo
Angola
Antes
Slide 12
Inserção:
A) Vamos supor que o programa leu do teclado 2 palavras:
palavra 1 = c a s c a t a;
palavra 2 = c a s c a l h o;
Este será um caso de inserção do primeiro nodo da nossa árvore!
Slide 13
Inserção:
O programa percorre as chaves até que encontre um caracter diferente
no mesmo índice da string.
Neste caso temos a diferença no sexto caracter, onde i será igual a 6.
Ela aloca um nodo pai que vai conter o registro com Avançar = 6;
Comparar_com = l (letra l);
e aponta para ‘cascalho’ à esquerda e ‘cascata’ à direita.
Slide 14
Inserção:
Slide 15
Inserção:
B) Agora vamos inserir a palavra casco:
Note que a diferença dela está no quinto caracter.
Então comparamos ele com o as palavras que possuímos.
‘Casco’ é maior que ‘casca...’ .
Slide 16
Inserção:
Repetimos então o processo anterior, onde teremos:
(O algoritmo de inserção trabalha juntamente com o de consulta)
Obs.:
Não podemos esquecer de
que o campo "Avançar”
acumula o valor dos nodos
anteriores.
Veja que o nodo controlador
de cascalho-cascata na
verdade compara o sexto
caracter, pois o valor 1 deste
nodo é somado com 5 do
nodo anterior !!!
Slide 17
Consulta:
Procurar por:
domando
O primeiro nodo
manda comparar o
caracter número 1
da chave com “c”.
Como “d” é maior que
“c”, deslocamos
para a direita.
Agora o segundo com
“a”.
O caracter “o” de domando é maior que
“a”, então vamos para a direita.
Agora o quarto com “a”.
É igual.
Vamos para a esquerda e encontramos
a palavra.
Slide 18
Deleção:
A implementação do algoritmo de deleção é relativamente simples se
compararmos com o de inserção.
Ele trabalha juntamente com o de consulta para localizar o nodo a ser
deletado.
Não esquecendo que nossa árvore possui duas estruturas de nodos (os
folhas que armazenam as chaves e os não-folha que controlam a
estrutura para uma caminhamento correto), o algoritmo de consulta vai
localizar (quando possuir) sempre o nodo folha.
Basta que façamos com que o nodo controlador que apontava para o
controlador do nosso folha localizado agora passe apontar diretamente
para o controlador seguinte.
Slide 19
Deleção:
Obs.:
Para deletar a chave "missão",
precisamos ajustar o ponteiro, e assim
teremos :
Obs.:
Note que além de reajustarmos os
ponteiros, o nodo controlador que passa
a ser apontado pelo anterior ao deletado,
teve o seu campo ‘Avançar’ modificado
pelo acumulo do seu valor anterior com o
do nodo deletado.
Slide 20
Considerações Finais:
Tem como vantagem e característica principal, armazenar um
número de posições para qual é movido para a frente antes de
fazer a próxima comparação, assim elimina comparações
desnecessárias e melhora o desempenho.
Tem a desvantagem de produzir apenas duas subárvores. Se
mais do que duas chaves são distintas na mesma posição do
caracter,é necessário adicionar nodos extras ao índice para
separá-lo. Se (n) chaves são distintas na mesma posição, então
serão necessários (n-1 )nodos para separá-los. Se muitos casos
destes acontecerem, é preferível utilizar estruturas TRIE à árvores
PATRÍCIA.
Slide 21
Programa de Inserção:
patricia insert( key, t )
typekey key;
patricia t;
{ patricia p;
patricia InsBetween();
int i;
if (t==NULL) return( NewDataNode(key) );
for( p=t; !IsData(p); )
p = bit( p->level, key ) ? p->right : p->left ;
/* find first different bit */
for (i=1; i<=D && bit(i,key)==bit(i,p->k); i++);
if (i>D) { Error /* Key already in table */;
return(t); }
else return( InsBetween( key, t, i ) ); }
patricia InsBetween( key, t, i )
typekey key;
patricia t;
int i;
{ patricia p;
if ( IsData(t) || i < t->level ) {
/* create a new internal node */
p = NewDataNode( key );
return( bit(i,key) ? NewIntNode(i,t,p) :
NewIntNode(i,p,t) );
}
if (bit(t->level,key)==1)
t->right = InsBetween( key, t->right, i );
else t->left = InsBetween( key, t->left, i );
return( t );
};
Slide 22
Programa de Consulta:
search( key, t )
typekey key;
patricia t;
{
if ( t==NULL ) notfound( key );
else
{
while ( !IsData(t) )
t = bit(t->level,key) ? t->right : t->left;
if ( key == t->k ) found( t );
else notfound( key );
}
};
Slide 23
Praticar no site:
http://www.cis.ksu.edu/
~rhowell/viewer/viewer.
html
Slide 24
Referências Bibliográficas:
GOETZE, Ari Ricardo. Universidade do Vale do Rio dos Sinos.
DisponíveL em http://www.inf.unisinos.br/~ari/estrut/estrut.htm.
Acesso em 29 Março 2006.
MATOS, Luciana Ribeiro. Novos Índices para Texto: Árvores PAT
e Vetores PAT. Disponível em
http://ge.cos.ufrj.br/twiki/pub/BRI/PlanoDeAulas2005Bri/Luciana.ppt
Acesso em 30 Março 2006.
ALVARES, Marco A. Árvore Patricia. Disponível em
http://www.ec.ucdb.br/~marco/courses03b/ds2/slides/002-arvorespatriciaX6.pdf. Acesso em 28 Março 2006.
LONGHI Magalí T. Árvores de Pesquisa. Disponível em
http://www.inf.lasalle.tche.br/~magali/ED2.htm. Acesso em 27 Março
2006.
HORA, André Cavalcante, CRUZ Cicero Alan Leite, SILVA Tiago
Eduardo. Tries e Árvore Patricia. Disponível em
http://dalton.dsc.ufcg.edu.br/edados/index.php/Tries_e_%C3%81rvor
es_Patricia. Acesso em 03 Abril 2006.
NIST, National Institute of Standards and Technology, "Patricia
Tree", disponivel em
http://www.nist.gov/dads/HTML/patriciatree.html. Acesso em 12 Abril
2006.
Slide 25
Finalização:
Dúvidas
Sugestões
Críticas
?
Obrigado!!!!!
Slide 26
Créditos:
Mestrado em Ciência da Computação
Trabalho da disciplina de Estruturas de Dados
Professor
Dr. Paulo Roberto Gomes Luzzardi
Mestrando:
Rogério Vargas
Apresentação:
Pratical Algorithm To Retrieve
Information Coded In Alphanumeric
(Algoritmo prático para recuperar informações codificadas em alfanumérico)
Rogério Vargas
[email protected]
Slide 2
Conceito:
P.A.T.R.I.C.I.A. é um algoritmo desenvolvido que gera uma árvore
onde somente os nodos folhas possuem as chaves.
A grande vantagem apontada por esta estrutura é que sua consulta
torna-se muito rápida, pois a árvore P.A.T.R.I.C.I.A. evita comparações
desnecessárias entre os elementos analisados.
Slide 3
Como Funciona:
A árvore P.A.T.R.I.C.I.A. possui em seus nodos
(exceto nos nodos folha) um registro com os seguintes campos:
1) Avançar;
2) Comparar_com;
Slide 4
Como Funciona:
1) Campo Avançar:
Este campo faz parte de um registro inicial que integra todos os nodos,
exceto os folhas.
A proposta de solução declara-o como um inteiro ( integer / int ) que tem a
função de informar o programa de qual caracter da chave analisada deve
ser comparado com o campo “Comparar_com”, que veremos a seguir.
“Avançar” é um campo acumulativo, ou seja, a medida que o
caminhamento sobe nos níveis da árvore, ele soma o valor do campo
anterior com o do nodo visitado, até que se chegue a um nodo folha.
Slide 5
Como Funciona:
2) Campo Comparar_com:
Faz parte do mesmo registro de “Avançar”, sendo este declarado como
um caracter (char).
Ele indica ao programa o caracter com o qual deve ser comparado o
caracter da chave.
No caso de uma inserção, se o caracter da chave for menor ou igual (<=)
ao do nodo comparado, este então é alocado à esquerda do nodo pai que
será criado, senão, à direita.
No caso de consulta, o caminhamento é feito através do mesmo processo
da inserção.
Compara os caracteres.
Se for menor ou igual desloca-se para a esquerda, caso contrário deslocase para a direita.
Slide 6
Funcionamento:
Cada nodo de uma árvore P.A.T.R.I.C.I.A. contém o número de posições
que será movido adiante e o caractere que será comparado. Um sinal de
comparação ( <= ) indica que deve ir para a subárvore esquerda e um
sinal ( > ) indica uma subárvore a direita.
Slide 7
Funcionamento Passo-a-Passo:
Palavras
Antirevolucionario
Antirepublicano
Antigo
Angola
Antes
Slide 8
Funcionamento Passo-a-Passo:
Palavras
1 – Comparação:
Antirevolucionario
( AntirePublicano ) <= ( AntireVolucionario )
7º caracter diferente
Antirepublicano
Antigo
Angola
Antes
Slide 9
Funcionamento Passo-a-Passo:
Palavras
2 – Comparação:
Antirevolucionario
( AntiGo ) <= ( AntiRepuplicano )
5º caracter diferente
Antirepublicano
Antigo
Angola
Antes
Slide 10
Funcionamento Passo-a-Passo:
Palavras
3 – Comparação:
Antirevolucionario
( AnGola ) <= ( AnTigo )
3º caracter diferente
Antirepublicano
Antigo
Angola
Antes
Slide 11
Funcionamento Passo-a-Passo:
4 e 5 – Comparação:
( AnGola ) <= ( AnTes ) 3º caracter diferente
( AntEs ) <= ( AntIgo ) 4º caracter diferente
Palavras
Antirevolucionario
Antirepublicano
Antigo
Angola
Antes
Slide 12
Inserção:
A) Vamos supor que o programa leu do teclado 2 palavras:
palavra 1 = c a s c a t a;
palavra 2 = c a s c a l h o;
Este será um caso de inserção do primeiro nodo da nossa árvore!
Slide 13
Inserção:
O programa percorre as chaves até que encontre um caracter diferente
no mesmo índice da string.
Neste caso temos a diferença no sexto caracter, onde i será igual a 6.
Ela aloca um nodo pai que vai conter o registro com Avançar = 6;
Comparar_com = l (letra l);
e aponta para ‘cascalho’ à esquerda e ‘cascata’ à direita.
Slide 14
Inserção:
Slide 15
Inserção:
B) Agora vamos inserir a palavra casco:
Note que a diferença dela está no quinto caracter.
Então comparamos ele com o as palavras que possuímos.
‘Casco’ é maior que ‘casca...’ .
Slide 16
Inserção:
Repetimos então o processo anterior, onde teremos:
(O algoritmo de inserção trabalha juntamente com o de consulta)
Obs.:
Não podemos esquecer de
que o campo "Avançar”
acumula o valor dos nodos
anteriores.
Veja que o nodo controlador
de cascalho-cascata na
verdade compara o sexto
caracter, pois o valor 1 deste
nodo é somado com 5 do
nodo anterior !!!
Slide 17
Consulta:
Procurar por:
domando
O primeiro nodo
manda comparar o
caracter número 1
da chave com “c”.
Como “d” é maior que
“c”, deslocamos
para a direita.
Agora o segundo com
“a”.
O caracter “o” de domando é maior que
“a”, então vamos para a direita.
Agora o quarto com “a”.
É igual.
Vamos para a esquerda e encontramos
a palavra.
Slide 18
Deleção:
A implementação do algoritmo de deleção é relativamente simples se
compararmos com o de inserção.
Ele trabalha juntamente com o de consulta para localizar o nodo a ser
deletado.
Não esquecendo que nossa árvore possui duas estruturas de nodos (os
folhas que armazenam as chaves e os não-folha que controlam a
estrutura para uma caminhamento correto), o algoritmo de consulta vai
localizar (quando possuir) sempre o nodo folha.
Basta que façamos com que o nodo controlador que apontava para o
controlador do nosso folha localizado agora passe apontar diretamente
para o controlador seguinte.
Slide 19
Deleção:
Obs.:
Para deletar a chave "missão",
precisamos ajustar o ponteiro, e assim
teremos :
Obs.:
Note que além de reajustarmos os
ponteiros, o nodo controlador que passa
a ser apontado pelo anterior ao deletado,
teve o seu campo ‘Avançar’ modificado
pelo acumulo do seu valor anterior com o
do nodo deletado.
Slide 20
Considerações Finais:
Tem como vantagem e característica principal, armazenar um
número de posições para qual é movido para a frente antes de
fazer a próxima comparação, assim elimina comparações
desnecessárias e melhora o desempenho.
Tem a desvantagem de produzir apenas duas subárvores. Se
mais do que duas chaves são distintas na mesma posição do
caracter,é necessário adicionar nodos extras ao índice para
separá-lo. Se (n) chaves são distintas na mesma posição, então
serão necessários (n-1 )nodos para separá-los. Se muitos casos
destes acontecerem, é preferível utilizar estruturas TRIE à árvores
PATRÍCIA.
Slide 21
Programa de Inserção:
patricia insert( key, t )
typekey key;
patricia t;
{ patricia p;
patricia InsBetween();
int i;
if (t==NULL) return( NewDataNode(key) );
for( p=t; !IsData(p); )
p = bit( p->level, key ) ? p->right : p->left ;
/* find first different bit */
for (i=1; i<=D && bit(i,key)==bit(i,p->k); i++);
if (i>D) { Error /* Key already in table */;
return(t); }
else return( InsBetween( key, t, i ) ); }
patricia InsBetween( key, t, i )
typekey key;
patricia t;
int i;
{ patricia p;
if ( IsData(t) || i < t->level ) {
/* create a new internal node */
p = NewDataNode( key );
return( bit(i,key) ? NewIntNode(i,t,p) :
NewIntNode(i,p,t) );
}
if (bit(t->level,key)==1)
t->right = InsBetween( key, t->right, i );
else t->left = InsBetween( key, t->left, i );
return( t );
};
Slide 22
Programa de Consulta:
search( key, t )
typekey key;
patricia t;
{
if ( t==NULL ) notfound( key );
else
{
while ( !IsData(t) )
t = bit(t->level,key) ? t->right : t->left;
if ( key == t->k ) found( t );
else notfound( key );
}
};
Slide 23
Praticar no site:
http://www.cis.ksu.edu/
~rhowell/viewer/viewer.
html
Slide 24
Referências Bibliográficas:
GOETZE, Ari Ricardo. Universidade do Vale do Rio dos Sinos.
DisponíveL em http://www.inf.unisinos.br/~ari/estrut/estrut.htm.
Acesso em 29 Março 2006.
MATOS, Luciana Ribeiro. Novos Índices para Texto: Árvores PAT
e Vetores PAT. Disponível em
http://ge.cos.ufrj.br/twiki/pub/BRI/PlanoDeAulas2005Bri/Luciana.ppt
Acesso em 30 Março 2006.
ALVARES, Marco A. Árvore Patricia. Disponível em
http://www.ec.ucdb.br/~marco/courses03b/ds2/slides/002-arvorespatriciaX6.pdf. Acesso em 28 Março 2006.
LONGHI Magalí T. Árvores de Pesquisa. Disponível em
http://www.inf.lasalle.tche.br/~magali/ED2.htm. Acesso em 27 Março
2006.
HORA, André Cavalcante, CRUZ Cicero Alan Leite, SILVA Tiago
Eduardo. Tries e Árvore Patricia. Disponível em
http://dalton.dsc.ufcg.edu.br/edados/index.php/Tries_e_%C3%81rvor
es_Patricia. Acesso em 03 Abril 2006.
NIST, National Institute of Standards and Technology, "Patricia
Tree", disponivel em
http://www.nist.gov/dads/HTML/patriciatree.html. Acesso em 12 Abril
2006.
Slide 25
Finalização:
Dúvidas
Sugestões
Críticas
?
Obrigado!!!!!
Slide 26
Créditos:
Mestrado em Ciência da Computação
Trabalho da disciplina de Estruturas de Dados
Professor
Dr. Paulo Roberto Gomes Luzzardi
Mestrando:
Rogério Vargas