Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

сиаод / 35-66 / 71. Поиск подстрок. Алгоритм Рабина-Карпа

.pdf
Скачиваний:
63
Добавлен:
11.05.2015
Размер:
201.25 Кб
Скачать

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