1 / 43

Procesamiento de cadenas

Procesamiento de cadenas. Búsqueda de cadenas. 0. 1. 0. a. b. c. 0. 1. 1. A menudo sucede que los datos a procesar no se descomponen lógicamente en registros independientes que representen pequeñas partes identificables. Búsqueda de cadenas.

svea
Download Presentation

Procesamiento de cadenas

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.

  11. 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.

  12. 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.

  13. 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.

  14. 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.

  15. 100111010010100010100111000111 Reconocer la cadena: 10100111

  16. 100111010010100010100111000111 10100111 10100111 10100111 10100111 10100111 10100111 100111010010100010100111000111

  17. 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). Algoritmo de Knuth-Morris-Pratt

  18. 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.

  19. 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.

  20. 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.

  21. 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.

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

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

  24. 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.

  25. 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.

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

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

  28. 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.

  29. 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.

  30. Ejemplo:

  31. Algoritmo Boyer-Moore

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

  33. 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.

  34. 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.

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

  36. 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.

  37. 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).

  38. 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.

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

  40. Ejemplo:

  41. 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.

  42. 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).

More Related