Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bem, estou tentando implementar o algoritmo shift and aproximado em php. Acredito que seja possível, uma vez que a linguagem oferece os operadores logicos necessários.
O problema é que o algoritmo nao encontra as palavras corretamente, alguem sabe onde está o erro?
algoritmo:
public function ShiftAndAproximado($Texto, $Padrao, $num_erros = 1)
{
//recupera tamanho das strings
$n = strlen($Texto);
$m = strlen($Padrao);
//define o maior numero de erros e o maior tamanho da mascara
$MAXCHAR = 256;
$NUMMAXERROS = 10;
$Masc[$MAXCHAR];
$R[$NUMMAXERROS];
for ($i = 0; $i < $MAXCHAR; $i++) $Masc[$i] = 0;
for ($i = 1; $i <= $m; $i++) {$Masc[$Padrao[$i-1] + 127] |= 1 << ($m - $i); }
$R[0] = 0;
$Ri = 1 << ($m - 1);
for ($j = 1; $j <= $num_erros; $j++) $R[$j] = (1 << ($m - $j)) | $R[$j-1];
for ($i = 0; $i < $n; $i++)
{
$Rant = $R[0];
$Rnovo = ((($Rant) >> 1) | $Ri) & $Masc[$Texto[$i] + 127];
$R[0] = $Rnovo;
for ($j = 1; $j <= $num_erros; $j++)
{
$Rnovo = ((($R[$j]) >> 1) & $Masc[$Texto[$i] + 127]) | $Rant | ((($Rant | $Rnovo)) >> 1);
$Rant = $R[$j];
$R[$j] = $Rnovo | $Ri;
}
if (($Rnovo & 1) != 0)
echo(" Casamento na posicao ". ($i + 1) . "<br />");
}
}
$Texto = "Loremffdfdfasdfasdf sal";
$Palavra = "kikos sab";
ShiftAndAproximado($Texto, $Palavra, 1);
Se alguém puder me ajudar, agradeço
Carregando comentários...