procesamiento de cadenas búsqueda de cadenas acb 010 1 0 1

43
Procesamiento de cadenas Búsqueda de cadenas a c b 0 1 0 1 0 1

Upload: vito-meraz

Post on 11-Jan-2015

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Procesamiento de cadenas

Búsqueda de cadenas

a cb0 1 0

1 0

1

Page 2: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Búsqueda de cadenas

A menudo sucede que los datos a procesar no se descomponen lógicamente en registros independientes que representen pequeñas partes identificables.

Page 3: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Este tipo de datos se caracteriza fácilmente por el hecho de que se pueden escribir en forma de cadenas: series lineales (por lo regular muy largas) de caracteres. Por supuesto que ya hemos comentado las cadenas antes.

Page 4: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Las cadenas son evidentemente el centro de los sistemas de tratamiento de texto, que proporcionan una gran variedad de posibilidades para la manipulación de textos.

Page 5: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Tales sistemas procesan cadenas alfanuméricas, que pueden definirse en primera aproximación como series de letras, números y caracteres especiales.

Estos objetos pueden ser bastante grandes, por lo que es importante disponer de algoritmos eficaces para su manipulación.

Page 6: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

• Otro tipo de cadena es la cadena binaria, que es una simple serie de valores 0 y 1. Esta es, en cierto sentido, un tipo especial de cadena alfanumérica, pero es útil hacer la distinción porque existen diferentes algoritmos específicos para este tipo de cadenas y porque las cadenas binarias se utilizan en muchas aplicaciones.

Page 7: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Por ejemplo, algunos sistemas gráficos de computadoras representan las imágenes como cadenas binarias.

Un libro que fue impreso con un sistema de este tipo: la página se representa en su momento como unacadena binaria de millones de bits.

Page 8: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

En un sentido, las cadenas alfanuméricas son objetos bastante diferentes de las cadenas binarias, porque están constituidas por caracteres tomados de un gran alfabeto.

Page 9: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Pero, en otro sentido, los dos tipos de cadenas son equivalentes, puesto que cada carácter alfanumérico se puede representar (por ejemplo) con ocho cifras binarias, y una cadena binaria puede considerarse como una alfanumérica, al tratar cada paquete de ocho bits como un carácter.

Page 10: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

El tamaño del alfabeto que se toma para formar una cadena es un factor importante en el diseño de los algoritmos de procesamiento de cadenas.

Page 11: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Una operación fundamental sobre las cadenas es el reconocimiento de patrones: dada una cadena alfanumérica de longitud N y un patrón de longitud M, encontrar una ocurrencia del patrón dentro del texto.

NOTA: Se utilizará texto aún cuando se haga referencia a 0 y 1.

Page 12: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

La mayoría de los algoritmos para este problema se pueden modificar fácilmente para encontrar todas las ocurrencias del patrón en el texto, puesto que recorren el texto en secuencia y se pueden reinicializar en la posición situada inmediatamente después del comienzo de una concordancia, para encontrar la concordancia siguiente.

Page 13: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

El problema del reconocimiento de patrones se puede caracterizar como el problema de búsqueda en el que el patrón sería la clave, pero los algoritmos de búsqueda que se han estudiado no se pueden aplicar directamente porque el patrón puede ser largo y porque se alinea en el texto de forma desconocida.

Page 14: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Algoritmo de fuerza bruta

El método en el que se piensa de inmediato para el reconocimiento de patrones consiste simplemente en verificar, para cada posición posible del texto en la que el patrón pueda concordar, si efectivamente lo hace.

Page 15: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

100111010010100010100111000111

Reconocer la cadena: 10100111

Page 16: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

10011101001010001010011100011110100111 10100111 10100111 10100111 10100111 10100111

100111010010100010100111000111

Page 17: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Algoritmo de Knuth-Morris-Pratt

La idea básica de este algoritmo descubierto por Knuth, Morris y Pratt es la siguiente: cuando se detecta una discordancia (no concordancia), el <falso> principio se compone de los caracteres que se conocen por adelantado (puesto que están en el patrón).

Page 18: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Como un ejemplo, se supone que el primer carácter del patrón sólo aparece una vez. Supóngase ahora que se tiene un falso principio de j caracteres de longitud en alguna posición del texto.

Page 19: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Cuando se detecta la no concordancia, se sabe, en virtud del hecho de que concuerdan j caracteres, que no se necesita <retroceder> el puntero i del texto, puesto que ninguno de los j-1 caracteres del texto pueden concordar con el primer carácter del patrón.

Page 20: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Saltar todos los caracteres del patrón cuando se detecta una discordancia, sería un error en el caso en el que el patrón se repita en el propio punto de la concordancia.

Page 21: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

•Por ejemplo, cuando se está buscando 10100111 en 1010100111.

Se comienza por detectar el quinto carácter, pero se debe retroceder al tercero para continuar con la búsqueda, puesto que de lo contrario se perdería la concordancia.

Page 22: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

En todo caso se puede prever la acción a tomar, adelantándose en el tiempo, porque depende sólo del patrón.

Page 23: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Suponga que se está comparando el patrón y el texto en una posición dada, cuando se encuentra una discrepancia.

Page 24: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Sea X la parte del patrón que calza con el texto, e Y la correspondiente parte del texto, y suponga que el largo de X es j. El algoritmo de fuerza bruta mueve el patrón una posición hacia la derecha, sin embargo, esto puede o no puede ser lo correcto en el sentido que los primeros j-1 caracteres de X pueden o no pueden calzar los últimos j-1 caracteres de Y.

Page 25: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

• La observación clave que realiza el algoritmo Knuth-Morris-Pratt (en adelante KMP) es que X es igual a Y, por lo que la pregunta planteada en el párrafo anterior puede ser respondida mirando solamente el patrón de búsqueda, lo cual permite precalcular la respuesta y almacenarla en una tabla.

Page 26: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

• Por lo tanto, si deslizar el patrón en una posición no funciona, se puede intentar deslizarlo en 2, 3, ..., hasta j posiciones.

Page 27: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Se define la función de fracaso (failure function) del patrón como:

Page 28: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

• Intuitivamente, f(j) es el largo del mayor prefijo de X que además es sufijo de X. Note que j = 1 es un caso especial, puesto que si hay una discrepancia en b1 el patrón se desliza en una posición.

Page 29: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

• Si se detecta una discrepancia entre el patrón y el texto cuando se trata de calzar bj+1, se desliza el patrón de manera que bf(j) se encuentre donde bj se encontraba, y se intenta calzar nuevamente.

Page 30: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1
Page 31: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Ejemplo:

Page 32: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

•Algoritmo Boyer-Moore

Page 33: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Hasta el momento, los algoritmos de búsqueda en texto siempre comparan el patrón con el texto de izquierda a derecha.

Page 34: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Sin embargo, suponga que la comparación ahora se realiza de derecha a izquierda: si hay una discrepancia en el último carácter del patrón y el carácter del texto no aparece en todo el patrón, entonces éste se puede deslizar m posiciones sin realizar niguna comparación extra.

Page 35: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

En particular, no fue necesario comparar los primeros m-1 caracteres del texto, lo cual indica que podría realizarse una búsqueda en el texto con menos de n comparaciones; sin embargo, si el carácter discrepante del texto se encuentra dentro del patrón, éste podría desplazarse en un número menor de espacios.

Page 36: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

El método descrito es la base del algoritmo Boyer-Moore, del cual se estudiarán dos variantes: Horspool y Sunday.

Page 37: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

•Boyer-Moore-Horspool (BMH)

El algoritmo BMH compara el patrón con el texto de derecha a izquierda, y se detiene cuando se encuentra una discrepancia con el texto.

Page 38: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Cuando esto sucede, se desliza el patrón de manera que la letra del texto que estaba alineada con bm, denominada c, ahora se alinie con algún bj, con j<m, si dicho calce es posible, o con b0, un carácter ficticio a la izquierda de b1, en caso contrario (este es el mejor caso del algoritmo).

Page 39: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

• Para determinar el desplazamiento del patrón se define la función siguiente como:

• 0 si c no pertenece a los primeros m-1 caracteres del patrón.

• j si c pertenece al patrón, donde j<m corresponde al mayor índice tal que bj==c.

Page 40: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Esta función sólo depende del patrón y se puede precalcular antes de realizar la búsqueda.

Page 41: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

Ejemplo:

Page 42: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

•Boyer-Moore-Sunday (BMS)

El algoritmo BMH desliza el patrón basado en el símbolo del texto que corresponde a la posición del último carácter del patrón. Este siempre se desliza al menos una posición si se encuentra una discrepancia con el texto.

Page 43: Procesamiento de cadenas Búsqueda de cadenas acb 010 1 0 1

• Es fácil ver que si se utiliza el carácter una posición más adelante en el texto como entrada de la función siguiente el algoritmo también funciona, pero en este caso es necesario considerar el patrón completo al momento de calcular los valores de la función siguiente. Esta variante del algoritmo es conocida como Boyer-Moore-Sunday (BMS).