freeCodeCamp/guide/russian/algorithms/string-matching-algorithms/rabin-karp-algorithm/index.md

2.6 KiB
Raw Blame History

title localeTitle
Rabin Karp Algorithm Алгоритм Рабина Карпа

Алгоритм Рабина-Карпа

  • Алгоритм поиска / поиска строк, разработанный Майклом О. Рабиным и Ричардом М. Карпом.
  • Использует метод хэширования и грубую силу для сравнения.

Важные условия

  • pattern - строка, подлежащая поиску. Рассмотрим длину шаблона как M символов.
  • текст - это весь текст, из которого следует искать шаблон. Рассмотрим длину текста как N символов.

Что такое сравнение грубой силы?

При сравнении грубой силы каждый символ шаблона сравнивается с каждым символом текста до тех пор, пока не будут найдены символы, не соответствующие символу.

Работа алгоритма Рабина-Карпа

  1. Рассчитать хэш-значение шаблона
  2. Рассчитать хэш-значение первых M символов текста
  3. Сравните оба значения хэша
  4. Если они не равны, вычислите хэш-значение для следующих M символов текста и сравните их снова.
  5. Если они равны, выполните сравнение грубой силы.
hash_p = hash value of pattern 
 hash_t = hash value of first M letters in body of text 
 do 
    if (hash_p == hash_t) 
        brute force comparison of pattern and selected section of text 
    hash_t= hash value of next section of text, one character over 
 while (end of text or brute force comparison == true) 

Преимущество над алгоритмом наивного строкового соответствия

Этот метод приводит только к одному сравнению для каждой подпоследовательности текста, и грубая сила требуется только тогда, когда значения хэша совпадают.

Приложения

  • Обнаружение плагиата

Дополнительная информация:

Рабин-Карп в Википедии