• No se han encontrado resultados

Procesado de cadenas de caracteres

N/A
N/A
Protected

Academic year: 2021

Share "Procesado de cadenas de caracteres"

Copied!
29
0
0

Texto completo

(1)

1) Algoritmo Trivial

2) Algoritmo Rabin-Karp.

3) Algoritmo Knuth-Morris-Pratt

4) Algoritmo Boyer-Moore

5) Busqueda de expresiones regulares

(2)

Problema: Encontrar todas las ocurrencias de un patrón (subcadena) en una cadena de caracteres.

(3)

Ejemplo:

T= aabbdaabcdad P= aabc

(4)

Ejemplo:

T= aabbdaabcdad P= aabc

(5)

Ejemplo:

T= aabbdaabcdad P= aabc

(6)

Ejemplo:

T= aabbdaabcdad P= aabc

(7)

Ejemplo:

T= aabbdaabcdad P= aabc

(8)

Ejemplo:

T= aabbdaabcdad P= aabc

(9)

función buscar_trivial (T,P Σ∗): ΝΝ; i:=1;

repetir j:=1; k:=i;

mientras (Tk=Pj) and (j<=|P|) hacer k:=k+1;

j:=j+1; fmientras

i:=i+1;

hasta (i>(|T|-|P|)) or (j>|P|)

si j>|P| entonces devuelve (i-1) sino devuelve (0)

fin

(10)

función buscar_PD(T,P Σ∗): N;

var Tabla: matriz [0..|P|, 0..|T| de N;

para j:=0 hasta |P| hacer tabla[j,0:=j; fpara; i:=0;

mientras (i<=|T|) and (tabla[|P|,i 0) hacer tabla[0,i:=0;

para j:=0 hasta |P| hacer

tabla[j,i:=min{tabla[j-1,i, tabla[j,i-1, tabla[j-1,i-1+δ(Pj,Ti)} fpara i:=i+1; fmientras

si (i>|T|) entonces devuelve 0 sino devuelve i

fsi fin

(11)

a a b b d a a b c d a d 4 3 2 2 2 2 3 2 1 0 1 2 3

(12)

4 3 2 1 3 2 2 1 2 3 3 2 1 2 2 1 1 2 3 3 2 1 1 2 1 0 1 2 2 2 1 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 Τ= acdabpdqd P= abcd d c b a a c d a b p d q d 1 1

(13)

4 3 2 1 3 2 2 1 2 3 3 2 1 2 2 1 1 2 3 3 2 1 1 2 1 0 1 2 2 2 1 0 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 d c b a a c d a b p d q d

(14)

función buscar_error(P,T,k):conjunto de N; tabla=vector[0..|P|] de N;

f:=k+1; encontrados:= para i:=0 hasta |P| hacer

para i:=1 hasta f hacer

{tabla[i-1]+1, tabla[i]+1, d+1}

d:=tabla[i]; tabla[i]:=e;

mientras (tabla[f]>k) hacer f:=f-1

si (f=|P|) entonces insertar(encontrados,j) sino f:=f+1

(15)

Algoritmo de Knuth-Morris-Pratt Α Β Α Β C Β f f f f f f

Construccion de las función FALLO:

Trazar un arco desde el estado i al estado j tal que:

2) Los primeros j-1 caracteres del P son iguales que los j-1 caracteres que preceden a i.

1 p2 …pj-1 = pi-(j-1) …pi-1

(16)

Α Β f f f f f f Α Β Α Β C Β f f Ejemplo de alineamiento: A B A B A B X…….. A B A B A B C B

(17)

Α Β f f f f f f Α Β Α Β C Β f f Ejemplo de alineamiento: A B A B A B X…….. A B A B A B C B

(18)

función KMP(T,P:Σ∗): N; var f:vector[1..|P|] de N; f:=FF(P);

i:=1; j:=1

mientras i<=|T| hacer

mientras j<>0 and Pj<>Ti hacer j:=f(j) fmientras si j=|P| entonces devuelve (i-|P|)

(19)

función FF(P:Σ∗): vector de N; var f: vector de N;

f[1]:=0; i:=2

mientras i<=|P| hacer j:=f[i-1];

mientras j<>0 and Pj<>Pi-1 hacer j:=f[j ] fmientras f[i]:=j+1;

i:=i+1 fmientras devuelve f fin

(20)

3) Algoritmo de Boyer-Moore P1 ….……….Pm

T1 ..…Tk-m+1 ……...…….….Tk………….Tn

Tipos de desplazamiento:

a) Si Pm no coincide con Tk entonces desplazamos el patrón de forma que alineamos con la ocurrencia más a la derecha del símbolo en P. Supongamos que g es la posición en que aparece el símbolo

1 ….……… Pm-g ………..Pm

(21)

Ejemplo:

P= abdbcdabbcb

(22)

Ejemplo:

P= abdbcdabbcb

(23)

Ejemplo:

P= abdbcdabbcb abcbbdabcbdcbabxcabcbbcababcbb

(24)

b) Suponer que los últimos m-i caracteres del patrón coinciden con los últimos m-i caracteres de la cadena T, acabando en la posición k.

i+1 … ……..Pm= Tk-m+i+1 …….….Tk

Supongamos que Pi<> Tk-m+i

b1) Si la ocurrencia más a la derecha del carácter k-m+i en el patrón P es Pg entonces, como en el caso anterior, desplazamos el patrón

g posiciones hacia la derecha, de modo que se alinea Pi-g<> Tk-m+i y se comienza de nuevo a comparar m con Tk+g .

P1 ….……… Pi-g ………..Pm

(25)

b2) Si el sufijo Pi+1 … ……..Pm aparece repetidamente en el patrón en las posiciones Pi+1-g … ……..Pm-g , y Pi<>Pi-g entonces

desplazamos el patrón alineando

1 ….………..Pi+1-g …… Pm-g …..…...Pm

(26)

Función Boyer-Moore (T,P: Σ∗): ΝΝ; j:=|P|;

mientras j<=|T| hacer i:=|P|;

mientras i>0 and Pi=Tj hacer i:=i-1; j:=j-1;

fmientras

si i=0 entonces devuelve j+1

sino j:=j+ max{d1[Tj], d2[i]} fsi

fmientras fin

Calculo de d1: Para todo carácter c, d1[c] es el i más grande tal que c=Pi, o d1[c] =m si el carácter no aparece en P. Esta tabla cubre las casos a) y b1).

Calculo de d2: Para todo i, 1<=i<=|P|, d2[i] proporciona el mínimo desplazamiento g tal que cuando se alinea m sobre Tk+g , el substring Pi+1-g …… Pm-g del patrón coincide con el substring Tk-m+g+1 ……...Tk-m+i+1…..Tk de la cadena T.

(27)

4) Algoritmo de Karp-Rabin

Se basa en la aplicación de una función de

se le asigna un número.

1 …… Pm )<>h(Tk…..Tk+m-1 ) entonces no aparece el patrón en esa

1 …… Pm )=h(Tk…..Tk+m-1 ) entonces es posible que esa subcadena

corresponda con el patrón pero hay que comprobarlo carácter a carácter.

operación módulo q, siendo q un número primo grande.

Por simplicidad supongamos que los símbolos posibles son los dígitos. El

k…..Tk+m-1 sería: /*m=|P|*/

xk= Tk.bm-1+ T

k+1.bm-2 ……..Tk+m-1

Ejemplo: Si la cadena es ‘1234’ el número

k+1 se puede calcular como:

xk+1 = (xk -Tk.bm-1)b+ T k+m

(28)

Ejemplo: Supongamos que m=4

3 1 4 1 5 2

x1=31415 3 1 4 1 5 2

(29)

Función Boyer-Moore (T,P: Σ∗): ΝΝ; m:=|P|; n:=|T|; d:= bm-1 mod q; h(P):= (P1 bm-1 +P 2 bm-2 +…+P2)mod q; h(T):=(T1 bm-1 +T 2 bm-2 +…+T2)mod q;

para k:=1 hasta n-m+1 hacer

si h(P)=h(T) y (P1 …… Pm =Tk…..Tk+m-1) entonces devuelve k fsi; h(T):=(h(T)+b.q-Tk.d) mod q

h(T):=(h(T) .b+Tk+m) mod q k:=k+1

fpara fin

Referencias

Documento similar

Debido al riesgo de producir malformaciones congénitas graves, en la Unión Europea se han establecido una serie de requisitos para su prescripción y dispensación con un Plan

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

entorno algoritmo.

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

Por lo tanto, en base a su perfil de eficacia y seguridad, ofatumumab debe considerarse una alternativa de tratamiento para pacientes con EMRR o EMSP con enfermedad activa

El contar con el financiamiento institucional a través de las cátedras ha significado para los grupos de profesores, el poder centrarse en estudios sobre áreas de interés

159 Diseña un programa que lea una cadena y un número entero k y nos diga si alguna de sus palabras tiene una longitud de k caracteres.. 160 Diseña un programa que lea una cadena y