Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático...

26
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]

Transcript of Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático...

Page 1: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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]

Page 2: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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.

Page 3: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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;

Page 4: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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.

Page 5: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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 desloca-se para a direita.

Page 6: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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.

Page 7: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Funcionamento Passo-a-Passo:

Antirevolucionario

Antirepublicano

Antigo

Angola

Antes

Palavras

Page 8: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Antirevolucionario

Antirepublicano

Antigo

Angola

Antes

Palavras1 – Comparação:

( AntirePublicano ) <= ( AntireVolucionario )

7º caracter diferente

Funcionamento Passo-a-Passo:

Page 9: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Funcionamento Passo-a-Passo:

Antirevolucionario

Antirepublicano

Antigo

Angola

Antes

Palavras2 – Comparação:

( AntiGo ) <= ( AntiRepuplicano )

5º caracter diferente

Page 10: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Funcionamento Passo-a-Passo:

Antirevolucionario

Antirepublicano

Antigo

Angola

Antes

Palavras3 – Comparação:

( AnGola ) <= ( AnTigo )

3º caracter diferente

Page 11: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Funcionamento Passo-a-Passo:

Antirevolucionario

Antirepublicano

Antigo

Angola

Antes

Palavras4 e 5 – Comparação:

( AnGola ) <= ( AnTes ) 3º caracter diferente

( AntEs ) <= ( AntIgo ) 4º caracter diferente

Page 12: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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!

Page 13: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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.

Page 14: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Inserção:

Page 15: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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...’ .

Page 16: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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 !!!

Page 17: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Consulta:

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.

domando

Procurar por:

Page 18: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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.

Deleção:

Page 19: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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.

Deleção:

Page 20: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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.

Considerações Finais:

Page 21: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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 ); };

Programa de Inserção:

Page 22: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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 ); } };

Page 23: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Praticar no site:

http://www.cis.ksu.edu/~rhowell/viewer/

viewer.html

Page 24: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

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-arvores-patriciaX6.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%81rvores_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.

Page 25: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Finalização:

Dúvidas

Sugestões

Críticas ?Obrigado!!!!!

Page 26: Apresentação: Pratical Algorithm To Retrieve Information Coded In Alphanumeric (Algoritmo prático para recuperar informações codificadas em alfanumérico)

Mestrado em Ciência da Computação

Trabalho da disciplina de Estruturas de Dados

Professor Dr. Paulo Roberto Gomes Luzzardi

 Mestrando:

Rogério Vargas

Créditos: