2008. július 11., péntek
Karp-Rabin string searching
Problem/Question/Abstract:
Karp-Rabin string searching
Answer:
Do you need a fast routine that searches a string within a string? Try the Karp-Rabin algorithm:
function search(pat: PATTERN; Text: Text): integer;
const
b = 131;
var
hpat, htext, Bm, j, m, n: integer;
found: Boolean;
begin
found := False;
search := 0;
m := length(pat);
if m = 0 then
begin
search := 1;
found := true
end;
Bm := 1;
hpat := 0;
htext := 0;
n := length(Text);
if n >= m then
{*** preprocessing ***}
for j := 1 to m do
begin
Bm := Bm * b;
hpat := hpat * b + ord(pat[j]);
htext := htext * b + ord(Text[j])
end;
j := m;
{*** search ***}
while not found do
begin
if (hpat = htext) and (pat = substr(Text, j - m + 1, m)) then
begin
search := j - m + 1;
found := true
end;
if j < n then
begin
j := j + 1;
htext := htext * b - ord(Text[j - m]) * Bm + ord(Text[j])
end
else
found := true
end
end;
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése