Procesamiento de Cadenas - FisMat

Anuncio
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
Descargar