46 lines
1.8 KiB
Markdown
46 lines
1.8 KiB
Markdown
|
---
|
||
|
title: Rabin Karp Algorithm
|
||
|
localeTitle: Algoritmo de Rabin Karp
|
||
|
---
|
||
|
## Algoritmo de Rabin-Karp
|
||
|
|
||
|
* Un algoritmo de búsqueda / búsqueda de cadenas desarrollado por Michael O. Rabin y Richard M. Karp.
|
||
|
* Utiliza la técnica de **_hash_** y **_la fuerza bruta_** para comparación.
|
||
|
|
||
|
#### Términos importantes
|
||
|
|
||
|
* **_patrón_** es la cadena a buscar. Considere la longitud del patrón como **_M_** caracteres.
|
||
|
* **_texto_** es el texto completo desde el que se busca el patrón. Considere la longitud del texto como **_N_** caracteres.
|
||
|
|
||
|
#### ¿Qué es la comparación de fuerza bruta?
|
||
|
|
||
|
En la comparación de fuerza bruta, cada carácter del patrón se compara con cada carácter del texto hasta que se encuentran caracteres no coincidentes.
|
||
|
|
||
|
#### Trabajo del algoritmo de Rabin-Karp
|
||
|
|
||
|
1. Calcular el valor de hash del _patrón_
|
||
|
2. Calcular el valor hash de los primeros _M_ caracteres del _texto_
|
||
|
3. Compara ambos valores hash
|
||
|
4. Si son desiguales, calcule el valor de hash para los siguientes _M_ caracteres del _texto_ y compare nuevamente.
|
||
|
5. Si son iguales, realice una comparación de fuerza bruta.
|
||
|
```
|
||
|
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)
|
||
|
```
|
||
|
|
||
|
#### Ventaja sobre el algoritmo de emparejamiento de cadenas ingenuas
|
||
|
|
||
|
Esta técnica produce solo una comparación por secuencia de texto y la fuerza bruta solo se requiere cuando los valores de hash coinciden.
|
||
|
|
||
|
#### Aplicaciones
|
||
|
|
||
|
* **_Detección de plagio_**
|
||
|
|
||
|
#### Más información:
|
||
|
|
||
|
[Rabin-Karp en Wikipedia](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm/)
|