46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
|
---
|
|||
|
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/)
|