Изменения

Перейти к: навигация, поиск
Псевдокод
==Псевдокод==
Приведем пример псевдокода, который находит все вхождения строки <tex>w</tex> в <tex>s</tex> и возвращает массив позиций, откуда начинаются вхождения. '''RabinKarpvector<int>''' rabinKarp (s[1..: '''string''', w : '''string'''): '''vector<int>''' answer '''int''' n], p[1= s.length '''int''' m = w.m])length hp '''int''' hashS = hash(ps[1..m]) h '''int''' hashW = hash(sw[1..m]) '''for''' i = 1 '''to''' n - m + 1 '''if''' h hashS == hphashW answer.add(i) h hashS = (p * h - p<tex>^{m}</tex> * hash(s[i]) + hash(s[i + m])) mod r '''if''' answer.size() <font color== 0 '''return''' not found '''else'''green>//r - некоторое большое число, p - некоторое просто число</font> '''return''' answer
Новый хеш <tex>h</tex> был получен с помощью быстрого пересчёта. Для сохранения корректности алгоритма нужно считать, что <tex>s[n + 1]</tex> {{---}} пустой символ.
Анонимный участник

Навигация