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