VinBR

AEDs III 30/03/2011

Mar 6th, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.46 KB | None | 0 0
  1. BOYER-MOORE
  2. // Não entendi bem, se na aula anterior ele estava explicando o Boyer Moore Horspool, e nessa aula ele decidiu explicar o BOYER-MOORE sem o Horspool, ou se ele ta re-explicando esse cara, mas anyway, nao entendi qual dos 2 mas parece que o BM é força bruta.
  3.  
  4. // Estudar Boyer-Moore Puro para ver quais as diferenças do BMH.
  5.  
  6. Shift-And // Re-explicado, ao menos essa explicação me poupou de pesquisar sozinho na internet
  7.  
  8. - Paralelismo de Bit
  9. - Automato não-determinista
  10.  
  11. t e s t e
  12. --> 0 --> 1 --> 2 --> 3 --> 4 --> (5) // sendo 5 estado final
  13.  
  14. | 1 2 3 4 5 //numero do bit.
  15. M[t] | 1 0 0 1 0
  16. M[e] | 0 1 0 0 1
  17. M[s] | 0 0 1 0 0
  18.  
  19. o 1 na tabela indica que leva ao estado do numero da coluna.
  20. ou seja se estava no estado X, na proxima rodada do loop ele verifica se
  21. consegue chegar no estado X+1, se o bit daquela posição para aquela letra for 1,
  22. entao consegue, isso é anotado e se chega ao proximo estado.
  23.  
  24. então teremos um inteiro que representara o estado atual.
  25.  
  26. o inteiro é sempre atualizado assim:
  27.  
  28. R = (2^(m-1) | R>>1) & M[T[i]];
  29.  
  30. Pode parecer estranho a principio eu usar os bits de R para definir o estado,
  31. mas lembre-se de que estamos imitando um automato não deterministico, significando que eu posso estar em mais de um estado por vez certo?
  32.  
  33. Bem cada bit de R indica que eu estou, ou não em um estado, e é por isso que eu dou um shift
  34.  
  35. // Essa explicação ficou mais como revisão, achei bem escrita =], mas se quiser mais detalhes sobre o shift-and
  36. // a aula do dia "03 28" explica melhor.
  37.  
  38. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  39.  
  40. Ja vimos então o casamento exato de padrão =].
  41.  
  42. Veremos agora o Casamento Aproximado
  43. que é quando a palavra não se encaixa direitinho, falta uma letra ou tem uma letra a mais.
  44.  
  45. Os que existem são:
  46. - Spell Checker
  47. - Filtro de SPAM
  48. - Diff ( revisão de arquivo )
  49.  
  50. // um conceito essencial ao casamento aproximado é o de distancia de uma palavra para outra
  51. // que é o numero de diferenças entre as duas,
  52. // o que permite que as pesquisas no google por exemplo funcionem mesmo se voce errar um pouco a palavra.
  53. // abaixo o professor colocou de maneira mais sucinta do que seria adequado, os valores que diferenciam as palavras.
  54. // e deu um exemplo de como usar esses valores.
  55.  
  56. CONCEITO:
  57. Distância de edição é o numero de diferenças entre duas palavras.
  58. Entao tipo se tem uma letra a mais, a menos ou trocada tenho que incrementar o contador de diferenças.
  59.  
  60. //O professor colocou então uns "preços" de diferença para cada operação,
  61. // mas não sei pra que isso se todos tem o mesmo preço.
  62.  
  63. - Deleta custa 1
  64. - inserção custa 1
  65. - Substituição custa 1
  66.  
  67. // Bem dito a ideia da distancia de edição, o professor exemplificou com o Shift-And Aproximado.
  68.  
  69. Primeiramente mostraremos o shift-and para a operação de inserção que é quando a palavra lida tem uma letra a mais.
  70. É adicionada então uma tolerancia a erros, da mesma forma que funciona o automato do shift-and, aqui nós criamos mais N automatos
  71. que só são ativados se o primeiro automato receber uma letra errada.
  72.  
  73. // O numero N de novos automatos é o numero de erros que serão tolerados
  74.  
  75. entao se eu li a letra T do padrão "Teste", mas em seguida li um A, eu pulo para o estado T' (do 2° automato) que indica que tolerei um erro, se acontecer de novo pulo pro estado T''(3° automato), se agora aparecer um E pulo para o estado E''(ainda no 3° automato), indicando que cheguei a letra E tolerando 2 erros.
  76.  
  77. // A implementação deve ser interessante
  78. // Bem o professor comecou a explica-la agora:
  79.  
  80. bem é o seguinte o calculo para R ainda é o mesmo identicamente:
  81. R = (R>>1 | 2^(m-1)) & M[T[i]]; // igualzinho.
  82.  
  83. // mas o calculo pro R':
  84. R'= (R'>>1 & 2^(m-1) | R | M[T[i]]); // é diferente
  85.  
  86. // Agora um automato que deleta!
  87.  
  88. Um shift-and que aceita deleções ou seja uma letra que está em falta vai ter tambem tantos automatos quanto numero de erros que eu desejo tolerar e caso ocorra um erro no estado T (Padrao="Teste") eu tenho de pular é para o estado E'(2° automato),
  89. indicando que cheguei a letra E tolerando um erro, e fazendo isso eu meio que pulei a letra T e estou buscando a palavra "este".
  90.  
  91. // agora o calculo que é importante né.
  92.  
  93. R = mesmo calculo dos demais =];
  94. R'= (R'>>1 | 2^(m-1)) | R >> 1;
  95.  
  96. Programa Dinâmico
  97. distância de levenshtein.
  98. // seguinte peguei mal o inicio dessa explicação posso ter q estudar sozinho.
Advertisement
Add Comment
Please, Sign In to add comment