Академический Документы
Профессиональный Документы
Культура Документы
LA BUSQUEDA: CAPTULO 10
Ricardo A. Baeza-Yates
Departamento de Ciencias de la Computacin, Universidad de Chile,
Casilla 2777, Santiago, Chile
Resumen.
Hacemos un estudio de varios algoritmos para la bsqueda de una
cadena en un texto. Se incluyen los resultados tericos y empricos, as
como el cdigo real de cada algoritmo. Una extensa bibliografa tambin
se incluye.
10.1 INTRODUCCIN
Bsqueda de cuerdas es un componente importante de muchos
problemas, entre ellos la edicin de texto, recuperacin de datos, y
manipulacin de smbolos. A pesar de la utilizacin de ndices para la
bsqueda de grandes cantidades de texto, bsqueda de cadenas puede
ayudar en un sistema de recuperacin de informacin. Por ejemplo,
puede ser utilizado para el filtrado de potencial partidos o para buscar
trminos de recuperacin que se destacan en la salida.
La bsqueda de cuerda o cadena coincidente problema consiste en
encontrar todos los sucesos (o la primera aparicin) de un patrn en un
texto, en el que el patrn y el texto son las cadenas sobre algn alfabeto.
Estamos interesados en la presentacin de informes de todas las
ocurrencias. Es bien sabido que para buscar un patrn de longitud m en
un texto de longitud n (donde n> m) el tiempo de bsqueda es 0 (n) en el
peor de los casos (para m fijo). Adems, en el peor de los casos, por lo
menos n - m + 1 caracteres deben ser inspeccionados. Este resultado se
debe a Rivest (1977). Sin embargo, para los diferentes algoritmos de la
constante en el trmino lineal puede ser muy diferente. Por ejemplo, en
el peor de los casos, el mltiplo constante en el algoritmo ingenuo es m,
mientras que para la de Knuth-Morris-Pratt (1977) algoritmo es dos.
Se presentan los algoritmos ms importantes para la cadena coincidente:
el algoritmo de fuerza bruta o ingenuo, el (1977) del algoritmo de Knuth-
Morris-Pratt, distintas variantes del algoritmo de Boyer-Moore (1977), el
Shift-o algoritmo de Baeza-Yates y Gonnet (1989), y la Karp-Rabin
(1987) algoritmo, que es probabilstica. Los resultados experimentales de
texto al azar y una muestra de texto Ingls estn incluidos. Se revisan
tambin los principales resultados tericos para cada algoritmo.
Aunque slo cubrimos la bsqueda de cuerdas, se dan referencias para
problemas relacionados. Utilizamos el lenguaje de programacin C
descrito por Kernighan y Ritchie (1978) para presentar nuestros
algoritmos.
10.2 PRELIMINARES
Nosotros usamos la siguiente notacin:
n: la longitud del texto
m: la longitud del patrn (cadena).
C: el tamao del alfabeto *.