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

46 lines
2.6 KiB
Markdown
Raw Normal View History

2018-10-12 20:00:59 +00:00
---
title: Rabin Karp Algorithm
localeTitle: Алгоритм Рабина Карпа
---
## Алгоритм Рабина-Карпа
* Алгоритм поиска / поиска строк, разработанный Майклом О. Рабиным и Ричардом М. Карпом.
* Использует метод **_хэширования_** и **_грубую силу_** для сравнения.
#### Важные условия
* **_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)
```
#### Преимущество над алгоритмом наивного строкового соответствия
Этот метод приводит только к одному сравнению для каждой подпоследовательности текста, и грубая сила требуется только тогда, когда значения хэша совпадают.
#### Приложения
* **_Обнаружение плагиата_**
#### Дополнительная информация:
[Рабин-Карп в Википедии](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm/)