
71. Поиск подстрок. Алгоритм Рабина-Карпа
Алгоритм Рабина — Карпа — это алгоритм поиска строки, который ищет шаблон, то есть подстроку, в тексте, используя хеширование.
Алгоритм редко используется для поиска одиночного шаблона, но имеет значительную теоретическую важность и очень эффективен в поиске совпадений множественных шаблонов. Для текста длины n и шаблона длины m его среднее время исполнения и лучшее время исполнения - это O(n), но в худшем случае он имеет производительность O(nm), что является одной из причин того, почему он не слишком широко используется. Однако алгоритм имеет уникальную особенность находить любую из k строк менее чем за время O(n) в среднем, независимо от размера k.
RK(T[1..n],P[1..m],d,q)
1.h←dm-1modq
2.p←0
3.t←0
4.for i=1 to m do
5.p←(p*d+p[i])modq
6.t←(t*d+T[i])modq
7.end for
8.for S=0 to n-m do
9.if p=t then
10.if (P[1..m] = T[s+1..s+m]) then
11.print(“Обработка входящих со сдвигом”,s)
12.if s<n-m then
13.t←((t-T[s+1]*k)d+T[S+m+k])modq
14.end for