49 lines
1.6 KiB
Markdown
49 lines
1.6 KiB
Markdown
|
---
|
||
|
title: Rabin Karp Algorithm
|
||
|
---
|
||
|
|
||
|
## Rabin-Karp Algorithm
|
||
|
|
||
|
* A string matching/searching algorithm developed by Michael O. Rabin and Richard M. Karp.
|
||
|
* Uses ***hashing*** technique and ***brute force*** for comparison.
|
||
|
|
||
|
#### Important terms
|
||
|
* ***pattern*** is the string to be searched.
|
||
|
Consider length of pattern as ***M*** characters.
|
||
|
* ***text*** is the whole text from which the pattern is to be searched.
|
||
|
Consider length of text as ***N*** characters.
|
||
|
|
||
|
|
||
|
#### What is brute force comparison?
|
||
|
In brute force comparison each character of pattern is compared with each character of text untill unmatching characters are found.
|
||
|
|
||
|
#### Working of Rabin-Karp Algorithm
|
||
|
|
||
|
1. Calculate hash value of *pattern*
|
||
|
2. Calculate hash value of first *M* characters of *text*
|
||
|
3. Compare both hash values
|
||
|
4. If they are unequal, calculate hash value for next *M* characters of *text* and compare again.
|
||
|
5. If they are equal, perform a brute force comparison.
|
||
|
|
||
|
```
|
||
|
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)
|
||
|
|
||
|
```
|
||
|
#### Advantage over Naive String Matching Algorithm
|
||
|
|
||
|
This technique results in only one comparison per text sub-sequence and brute force is only required when the hash values match.
|
||
|
|
||
|
#### Applications
|
||
|
* ***Plagiarism Detection***
|
||
|
|
||
|
#### More Information:
|
||
|
<a href='https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm/' target='_blank' rel='nofollow'>Rabin-Karp on Wikipedia</a>
|
||
|
|
||
|
|