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/) |