Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Procesamiento de Cadenas Apareamiento Simple de Cadenas H Tejeda Facultad de Ciencias Fı́sico Matemáticas Universidad Michoacana de San Nicolás de Hidalgo H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Aproximación basada en el prefijo Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or Aproximación basada en el sufijo Idea Boyer–Moore Algoritmo de Horspool Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Conceptos Básicos I El problema del apareamiento de cadenas es encontrar todas las ocurrencias de un patrón p = p1 p2 . . . pm en un texto largo T = t1 t2 . . . tn , donde T y p son secuencias de caracteres de un conjunto finito de caracteres Σ. I Dadas las cadenas x, y, y z, se dice que x es un prefijo de xy, un sufijo de yx, y un factor de yxz. I Los algoritmos más viejos y famosos son los de Knuth-Morris-Pratt y el de Boyer-Moore, los cuales aparecieron en 1977. I El primero es lineal respecto al tamaño del texto en el peor caso, es decir, tiene complejidad O(n), la cual es una cota inferior para el peor caso de cualquier algoritmo de apareamiento. I El segundo es O(mn) en el peor caso pero, es sublineal en el promedio, por lo tanto, evita leer algunos caracteres del texto. I Una cota inferior, demostrada por A. C. Yao en 1979, para la complejidad promedio es O(n log|Σ| m/m). H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Tipos de algoritmos I I I I I Varios estudios se han hecho para encontrar algoritmos más simples, algoritmos óptimos en el caso promedio, algoritmos que podrı́an también buscar patrones extendidos, algoritmos de espacio constante, etc. Los algoritmos que se revisarán derivan de tres aproximaciones generales de búsqueda, de acuerdo a la forma como el texto es buscado. Para todos ellos, una ventana de búsqueda del tamaño del patrón es deslizada de izquierda a derecha a lo largo del texto, y el patrón es buscado dentro de la ventana. Los algoritmos difieren en la forma como la ventana es usada. En general, las cadenas que son buscadas en textos de lenguaje natural son más simples que las secuencias de ADN, porque las primeras tienen menos repeticiones que las segundas. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Tipos de búsquedas – Prefijo I Búsqueda de prefijo. La búsqueda es hecha hacia adelante en la ventana de búsqueda, leyendo todos los caracteres del texto uno después de otro. Para cada posición de la ventana, se busca el prefijo más largo de la ventana que también es un prefijo del patrón. El algoritmo KMP usa esta aproximación. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Tipos de búsquedas – Sufijo I Búsqueda de sufijo. La búsqueda es hecha hacia atrás a lo largo de la ventana de búsqueda, leyendo el sufijo más largo de la ventana que también es un sufijo del patrón. Permite en promedio evitar leer algunos caracteres del texto, y por lo tanto da algoritmos sublineales en el caso promedio. El algoritmo BM es el más famoso, el cual ha sido simplificado por Horspool y Sunday. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Tipos de búsquedas – Factor I Búsqueda de factor La búsqueda es hecha hacia atrás en la ventana de búsqueda, buscando el sufijo más largo de la ventana que también sea un factor del patrón. Al igual que con búsqueda de sufijo, la búsqueda de factor también da algoritmos con esperanza sublineal, y algoritmos óptimos. La principal desventaja es que requiere reconocer el conjunto de factores del patrón, y es complejo. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or Aproximación Basada en el Prefijo I Suponer que se ha leı́do el texto hasta la posición i y que se conoce la longitud del sufijo más largo del texto leı́do que corresponde a un prefijo del patrón p. I Cuando su longitud es |p| se tiene una ocurrencia. El principal problema algorı́tmico es encontrar una forma eficiente para calcular esta longitud cuando se lee el siguiente carácter del texto. Hay dos formas clásicas de resolver el problema: I I I Encontrar un mecanismo que efectivamente calcule el sufijo más largo del texto leı́do que también sea un prefijo de p, preferentemente en un tiempo constante amortizado por carácter. De esta forma trabaja KMP. Mantener una clase de conjunto de todos los prefijos de p que también sean sufijos del texto leı́do, y actualizar el conjunto en cada carácter leı́do. La técnica de paralelismo de bits permite manejar tal conjunto en una forma eficiente si el patrón es lo suficientemente corto. Esto da los algoritmos ShiftAnd y Shift-Or. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or La idea de Knuth-Morris Pratt (KMP) – Desplazamiento I El algoritmo KMP actualiza para cada carácter del texto leı́do la longitud del prefijo más largo del patrón que también es un sufijo del texto. I El mecanismo está basado en la siguiente observación. I La cadena vβ es un nuevo prefijo potencial del patrón que podrı́a ser el nuevo prefijo más largo de p que también es un sufijo de t1 . . . ti+1 . I Se observa que v es un sufijo de u, y también un prefijo, llamado borde de u. También, el carácter β tiene que ser igual a ti+1 o σ. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or Idea original de Morris y Pratt I Precalcular el borde más largo b(u) de cada prefijo u del patrón. I En la posición actual, sea u el prefijo más largo de p que es un sufijo de t1 . . . ti . Se lee el carácter σ = ti+1 del texto. I I Si σ = p|u|+1 (α en la figura anterior), entonces el nuevo prefijo más largo es up|u|+1 . Si σ 6= p|u|+1 , entonces se compara σ con p|b(u)|+1 . I Si σ = p|b(u)|+1 , entonces b(u)p|b(u)|+1 es el nuevo prefijo más largo de p que es un sufijo de t1 . . . ti+1 . I Si σ 6= p|b(u)|+1 , entonces se compara σ con p|b(b(u))|+1 y ası́ sucesivamente, hasta que un borde es seguido por σ, o hasta que no haya más bordes, en tal caso el nuevo prefijo más largo es la cadena vacı́a ε. El borde vacı́o ε no tiene borde. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or Mejora de Knuth I I I I I I Se sabe que si la comparación de σ = ti+1 con p|u|+1 falla, la letra que sigue a cualquier borde de u debe diferir de p|u|+1 si esta se va a aparear con σ. Ası́, en la fase de precálculo, se puede hallar para cada prefijo propio u de p (p = uw,w 6= ε) el borde más largo v que satisfaga p|u|+1 6= p|v|+1 . KMP en el peor caso y en el caso promedio en la fase de búsqueda es O(n). En el preprocesamiento, la meta es hallar: a) para cada prefijo propio u del patrón, el borde más largo v tal que p|u|+1 6= p|v|+1 y; b) para el mismo patrón, su propio borde más largo. Ahora, si se lee el patrón p1 . . . pm carácter por carácter, y si se quiere encontrar en cada posición pi+1 la longitud del borde más largo de p1 . . . pi+1 , se quiere, de hecho, hallar el sufijo más largo de p1 . . . pi+1 que también es un prefijo de p. Se aplica KMP para buscar p en si mismo. La fase de preprocesamiento puede ser hecha con KMP, y su complejidad es O(m). La fase de preprocesamiento pueden también hacerse con KMP, y su complejidad es O(m). H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or Algoritmo Shift-And/Shift-Or I La idea de estos algoritmos es más simple que la de KMP. I Esta consiste en guardar un conjunto de todos los prefijos de p que aparean un sufijo del texto leı́do. I Los algoritmos usan paralelismo de bits para actualizar este conjunto para cada nuevo carácter del texto. El conjunto está representado por una máscara de bits D = dm . . . d1 . I Se pone un uno en la j-ésima posición de D (se dice que está activa) si y sólo si p1 . . . pj es un sufijo de t1 . . . ti . Si el tamaño de p es menor que w, entonces este arreglo cabrá en un registro de la computadora. Se reporta un apareamiento siempre que dm este activo. I Cuando se lee el siguiente carácter del texto ti+1 , se tiene que calcular el nuevo conjunto D0 . Una posición j + 1 en este conjunto se activará si y sólo si la posición j estaba activa en D, esto es, p1 . . . pj fue un sufijo de t1 . . . ti y ti+1 aparea con pj+1 . H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Algoritmo Shift-And/Shift-Or I I Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or cont. El algoritmo primero construye una tabla B, la cual guarda una máscara de bits bm . . . b1 para cada carácter. La máscara en B[c] tiene el j-ésimo bit si pj = c Inicialmente se pone D = 0m , y para cada nuevo carácter del texto ti+1 se actualiza D usando la fórmula D0 ← ((D << 1)|0m−1 1) I I I & B[ti+1 ] El costo es O(n) suponiendo que las operaciones pueden hacerse en tiempo constante, en la práctica cuando el patrón cabe en unas cuantas palabras de computadora. El algoritmo Shift-Or es una implementación mejorada de Shift-And. La idea es evitar usar la máscara “Om−1 1” de la fórmula para acelerar el cómputo. Se complementan todos los bits de la máscara de B y se usa una máscara de bits complementada, como el desplazamiento “<<” introducirá un cero a la derecha de D0 , el nuevo sufijo viniendo de la cadena vacı́a ya está en D0 . H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or Algoritmo Shift-And – Pseudocódigo Shift-And (p = p1 p2 . . . pm , T = t1 t2 ...tn ) 1. Preprocesamiento 2. Para c ∈ Σ Hacer B[c] ← 0m 3. Para j ∈ 1 . . . m Hacer B[pj ] ← B[pj ]|0m−j 10j−1 4. Búsqueda 5. D ← 0m 6. Para pos ∈ 1 . . . n Hacer 7. D ← ((D << 1)|0m−1 1) & B[tpos ] 8. Si D&10m−1 6= 0m Entonces reportar ocurrencia en pos − m + 1 H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Knuth-Morris-Pratt Algoritmo Shift-And/Shift-Or Algoritmo Shift-And – Pseudocódigo I Los algoritmos Shift-And y Shift-Or pueden ser vistos como la simulación de un autómata no determinı́stico que busca el patrón en el texto. La fórmula para actualizar D está relacionada con los movimientos en el autómata para cada nuevo carácter del texto. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Aproximación Basada en el Sufijo I La dificultad principal en esta aproximación es desplazar la ventana en una forma segura, es decir, sin perder una ocurrencia del patrón. I Se presenta la idea del algoritmo de Boyer-Moore (BM) aparecida en 1977 y la simplificación de Horspool en 1980. I BM mejora a los algoritmos de las otras dos aproximaciones generales, pero nunca es el más rápido. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Idea de Boyer – Moore I El algoritmo precalcula tres funciones d1 , d2 , d3 . Para todas ellas, se ha leı́do un sufijo u de la ventana de búsqueda que también es un sufijo del patrón, y se ha fallado en un carácter del texto σ que no aparea con el siguiente carácter α del patrón. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Idea de Boyer – Moore – Primer caso d1 I El sufijo u ocurre en otra posición como un factor de p. Entonces un desplazamiento seguro es mover la ventana de tal forma que u en el texto aparee la siguiente ocurrencia de u en el patrón. I La idea es calcular para cada sufijo del patrón la distancia a la posición de su siguiente ocurrencia hacia atrás en el patrón. I Si el sufijo u de p no se aparea otra vez en p, entonces u está asociada por d1 al tamaño m del patrón entero. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Idea de Boyer – Moore – Segundo caso d2 I El sufijo u no ocurre en ninguna otra posición como un factor de p. Lo que no significa que no se pueda saltar de manera segura la ventana de búsqueda entera. I Un sufijo v de u puede también ser un prefijo del patrón I Para este caso, se calcula la función d2 para todos los sufijos del patrón, esta asocia a cada sufijo u de p la longitud del prefijo más largo v de p que también es un sufijo de u. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Idea de Boyer – Moore – Tercer caso d3 I La búsqueda hacia atrás ha fallado en el carácter del texto σ. Si se desplaza la ventana con la primera función d1 y esta letra no está alineada con un σ en el patrón, se hará una verificación no necesaria de la nueva ventana de búsqueda. I d3 es calculada para asegurar que el carácter del texto σ corresponderá a un σ en el patrón para la siguiente verificación. d3 asocia para cada carácter σ del alfabeto la distancia de su ocurrencia más a la derecha al final del patrón. Si un carácter σ no ocurre en p esta es asociada con m. I H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Desplazamiento de la ventana I Para desplazar la ventana después de leer u y fallar en σ, el algoritmo compara dos desplazamientos: I I El máximo entre los desplazamientos dados por d1 (u) y d3 (σ), como se quiere alinear u con su siguiente ocurrencia en el patrón, sabiendo que el σ del texto tiene que aparear otro σ en el patrón; El mı́nimo entre el resultado del previo máximo y m − d2 (u), ya que la última expresión es el desplazamiento máximo seguro que puede ser hecho. I Sin embargo, si el inicio de la ventana ha sido alcanzado, lo cual significa que se ha encontrado una ocurrencia, solamente la función d2 es usada para desplazar la ventana de búsqueda. I La parte de la búsqueda tiene complejidad O(mn) en el peor caso, pero es sublineal en el promedio. Muchas variantes han sido diseñadas para hacerlo lineal en el peor caso. I El inconveniente principal es el cálculo de las funciones d1 , d2 , y d3 . Pueden calcularse en tiempo O(m), pero es difı́cil. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Algoritmo de Horspool I El algoritmo BM fue primero simplificado por Horspool, quien asumió que, para un alfabeto razonablemente largo, la función de desplazamiento d3 dará siempre el máximo desplazamiento. I Horspool solo consideró una pequeña modificación de d3 que es fácil de calcular y da desplazamientos mas largos. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Algoritmo de Horspool Idea Boyer–Moore Algoritmo de Horspool cont. I Para cada posición de la ventana de búsqueda, se compara su último carácter (β en la figura) con el último carácter del patrón. Si se aparean, se verifica la ventana de búsqueda hacia atrás contra el patrón hasta que se halla el patrón o se falla en algún carácter del texto (σ en la figura). I Entonces, si hubo o no un apareamiento, se desplaza la ventana de acuerdo a la siguiente ocurrencia de la letra β en el patrón. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool Algoritmo de Horspool – Pseudocódigo Horspool(p = p1 p2 . . . pm , T = t1 t2 . . . tn ) 1. Preprocesamiento 2. Para c ∈ Σ Hacer d[c] ← m 3. Para j ∈ 1 . . . m − 1 Hacer d[pj ] ← m − j 4. Búsqueda 5. pos ← 0 6. Mientras pos ≤ n − m Hacer 7. j←m 8. Mientras j > 0 Y tpos+j = pj Hacer j ← j − 1 9. Si j = 0 Entonces reportar una ocurrencia en pos + 1 10. pos ← pos + d[tpos+m ] I La verificación también podrı́a hacerse hacia adelante. Varias implementaciones usan una instrucción de comparación construida en memoria. I El ciclo principal puede ser “desenrollado”, lo que significa que se puede primero desplazar la ventana de búsqueda hasta que su último carácter aparee el último carácter del patrón, y entonces hacer verificación. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Boyer–Moore Algoritmo de Horspool La Variante de Sunday I En vez de desplazar la ventana usando su último carácter, se podrı́a usar el siguiente carácter después de la ventana, lo cual lleva en promedio a desplazamientos más largos. I Lo anterior fue propuesto por Sunday. A pesar de que los desplazamientos son más largos, el pequeño número de referencias de memoria del algoritmo desenrollado de Horspool lo hace más rápido en general. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Aproximación Basada en el Factor I Da algoritmos óptimos en el caso promedio, si los caracteres del texto son independientes y ocurren con la misma probabilidad. La idea para mover la ventana de búsqueda es elegante y simple. I Suponiendo que se ha leı́do hacia atrás un factor u del patrón, y que se falló en el siguiente carácter σ, por lo que la cadena σu deja de ser un factor de p, por lo tanto no hay ocurrencia de p que pueda contener σu, y se puede desplazar la ventana de forma segura después de σ. I La principal desventaja es que requiere reconocer el conjunto de factores del patrón. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Aproximación Basada en el Factor – Algoritmos I El algoritmo Backward Dawg Matching (BDM) usa un autómata de sufijos, el cual es una estructura potente pero compleja. I El algoritmo no se describe ahora porque: a) Sı́ el patrón es corto, menor que w, el autómata se simula con paralelismo de bits. El algoritmo, Backward Nondeterministic Dawg Matching (BNDM), es más rápido que BDM, más simple de implementar, y se usa para patrones extendidos. b) Si el patrón es mayor que w, el algoritmo Backward Oracle Matching, basado en una modificación de la aproximación basada por factor, da los mismos tiempos experimentales que BDM, pero con un autómata más simple, llamado el oráculo de factor. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Idea Backward Dawg Matching I BDM usa un autómata de sufijos para hacer la búsqueda del factor. Además mejora la aproximación básica de búsqueda. I Se requiere reconocer si una palabra dada u es un factor del patrón p. I Con diversas estructuras de indexamiento se puede determinar si u es un factor de p en tiempo O(|u|). La estructura más clásica es el árbol sufijo compacto, donde las transiciones están codificadas como factores del patrón, y para pasar a través de una transición se necesita acceder a una parte arbitraria del patrón. I El autómata de sufijos tiene la misma eficiencia, pero sus transiciones están etiquetadas con un sólo carácter, lo cual acelera la búsqueda y a los algoritmos de apareamiento que lo usan. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Autómatas de Sufijos – Propiedades Básicas P r1 Permite determinar si una cadena u es un factor de una cadena p en tiempo O(|u|). Una cadena u es un factor en el autómata de sufijos construido sobre p si y sólo si hay un camino etiquetado u empezando en el nodo inicial. P r2 Permite reconocer los sufijos del patrón sobre el cual está construido. Si un camino empezando en el nodo inicial alcanza un estado terminal del autómata construido sobre p, significa que la etiqueta de este camino es un sufijo de p. P r3 Se construye sobre p = p1 p2 . . . pm en tiempo O(m) con un algoritmo en lı́nea, ası́ los caracteres pj se agregan uno después de otro en la estructura, se actualiza en cada paso j el autómata de sufijos del prefijo p1 . . . pj−1 para obtener p1 . . . pj . H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching BDM – Algoritmo de Búsqueda I BDM hace uso de las propiedades del autómata de sufijos para la aproximación general, pero la propiedad P r2 permite una mejora. I Para buscar un patrón p = p1 p2 . . . pm en un texto T = t1 t2 . . . tn se construye el autómata de sufijos de pinv = pm pm−1 . . . p1 . I El algoritmo busca hacia atrás a lo largo de la ventana por un factor del patrón usando el autómata de sufijos. I Sı́ en la búsqueda un estado terminal es alcanzado y no corresponde al patrón entero, la posición en la ventana se guarda en la variable last. I Por la propiedad P r2 esto corresponde a encontrar un prefijo del patrón iniciando en posición last dentro de la ventana y terminando en el fin de la ventana ya que los sufijos de pinv son los prefijos invertidos de p. I Como se guarda el último prefijo reconocido hacia atrás, se tiene el prefijo más largo de p en la ventana. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching BDM – Terminación de la Búsqueda Hacia Atrás (i) Se falla para reconocer un factor, es decir, se alcanzó una letra σ que no corresponde a una transición en el autómata de sufijos de pinv . Entonces se mueve la ventana para que la nueva posición inicial corresponda a la posición last. No se puede omitir una ocurrencia por que el autómata de sufijos habrı́a encontrado su prefijo en la ventana. (ii) Se alcanza el inicio de la ventana, por lo tanto se reconoce el patrón p. Se reporta la ocurrencia, y se mueve la ventana exactamente como en el caso anterior. El algoritmo tiene tiempo O(mn) en el peor caso. Es óptimo en el promedio, O(n log|Σ| m/m), suponiendo que los caracteres del texto son independientes y con la misma probabilidad de ocurrencia. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Backward Nondeterministic Dawg Matching (BNDM) I I I I El algoritmo BNDM usa la misma aproximación de búsqueda que BDM, pero el factor es buscado usando paralelismo de bits. BNDM es más simple, usa menos memoria, tiene más localidad de referencia, y es más fácil de extender a patrones complejos, que BDM. Se mantiene un conjunto de posiciones sobre el patrón invertido que son posiciones iniciales de la cadena u leı́da en el texto. El conjunto es guardado con 0 y 1, donde el 1 representa un estado activo en la posición j de p, indicando que el factor pj . . . pj+|u|−1 es igual a u. Si el patrón es de tamaño menor que w, entonces el conjunto cabe en una palabra de computadora D = dm . . . d1 . H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching BNDM — Actualización de D I En la actualización del arreglo D a D0 después de leer un nuevo carácter σ del texto, un estado j de D0 estará activo si este corresponde al inicio de la cadena σu en el patrón: I I I u inicia en la posición j + 1 en el patrón, ası́ la j + 1-ésima posición en D está activa, y σ esta en la posición j en el patrón. Se precalcula la tabla B para asociar a cada letra de p su posición en esta mediante una máscara de bits, luego se halla D0 con D: D0 ← (D << 1) I I & B[σ] Se desea marcar en la D inicial que cada posición de D empata la cadena vacı́a, es decir, D debiera ser 1m , pero el primer desplazamiento dará (D << 1) = 1m−1 0 y se perderá el primer factor, lo cual corresponde a la palabra entera. La solución más simple es tomar D de tamaño m + 1, pero se reduce a w − 1 la longitud máxima de la cadena que se puede buscar, en vez de lo anterior se divide la fórmula en 2 partes. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching BNDM — Actualización de D en 2 pasos I I I I I Primero se hace la operación D10 ← D & B[σ] y se verifica el apareamiento, luego se realiza el desplazamiento D0 ← D10 << 1. La inicialización es entonces D = 1m . Una cadena leı́da en el texto es un prefijo de p si la primera posición está activa, es decir, si en D10 la posición dm está activa. Cada vez que el bit dm está activo, la posición de la ventana es guardada en la variable last. BNDM tiene la misma complejidad O(mn) en el peor caso que BDM, y también la misma complejidad O(n log|Σ| m/m) en el caso promedio. La búsqueda de factor con paralelismo de bits es una simulación de un autómata no determinı́stico que reconoce todos los sufijos del patrón invertido. La versión mı́nima determinı́stica es el autómata de sufijos usado en BDM. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Pseudocódigo de paralelismo de bits para BNDM BNDM(p = p1 p2 . . . pm , T = t1 t2 . . . tn ) 1. Preprocesamiento 2. Para c ∈ Σ Hacer B[c] ← 0m 3. Para j ∈ 1 . . . m Hacer B[pj ] ← B[pj ]|0j−1 10m−j 4. Búsqueda 5. pos ← 0 6. Mientras pos ≤ n − m Hacer 7. j ← m, last ← m 8. D ← 1m 9. Mientras D 6= 0m Hacer 10. D ← D & B[tpos+j ] 11. j ←j−1 12. Si D & 10m−1 6= 0m Entonces 13. Si j > 0 Entonces last ← j 14. Si no reportar una ocurrencia en pos + 1 15. D ← D << 1 16. pos ← pos + last H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Algoritmo Backward Oracle Matching (BOM) I Para patrones mayores que w, el algoritmo BDM podrı́a ser necesario pero la complejidad de la construcción del autómata de sufijos lo hace impráctico. I Una solución está basada en la observación de que, para desplazar la ventana en la aproximación de búsqueda general de factor, no es necesario saber que u es un factor, es suficiente con saber que σu no lo es, ver figura de aproximación por factor. I La estructura del oráculo de factor tiene esta particularidad, la cual se construye sobre una cadena p, reconoce más que el conjunto de factores de p. Es fácil de entender e implementar además de ser compacta, por lo que la eficiencia perdida por leer caracteres de más en la búsqueda hacia atrás es recuperada haciendo menos fallas de página. I Se denota por θ un objeto que no está definido para simplificar la notación. Por ejemplo, en un autómata, δ(q, α) = θ significa que no hay transición de salida desde q etiquetada con α. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Oráculo de Factor – Construcción 1/2 I Se construye sobre una cadena p = p1 p2 . . . pm y es un autómata acı́clico determinı́stico que tiene m + 1 estados y de m hasta 2m − 1 transiciones. La función de transición se denota por δ. I Los m+1 estados corresponden a los caracteres de p, incluyendo una primera posición 0 antes del patrón completo. Un estado 0 < i ≤ m corresponde al prefijo p1 . . . pi . I Las primeras m transiciones deletrean el propio patrón en una lı́nea. Se construye una transición del estado i − 1 a i etiquetado por pi con 0 < i ≤ m. Las transiciones y estados pueden ser guardados implı́citamente con el mismo patrón. I Luego se construyen las “transiciones externas”, de las cuales hay a lo más m − 1. Se asocia a cada estado i otro estado j < i, llamado su “estado fuente” y denotado por j = S(i). La “función fuente” es construida junto con las transiciones externas. S(0) es puesta a θ. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Oráculo de factor – Construcción 2/2 I El algoritmo de construcción procede inspeccionando cada estado desde 1 hasta m. Para procesar el estado i, primero se desciende con la función fuente desde el estado i − 1. Se usa la variable k inicializándola a S(i − 1) y se repiten los siguientes pasos. 1. Si k = θ, entonces S(i) ← 0. 2. Si k 6= θ y no existe una transición desde el estado k etiquetado por pi , entonces se construye una transición desde el estado k al estado i etiquetado con pi , y se regresa al paso 1 con k ← S(k). 3. Si k 6= θ y existe una transición desde k etiquetada por pi , llevando a un estado j, entonces se pone S(i) ← j y se termina de procesar el estado i. I La construcción es simple, y se hace en lı́nea ya que se agregan las letras pi una después de otra para construir el nuevo estado i y todas las nuevas transiciones en ese momento. I El algoritmo es lineal respecto al tamaño del patrón. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Oráculo de factor – Pseudocódigo Oráculo agrega letra(Oráculo(p = p1 p2 . . . pm ),σ) Crear un nuevo estado m + 1 δ(m, σ) ← m + 1 k ← S(m) Mientras k 6= θ Y δ(k, σ) = θ Hacer δ(k, σ) ← m + 1 k ← S(k) Si k = θ Entonces s ← 0 Si no s ← δ(k, σ) S(m + 1) ← s Regresar Oráculo(p = p1 p2 . . . pm σ) Oráculo-en-lı́nea(p = p1 p2 . . . pm ) Crear Oráculo(ε) con: Un sólo estado inicial 0 S(0) ← θ Para j ∈ 1 . . . m Hacer Oráculo(p = p1 p2 . . . pj ) ← Oráculo agrega letra(Oráculo(p = p1 p2 . . . pj−1 ),pj ) H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Oráculo de factor – Análisis I El oráculo de factor construido sobre p reconoce todos los factores de p. Realmente reconoce más, pero no mucho en la práctica, y este reconoce solamente una cadena de tamaño m, el mismo patrón. I Para codificarlo, la forma más fácil en la práctica es usar una tabla (m + 1) × |Σ|. Esta representación tiene la ventaja de dar tiempo de acceso O(1) a las transiciones, lo cual acelera el algoritmo de búsqueda. Sin embargo, para patrones muy largos, una implementación en espacio O(m) tiene que ser considerada. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Backward Oracle Matching (BOM) I BOM emplea el Oráculo de Factor. I Se leen hacia atrás en la ventana los caracteres de texto en el oráculo de factor del patrón invertido pinv . I Si se falla en una letra σ después de leer una cadena u, se sabe que σu no es un factor de p y se puede desplazar de manera segura la ventana después de la letra σ. I Si el inicio de ventana es alcanzado, entonces, como el oráculo de factor reconoce solamente una cadena de tamaño |p|, se marca un apareamiento y se desplaza la ventana un carácter. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching BOM – Pseudocódigo BOM(p = p1 p2 . . . pm , T = t1 t2 . . . tn ) Preprocesamiento Oráculo-en-lı́nea(pinv ) δ es su función de transición Búsqueda pos ← 0 Mientras pos ≤ n − m Hacer j←m Mientras j > 0 Y Actual 6= θ Hacer Actual ← δ(Actual, tpos+j ) j ←j−1 Si Actual 6= θ Entonces marcar una ocurrencia en pos + 1 pos ← pos + j + 1 I BOM tiene tiempo O(mn) en el peor caso. A partir de resultados experimentales se conjetura que es óptimo en el promedio. H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Oráculos de Factor para “announce” y “ATATA” H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Mapa Experimental H Tejeda Procesamiento de Cadenas Contenido Conceptos básicos Aproximación basada en el prefijo Aproximación basada en el sufijo Aproximación basada en el factor Idea Backward Dawg Matching Algoritmo Backward Nondeterministic Dawg Matching Algoritmo Backward Oracle Matching Mapa Experimental I El mapa de eficiencia de diferentes algoritmos de apareamiento de cadenas se muestra en la lámina anterior, mostrando las zonas donde son más eficientes en la práctica. I Los experimentos fueron hechos en un equipo con w = 32. Textos de 10 Mb fueron construidos aleatoriamente, al igual que los patrones. I Los resultados con secuencias de DNA resultaron ser los mismos que para el texto aleatorio de tamaño 4. I Un hecho más sorprendente es que los resultado con el inglés son casi los mismos que para aquellos de un texto aleatorio de tamaño 16. I El mapa muestra que el algoritmo Horspool se hace cada vez más difı́cil de batir conforme el alfabeto crece. El algoritmo BNDM está confinado a una zona pequeña para alfabetos de tamaño pequeño, pero el mapa no refleja su habilidad para manejar cadenas extendidas. El Shift-Or gana solamanente para cadenas pequeñas en alfabetos de tamaño muy pequeño. H Tejeda Procesamiento de Cadenas