Você está na página 1de 36

Proiectarea algoritmilor: Cautare peste siruri

Dorel Lucanu
Faculty of Computer Science
Alexandru Ioan Cuza University, Iasi, Romania
dlucanu@info.uaic.ro

PA 2014/2015

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

1 / 36

Outline

Algoritmul Aho-Corasick

Expresii regulate

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

2 / 36

Algoritmul Aho-Corasick

Plan

Algoritmul Aho-Corasick

Expresii regulate

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

3 / 36

Algoritmul Aho-Corasick

Problema cautarii pentru mai multe pattern-uri

Input Un sir s = s0 sn1 , numit subiect sau text, si o multime de


pattern-uri P = {P0 , . . . Pk1 }.
Output Aparitiile pattern-elor Pj n textul s, daca exista. Notam
m=

Pk1
j=0

|Pj |.

Utilizarea unui algoritm de cautare liniar determina paritiile n timpul


O(n + k m).
Algoritmul Aho-Corasick (1975) poate realiza cautarea n timpul
O(n + m + z), unde z este numarul de aparitii.

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

4 / 36

Algoritmul Aho-Corasick

Arbore digital
P == {amar , mar , martie, rama, manta}
1

{amar}
4

a
m

{manta}
9

r
10
{mar}

r
14 a

15 m

D. Lucanu (FII - UAIC)

16 a

11

12

13

{martie}

17
{rama}

C
autare peste siruri

PA 2014/2015

5 / 36

Algoritmul Aho-Corasick

Structura de date pentru arborele digital


1

{amar}
4

a
m

{manta}
9

r
10
{mar}

r
14 a

15 m

16 a

11

12

13

{martie}

17
{rama}

Consideram doua functii (tablouri): g[state, letter] si out[state]:


g[0,a] = 1, g[0, m] =5, g[0, r] = 14,
g[1, m] = 2, g[5, a] = 6, g[14, a] = 15,
...
out[4] = amar, out[10] = mar, . . .
D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

6 / 36

Algoritmul Aho-Corasick

Adaugarea lui martie

state = 0;
g[state, m] = 5 state = 5
g[state, a] = 6 state = 6
g[state, r] nedefinit
presupunem ca valoarea variabilei globale newstate era 9
newstate = 10, g[newstate, r] = 10
newstate = 11, g[newstate, t] = 11
newstate = 12, g[newstate, i] = 12
newstate = 13, g[newstate, e] = 13
out[13] = martie
Presupunem ca alfabetul este .

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

7 / 36

Algoritmul Aho-Corasick

Adaugarea unui pattern ntr-un arbore digital (trie)


addPattern(P) {
m = P.length();
state = 0;
j=1;
while (g[state, P[j]] != undef) {
state = g[state, P[j]]; // g este variabila globala
j = j+1;
}
for (i = j; i <= m; ++i) {
newstate = newstate+1; // variabila globala
for (each c ) {
g[newstate,c] = undef;
out[newstate] = ; // out e variabila globala
}
g[state, P[i]] = newstate;
state = newstate;
}
out[state] = {P};
}
D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

8 / 36

Algoritmul Aho-Corasick

Constructia arborelui digital

constrTrie(P) {
newstate = 0;
for (each c )
g[0,c] = undef;
for (each Pi P)
addPattern(Pi );
}

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

9 / 36

Algoritmul Aho-Corasick

Functia esec KMP (reamintire)


p = abaabaaabc

0
p[j] a
f[j] -1

-1
a

1
b
0

a
1 b 2

2
a
0

3
a
1

4
b
1

5
a
2

6
a
3

4 b 5 a 6 a

7
a
4

8
b
1

9
c
2

b 9 c

Reamintim ca se mai numeste automat KMP.


D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

10 / 36

Algoritmul Aho-Corasick

Functia esec AC

{amar}
4

~{a,m,r}

{manta}
9

r
10
{mar}

r
14 a

D. Lucanu (FII - UAIC)

15 m

16 a

11

12

13

{martie}

17
{rama}

C
autare peste siruri

PA 2014/2015

11 / 36

Algoritmul Aho-Corasick

Functia esec AC

{amar}
4

~{a,m,r}

{manta}
9

r
10
{mar}

r
14 a

D. Lucanu (FII - UAIC)

15 m

16 a

11

12

13

{martie}

17
{rama}

C
autare peste siruri

PA 2014/2015

12 / 36

Algoritmul Aho-Corasick

Functia esec AC

{amar}
4

~{a,m,r}

{manta}
9

r
10
{mar}

r
14 a

D. Lucanu (FII - UAIC)

15 m

16 a

11

12

13

{martie}

17
{rama}

C
autare peste siruri

PA 2014/2015

13 / 36

Algoritmul Aho-Corasick

Functia esec AC

{amar}
4

~{a,m,r}

{manta}
9

r
10
{mar}

r
14 a

D. Lucanu (FII - UAIC)

15 m

16 a

11

12

13

{martie}

17
{rama}

C
autare peste siruri

PA 2014/2015

14 / 36

Algoritmul Aho-Corasick

Functia esec AC

{amar}
4

~{a,m,r}

{manta}
9

r
10
{mar}

r
14 a

D. Lucanu (FII - UAIC)

15 m

16 a

11

12

13

{martie}

17
{rama}

C
autare peste siruri

PA 2014/2015

15 / 36

Algoritmul Aho-Corasick

Functia esec AC

{amar}
4

~{a,m,r}

{manta}
9

r
10
{mar}

r
14 a

15 m

16 a

11

12

13

{martie}

17
{rama}

Urmand aceeasi conventie ca la KMP, se mai numeste si automat AC.

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

16 / 36

Algoritmul Aho-Corasick

Constructia functiei esec

initializare:
q = empty();
for (each c ) {
state = g[0,c];
if ((state != 0) and (state != undef))
q.pushBack(state);
f[state] = 0;
}

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

17 / 36

Algoritmul Aho-Corasick

Constructia functiei esec


iteratia principala
while (! q.isEmpty()) {
crntstate = q.topFront(); q.popFront();
for (each c ) {
chldstate = g[crntstate, c];
if ((chldstate != undef) and (chldstate != 0)) {
q.pushBack(chldstate);
state = f[crntstate];
while (g[state,c] = undef) state = f[state];
f[chldstate] = g[state, c];
out[chldstate] = out[chldstate] out[f[chldstate]];
}
}
}
D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

18 / 36

Expresii regulate

Plan

Algoritmul Aho-Corasick

Expresii regulate

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

19 / 36

Expresii regulate

Definitie
In aceasta sectiune consideram cazul cand pattern-ul constituie doar o
specificatie a ceea ce se cauta n sensul ca el desemneaza o multime de
siruri pentru care se cauta. Numim o astfel de specificatie pattern
generalizat.
Un alt mod de a specifica pattern-uri generalizate l constituie expresiile
regulate.
Definitie
Multimea expresiilor regulate peste alfabetul este definita recursiv astfel:
, empty sunt expresii regulate
orice caracter din este o expresie regulata;
daca e1 , e2 sunt expresii regulate, atunci e1 e2 si e1 + e2 sunt expresii regulate;
daca e este expresie regulata, atunci (e) si e sunt expresii regulate.

Arborele sintactic abstract: pe tabla.


D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

20 / 36

Expresii regulate

Legatura cu pachetul <regex> din C++

<regex>
[abc]
\d sau [[:digit:]]
[[:digit:]]*
[[:digit:]]+

D. Lucanu (FII - UAIC)

expresia regulata
a+b+c
0 + 1 + + 9
(0 + 1 + + 9)
(0 + 1 + + 9)(0 + 1 + + 9)

C
autare peste siruri

PA 2014/2015

21 / 36

Expresii regulate

Limbajul definit de o expresie regulata


Definitie
Multimea de siruri (limbajul) L(e) definit de o expresie regulata e este definit
recursiv astfel:
L() = {}) ( este sirul vid (de lungime zero)), L(empty) =
daca e este un caracter atunci L(e) = {e};
daca e = e1 e2 atunci L(e) = L(e1 )L(e2 ) = {w1 w2 | w1 L(e1 ), w2 L(e2 )};
daca e = e1 + e2 atunci L(e) = L(e1 ) L(e2 );
daca e = e1 atunci L(e) = k L(e1k ), unde
L(e10 ) = {}, L(e1k+1 ) = L(e1k )L(e1 );
daca e = (e1 ) atunci L(e) = L(e1 ).

Exemplu: Fie alfabetul A = {a, b, c}. Avem L(a(b + a)c) = {abc, aac}
si L((ab) ) = {, ab, abab, ababab, . . .} = {(ab)k | k 0}.
sfex
D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

22 / 36

Expresii regulate

Automatul asociat unei expresii regulate


cazul de baza
e este o litera (un simbol) a
a
start
e este
start
e este empty
start
pentru cazul inductiv presupunem:
M1
start
start
D. Lucanu (FII - UAIC)

M2
C
autare peste siruri

PA 2014/2015

23 / 36

Expresii regulate

Automatul asociat unei expresii regulate


e = e1 e2 :
start

M1

M2

e = e1 + e2 :
M1
start
M2

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

24 / 36

Expresii regulate

Automatul asociat unei expresii regulate

e = e1 :
start

D. Lucanu (FII - UAIC)

M1

C
autare peste siruri

PA 2014/2015

25 / 36

Expresii regulate

Exemplu

2
start

7
3

10

Detaliile procesului de constrtie pe tabla

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

26 / 36

Expresii regulate

Automate nedeterministe
Automatele asociate expresiilor regulate sunt cazuri particulare de
automate finite: M = (Q, , , q0 , Qf ), unde Q este multimea de
stari, alfabetul, : Q A Q tranzitiile, q0 Q starea initiala,
Qf Q starea finala
limbajul acceptat L(M) este multimea de cuvinre ce descriu parcursuri
de la starea initiala la o stare finala
daca M(e) este automatul asociat lui e, atunci L(M(e)) = L(e)
tranzitiile neetichetate se numesc si -tranzitii (sau spontane)
automatul construit direct din definitie este nedeterminist si
neminimal
costisitor de aplicat n practica
se poate construi un automat echivalent determinist?
raspunsul este afirmativ (automatele finite nedeterministe au aceeasi
pute de acceptare ca si cele deterministe), dar cu anumite costuri (a
se vedea slide-urilr urmatoare)
D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

27 / 36

Expresii regulate

Constructia unui automat determinist echivalent


Fie N un automat nedeterminist cu multimea de stari Q. Construim un
automat determinsit D astfel:
multimea de stari este P(Q) (numar exponential de stari!!!)
exista tranzitie etichetata cu a de la Q1 la Q2 daca si numai daca Q2
este multimea tuturor starilor q2 cu proprietatea ca exista q1 Q1 si
tranzitie etichetata cu a de la q1 la q2 n N
starea initiala a lui D este {q0 }, unde q0 este starea initiala a lui N
o submultime Qf este stare finala daca si numai daca include o stare
finala qf a lui N
Exemplu pe tabla.
Constructia de mai sus se poate mbunatati utilizand un algoritm bazat pe
derivativele Brzozowski.

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

28 / 36

Expresii regulate

Derivativele Brzozowski
Derivativele unei expresii regulate (Brzozowski, 1964):
a (empty ) = empty

?(empty ) = empty

a () = empty
(

a (b) =
empty

?() =
,b = a
, b 6= a

?(b) = empty

a (e1 e2 ) = a (e1)e2 + ?(e1)a (e2 )

?(e1 e2 ) = ?(e1 )?(e2 )

a (e1 + e2 ) = a (e1 ) + a (e2 )

?(e1 + e2 ) = ?(e1 ) + ?(e2 )

a (e ) = a (e)e

?(e ) =

Extensia la cuvinte: (e) = e, wa (e) = a (w (e))

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

29 / 36

Expresii regulate

Simplificari

concatenarea si + sunt asociative, + este si comutativa


e +e =e
e + empty = empty + e = e
e empty = empty e = empty
e = e = e

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

30 / 36

Expresii regulate

Proprietatea fundamentala

Theorem (Brzozowski)
Multimea derivatelor unei expresii {w (e) | w A } este finita.
Exemplu:
{w ((ab + a ) b a) | w A } =
{(b + )((a b + a) b a), (a b + a) b a, a, , empty}

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

31 / 36

Expresii regulate

Constructia automatului (Brzozowski)

multimea de stari este multimea derivatelor


exista tranzitie etichetata cu a de la q1 la q2 daca si numai daca q1
corespunde unei derivate w (e) si q2 corespunde derivatei wa (e)
pentru un w A ;
starea initiala este e = (e)
o stare q este finala (de acceptare) daca si numai daca corespunde
unei derivate w (e) si ?(w (e)) = .

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

32 / 36

Expresii regulate

Exemplu

e = (a b + a) b a
a

(b + )(a b + a) b a

(a b + a) b a + a
b

a
b

start

(a b + a) b a

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

33 / 36

Expresii regulate

Constructia unui automat determinist


(Berry, Setti: From Regular Expressions To Deterministic Automata, 1986)
O continuare a lui a n e este orice expresie wa (e) 6= empty .
se marcheaza simbolurile din e ca fiind distincte; fie e 0 expresia
obtinuta (de exemplu e = (ab + b) ba este transformata n
e 0 = (a1 b2 + b3 ) b4 a5 )
se construieste automatul M 0 pentru e 0 urmand ideea din algoritmul
lui Brzozowski:
M 0 are o stare pentru fiecare continuare a unui simbol marcat n e 0
exista tranzitie de la q1 la q2 daca si numai daca q1 corespunde unei
continuari C , C , C poate genera un cuvant care ncepe cu a
(wa (e) 6= empty ) si q2 corespunde continuarii lui a
starea initiala este e 0
q este o stare finala (de acceptare) daca si numai daca ea corespunde
unei continuari C si ?(C ) =

se elimina marcile din M 0


se determinizeaza M 0 construind M ale carui stari sunt submultimi de
stari ale lui M 0
D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

34 / 36

Expresii regulate

Constructii mai performante

utilizand functiile first si follow (Berry, Setti, 1986)


paralelizare (Myer, A Four Russians Algorithm for Regular Expression
Pattern Matching)
o alta constructie pentru automatul nedeterminist este
Glushkov-McNaughton-Yamada (1960-1961), care poate fi si
paralelizata (Navarro & Raffinot, 2004)

D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

35 / 36

Expresii regulate

Complexitatea cautarii cu expresii regulate


Presupunem ca lungimea expresiei regulate este m (numarul de caractere
fara operatori) si m = | {, +, }|.
Theorem (Thomson, 1968)
Problema cautarii cu expresii regulate poate fi rezolvata n timpul O(mn)
cu automate nedeterministe si spatiu O(m).
Theorem (Kleene, 1956)
Problema cautarii cu expresii regulate poate fi rezolvata n timpul
O(n + 2m ) cu automate deterministe si spatiu O(2m ).
Theorem (Myers, 1992)
Problema cautarii cu expresii regulate poate fi rezolvata n timpul
O(mn/ log n) cu automate deterministe si spatiu O(mn/ log n).
D. Lucanu (FII - UAIC)

C
autare peste siruri

PA 2014/2015

36 / 36

Você também pode gostar

  • Aproximare
    Aproximare
    Documento43 páginas
    Aproximare
    eirdnocotim
    Ainda não há avaliações
  • Finantare Info2 2015-2016
    Finantare Info2 2015-2016
    Documento10 páginas
    Finantare Info2 2015-2016
    eirdnocotim
    Ainda não há avaliações
  • Finantare Info3 2015-2016
    Finantare Info3 2015-2016
    Documento9 páginas
    Finantare Info3 2015-2016
    eirdnocotim
    Ainda não há avaliações
  • Subiecte Baze de Date 2009 (Enunt) (Short)
    Subiecte Baze de Date 2009 (Enunt) (Short)
    Documento11 páginas
    Subiecte Baze de Date 2009 (Enunt) (Short)
    eirdnocotim
    Ainda não há avaliações
  • Prog-Din
    Prog-Din
    Documento60 páginas
    Prog-Din
    eirdnocotim
    Ainda não há avaliações
  • Greedy
    Greedy
    Documento53 páginas
    Greedy
    eirdnocotim
    Ainda não há avaliações
  • 2009 Info Intensiv C Variantele 1 100
    2009 Info Intensiv C Variantele 1 100
    Documento300 páginas
    2009 Info Intensiv C Variantele 1 100
    Cosmin Gavrila
    63% (16)
  • Paradigme General
    Paradigme General
    Documento16 páginas
    Paradigme General
    eirdnocotim
    Ainda não há avaliações
  • B-And-Bb
    B-And-Bb
    Documento23 páginas
    B-And-Bb
    eirdnocotim
    Ainda não há avaliações
  • NP Complete
    NP Complete
    Documento56 páginas
    NP Complete
    eirdnocotim
    100% (1)
  • Compl Medie
    Compl Medie
    Documento44 páginas
    Compl Medie
    eirdnocotim
    Ainda não há avaliações
  • Prog-Din
    Prog-Din
    Documento60 páginas
    Prog-Din
    eirdnocotim
    Ainda não há avaliações
  • String Matching1
    String Matching1
    Documento64 páginas
    String Matching1
    eirdnocotim
    Ainda não há avaliações
  • Geom Comp2
    Geom Comp2
    Documento47 páginas
    Geom Comp2
    eirdnocotim
    Ainda não há avaliações
  • Compl-Alg
    Compl-Alg
    Documento36 páginas
    Compl-Alg
    eirdnocotim
    Ainda não há avaliações
  • Geom Comp1
    Geom Comp1
    Documento47 páginas
    Geom Comp1
    eirdnocotim
    Ainda não há avaliações
  • Compl Probl
    Compl Probl
    Documento46 páginas
    Compl Probl
    Bianca Elena
    Ainda não há avaliações