A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Pratical Algorithm To Retrieve Information Coded In Alphanumeric

Apresentações semelhantes


Apresentação em tema: "Pratical Algorithm To Retrieve Information Coded In Alphanumeric"— Transcrição da apresentação:

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

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.

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;

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.

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

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.

7 Antirevolucionario Antirepublicano Antigo Angola Antes
Funcionamento Passo-a-Passo: Palavras Antirevolucionario Antirepublicano Antigo Angola Antes

8 ( AntirePublicano ) <= ( AntireVolucionario )
Funcionamento Passo-a-Passo: Palavras 1 – Comparação: ( AntirePublicano ) <= ( AntireVolucionario ) 7º caracter diferente Antirevolucionario Antirepublicano Antigo Angola Antes

9 ( AntiGo ) <= ( AntiRepuplicano )
Funcionamento Passo-a-Passo: Palavras 2 – Comparação: ( AntiGo ) <= ( AntiRepuplicano ) 5º caracter diferente Antirevolucionario Antirepublicano Antigo Angola Antes

10 ( AnGola ) <= ( AnTigo )
Funcionamento Passo-a-Passo: Palavras 3 – Comparação: ( AnGola ) <= ( AnTigo ) 3º caracter diferente Antirevolucionario Antirepublicano Antigo Angola Antes

11 4 e 5 – Comparação: Funcionamento Passo-a-Passo:
( AnGola ) <= ( AnTes ) 3º caracter diferente ( AntEs ) <= ( AntIgo ) 4º caracter diferente Palavras Antirevolucionario Antirepublicano Antigo Angola Antes

12 A) Vamos supor que o programa leu do teclado 2 palavras:
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!

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.

14 Inserção:

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

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

17 O primeiro nodo manda comparar o caracter número 1 da chave com “c”.
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”. Procurar por: domando 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.

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.

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.

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.

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

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

23 Praticar no site:

24 Referências Bibliográficas:
GOETZE, Ari Ricardo. Universidade do Vale do Rio dos Sinos. DisponíveL em Acesso em 29 Março 2006. MATOS, Luciana Ribeiro. Novos Índices para Texto: Árvores PAT e Vetores PAT. Disponível em Acesso em 30 Março 2006. ALVARES, Marco A. Árvore Patricia. Disponível em Acesso em 28 Março 2006. LONGHI Magalí T. Árvores de Pesquisa. Disponível em Acesso em 27 Março 2006. HORA, André Cavalcante, CRUZ Cicero Alan Leite, SILVA Tiago Eduardo. Tries e Árvore Patricia. Disponível em Acesso em 03 Abril 2006. NIST, National Institute of Standards and Technology, "Patricia Tree", disponivel em Acesso em 12 Abril 2006.

25 Finalização: ? Dúvidas Sugestões Críticas Obrigado!!!!!

26 Mestrado em Ciência da Computação
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


Carregar ppt "Pratical Algorithm To Retrieve Information Coded In Alphanumeric"

Apresentações semelhantes


Anúncios Google