Estoy tratando de entender el algoritmo Bitap, pero tengo problemas para entender las razones detrás de los pasos del algoritmo.Similitud de cadenas: ¿cómo funciona exactamente Bitap?
entiendo la premisa básica del algoritmo, que es (corríjanme si me equivoco):
Two strings: PATTERN (the desired string)
TEXT (the String to be perused for the presence of PATTERN)
Two indices: i (currently processing index in PATTERN), 1 <= i < PATTERN.SIZE
j (arbitrary index in TEXT)
Match state S(x): S(PATTERN(i)) = S(PATTERN(i-1)) && PATTERN[i] == TEXT[j], S(0) = 1
En términos ingleses, PATTERN.substring(0,i)
coincide con una subcadena de texto si la subcadena anterior PATTERN.substring(0, i-1)
fue emparejado con éxito y el personaje en PATTERN[i]
es el mismo que el personaje en TEXT[j]
.
Lo que no entiendo es la implementación de cambio de bit de esto. The official paper detailing this algorithm basically lays it out, pero parece que no puedo visualizar lo que se supone que debe suceder. La especificación del algoritmo es sólo los primeros 2 páginas del periódico, pero voy a resaltar las partes importantes:
Aquí está la versión de desplazamiento de bits del concepto:
Aquí está T [texto] para una cadena de búsqueda de ejemplo:
Y aquí es una traza del algoritmo.
En concreto, no entiendo lo que significa la tabla T, y la razón detrás de OR
ing una entrada en ella con el estado actual.
Estaría agradecido si alguien puede ayudar a entender lo que está pasando exactamente en
Perdón por responder a una pregunta tan antigua, pero ¿cómo ampliaría este algoritmo para que pueda manejar la búsqueda con errores? –