Documente Academic
Documente Profesional
Documente Cultură
LFA Explicatii Exercitii Algoritmi SE 1 6 2016 PDF
LFA Explicatii Exercitii Algoritmi SE 1 6 2016 PDF
141-144, 211
@ MN 2014-2015
Cuprins
~ Seminar 1 ~ .................................................................................................................. - 4 Automat Finit Determinist .......................................................................................... - 4 Automat Finit Nedeterminist ...................................................................................... - 4 EXEMPLE: ................................................................................................................. - 5 L1 = a* = {an, n 0} ............................................................................................... - 5 L2 = a+ = {an, n 1} ............................................................................................... - 5 L3 = {a2n, n 0} ..................................................................................................... - 5 L4 = {a2n+1, n 0}................................................................................................... - 5 L5 = {a2n, n 1} ..................................................................................................... - 5 L6 = {a2n+1, n 1}................................................................................................... - 6 L7 = {a2n b3m, n 0, m 0} .................................................................................... - 6 L8 = {a2n b3m, n 1, m 0} .................................................................................... - 7 L9 = {a2n b3m, n 0, m 1} .................................................................................... - 7 L10 = {a2n b3m, n 1, m 1} .................................................................................. - 7 Operaii cu limbaje ...................................................................................................... - 8 Reuniune L L1 L2 ............................................................................................ - 8 Concatenare L L1 L2 .......................................................................................... - 8 Stelare L L*1 L1n ........................................................................................... - 8 -
n0
Compunerea automatelor finite ............................................................................... - 9 Reuniune ................................................................................................................. - 9 Concatenare............................................................................................................. - 9 Stelare ..................................................................................................................... - 9 Transformarea AFNAFD ........................................................................................ - 9 EXEMPLU:........................................................................................................... - 10 Verificare acceptare cuvnt de ctre automat finit ................................................... - 12 ~ Seminar 2 ~ ................................................................................................................ - 14 Automat Finit Nedeterminist cu tranziii .............................................................. - 14 nchiderea unei stri .......................................................................................... - 14 Verificare acceptare cuvnt de ctre automat AFN .......................................... - 14 EXEMPLU:........................................................................................................... - 15 Transformarea AFN AFD ................................................................................ - 18 EXEMPLU:........................................................................................................... - 19 Automatul minimal ................................................................................................... - 22 EXEMPLU:........................................................................................................... - 23 Condiii asupra numrului de apariii ale unui caracter ntr-un cuvnt .................... - 25 EXEMPLE: ........................................................................................................... - 25 L1 {w {0,1} a. . | w |0 par , | w |1 impar} ........................................................ - 25 L2 {w {a, b} a. . | w |a 2n 1, | w |b 3m 2, n 0, m 0} ............................... - 26 -
-1-
~ Seminar 3 ~ ................................................................................................................ - 27 Expresii regulate ....................................................................................................... - 27 Precedena operaiilor , , ................................................................................ - 27 Transformarea expresie_regulat automat_finit .................................................. - 27 Transformarea automat_finit expresie_regulat .................................................. - 28 Cteva formule utile .............................................................................................. - 29 EXEMPLU:........................................................................................................... - 29 Gramatici................................................................................................................... - 31 Gramatici independente de context (GIC) / Context-free grammars (CFG) ............ - 31 Gramatici liniare ................................................................................................... - 31 Gramatici liniare la dreapta ................................................................................... - 31 Gramatici liniare la stnga .................................................................................... - 31 Gramatici regulate ................................................................................................. - 31 EXEMPLE (gramatici regulate): .............................................................................. - 32 L1 = a* = {an, n 0} ............................................................................................. - 32 L2 = a+ = {an, n 1} ............................................................................................. - 32 L3 = {a2n, n 0} ................................................................................................... - 32 L4 = {a2n+1, n 0}................................................................................................. - 32 L5 = {a2n, n 1} ................................................................................................... - 32 L6 = {a2n+1, n 1}................................................................................................. - 32 L7 = {a2n b3m, n 0, m 0} .................................................................................. - 32 Analogia ntre automate finite i gramatici regulate ............................................. - 33 ~ Seminar 4 ~ ................................................................................................................ - 34 EXEMPLE (gramatici independente de context): .................................................... - 34 L1 = {anbn, n 0} ................................................................................................. - 34 L2 = {anbn, n 1} ................................................................................................. - 34 L3 = {anb2n, n 1} ................................................................................................ - 35 L4 = {a2nbkc3n, n 0, k 1} ................................................................................. - 35 L5 = {a2nbkc3n, n 1, k 1} ................................................................................. - 35 L6 = {a2nc3nbk, n 1, k 1} ................................................................................. - 36 Verificare generare cuvnt de ctre gramatic...................................................... - 36 L7 = {an bk c2k dn, n 1, k 0} ............................................................................. - 38 L8 = {an bk c2k dn, n 0, k 1} ............................................................................. - 38 L9 = {an b2n c2k dk, n 0, k 1} ............................................................................ - 39 L10 = {an b2n ck dm e3k, n,k,m 0}......................................................................... - 39 Transformarea GIC gramatic n F.N. Chomsky ................................................. - 40 Automatul Push-Down (APD) / Automatul Stiv .................................................... - 43 Modaliti de acceptare a unui cuvnt de ctre un APD ....................................... - 44 EXEMPLE (automate push-down): .......................................................................... - 45 L1 = {anbn, n 1} ................................................................................................. - 45 L2 = {anb2n, n 0} ................................................................................................ - 46 L3 = {a2n bk c3k dn, n 1, k 1} ............................................................................ - 47 Verificare acceptare cuvnt de ctre un APD ....................................................... - 48 -
-2-
-3-
~ Seminar 1 ~
(AFD; AFN; Operaii cu limbaje; Compunere automate; Transformarea AFNAFD)
-4-
EXEMPLE:
L1 = a* = {an, n 0} = {=a0, a=a1, aa=a2, aaa=a3, aaaa=a4, }
Cele dou automate au aceleai stri i aceleai tranziii. Difer doar mulimea strilor
finale. Dac setm q0 final, atunci vor fi acceptate cuvintele de lungime par (inclusiv
zero), iar dac setm n schimb q1 final, atunci vor fi acceptate cuvintele de lungime
impar.
Obs: De fiecare dat cnd la putere apare un coeficient, nseamn c vom avea un circuit
de lungime egal cu acest coeficient (sau lungime proporional cu el, n cazul n care
puterea era aplicat unui cuvnt, nu doar unei litere).
-5-
La fel ca la exemplul anterior, ne vom asigura nti c automatul nu accept nimic mai
scurt dect cel mai mic cuvnt din limbaj, adic aaa. Deci vom aduga cele 4 stri i
tranziiile ctre dreapta i vom seta starea q3 final. Apoi pentru a avea circuitul de
lungime 2 (egal cu coeficientul lui n), avem cele trei variante. Dac adugm tranziia de
la q3 spre q2 vom obine un AFD, iar dac alegem una din celelalte dou variante vom
obine un AFN.
L7 = {a2n b3m, n 0, m 0}
= {, a2, a4, a6, a8, , b3, b6, b9, b12, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
n primul rnd vedem c cel mai mic cuvnt ce trebuie acceptat este , deci setm starea
iniial q0 s fie i stare final. Apoi facem circuit de lungime 2 cu litera a. Dup ce
citim un numr par de a-uri (inclusiv zero), ajungem n starea q0, deci de aici trebuie s
pornim cu citirea b-urilor. Adugm q2, q3 i cele dou tranziii cu b. tim c va trebui s
avem un circuit de lungime 3 cu b-uri, dar trebuie s fim de asemenea ateni c literele de
a i de b nu pot fi amestecate ntre ele, dup ce am citit primul b nu mai avem voie
s citim niciun a. Deci nu putem avea muchie de ntoarcere de la q3 ctre q0 pentru c
n q0 se pot citi a-uri. nseamn c avem nevoie de a nou stare, aa c adugm q4 i
tranziii de la q3 spre q4 i de la q4 spre q2 pentru a nchide circuitul.
-6-
L8 = {a2n b3m, n 1, m 0}
= {a2, a4, a6, a8, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
n acest caz, cuvintele conin obligatoriu a-uri, b-urile putnd s apar sau nu.
Trebuie s obligm automatul s citeasc numr par de a-uri, dar cel puin dou, deci nu
se mai poate ntoarce din q1 n q0 cu al doilea a, ci trebuie s continue spre q2 i setm
q2 ca stare final. Apoi ncepnd din q2 citim doi de b, dar pentru al treilea nu putem
nchide circuitul ntorcndu-ne n q2 dac am ales ca muchie de ntoarcere pentru a-uri de
la starea q2 spre starea q1. Deci trebuie s adugm i starea q5 care va fi i ea final i
cele dou tranziii de la q4 spre q5 i de la q5 spre q3.
L9 = {a2n b3m, n 0, m 1}
= {b3, b6, b9, b12, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
n acest caz, cuvintele conin obligatoriu b-uri, a-urile putnd s apar sau nu.
-7-
Acest automat seamn cu cel pentru L8 (prima variant), unde eram obligai s avem auri. n plus, pentru c acum trebuie s avem i b-uri, starea q2 nu va mai fi stare final.
Operaii cu limbaje
Reuniune L L1 L2
L {w | w L1 sau w L2 }
Exemplu:
L1 = {a, ab, abc}
L2 = {a, bd, cd}
L = {a, ab, abc, bd, cd}
Concatenare L L1 L2
L {wi w j | wi L1 i w j L2 }
Exemplu:
L1 = {a, ab, abc}
L2 = {a, bd, cd}
L = {aa, abd, acd, aba, abbd, abcd, abca, abcbd, abccd}
Exemplu:
L1 = {a, ab, abc}
(L1)* = { ; a, ab, abc ; aa, aab, aabc, aba, abab, ababc, abca, abcab, abcabc ; }
Obs: Cuvntul vid va aparine limbajului stelat, indiferent dac nainte aparinea sau nu
limbajului iniial.
-8-
Concatenare
Dac avem deja construite dou automate finite (avnd strile iniiale q01 i q02 i
mulimile strilor finale F1 i F2) care accept respectiv limbajele L1 i L2 i dorim s
obinem un automat finit care s accepte limbajul L L1 L2 :
- noua stare iniial va fi q01, starea iniial a primului automat
- adugm -tranziii de la fiecare stare final din F1 spre q02
- noua mulime de stri finale va fi F = F2
Stelare
Dac avem deja construit un automat finit (avnd starea iniial q01 i mulimea strilor
finale F1) care accept limbajul L1 i dorim s obinem un automat finit care s accepte
limbajul L L*1 :
- introducem o nou stare q0 care va fi noua stare iniial
- adugm o -tranziie de la q0 spre q01
- adugm -tranziii de la fiecare stare final din F1 spre q0
- noua mulime de stri finale va fi F = {q0} (sau putem lsa F q0 F1 )
Transformarea AFNAFD
Avnd dat un AFN (reprezentat sub form de graf), vom calcula funcia delta completnd
un tabel astfel:
La capetele de linie vom pune numele strilor AFN-ului (elementele mulimii Q):
q0, q1, ..., q|Q|-1
La capetele de coloan vom pune caracterele alfabetului AFN-ului (elementele
mulimii )
Calculm coninutul primelor |Q| linii astfel: elementul aflat pe linia li i coloana
cj reprezint mulimea de stri n care se poate ajunge n AFN dac pornim din
starea de pe linia li (n cazul acesta: qi-1 dac numerotm liniile ncepnd cu 1) i
citim caracterul de pe coloana cj. Pentru a afla aceast mulime, ne uitm la graful
-9-
EXEMPLU:
Se d AFN-ul urmtor:
Calculm tabelul pentru funcia delta: nti primele 3 linii folosind graful AFN-ului, apoi
urmtoarele linii folosind aceste prime 3 linii ale tabelului.
Vom avea dou coloane, pentru c alfabetul automatului iniial este = {a, b}.
q0
q1
q2
a
{q0, q1}
{q1, q2}
q2
b
q0
q1
q2
- 10 -
(2) Observm c a aprut noua stare q01 pentru care nu avem o linie n tabel, aa c o
adugm i o calculm pentru cele dou coloane.
q0
q1
q2
q01
a
{q0, q1} = q01
{q1, q2} = q12
q2
{q0, q1, q2} = q012
b
q0
q1
q2
{q0, q1} = q01
(3) Revenim la desenul AFD-ului i adugm tranziiile care lipsesc, adic cele care
pleac din starea q01, mpreun cu strile-destinaie care lipsesc, adic q012.
(4) Pentru noua stare aprut, q012, i adugm linia n tabel i o calculm.
(q012 , a) ({q0 , q1 , q2 }, a)
{ (q0 , a)} { (q1 , a)} { (q2 , a)}
{q0 , q1} {q1 , q2 } {q2 } {q0 , q1 , q2 } q012
(q012 , b) ({q0 , q1 , q2 }, b)
{ (q0 , b)} { (q1 , b)} { (q2 , b)}
{q0 } {q1} {q2 } {q0 , q1 , q2 } q012
- 11 -
q0
q1
q2
q01
q012
a
{q0, q1} = q01
{q1, q2} = q12
q2
{q0, q1, q2} = q012
{q0, q1, q2} = q012
b
q0
q1
q2
{q0, q1} = q01
{q0, q1, q2} = q012
(5) Revenim la graf i adugm tranziiile care pleac din starea q012.
(6) Observm c nu ne-a mai aprut nicio stare nou, deci nu ne-a rmas dect s marcm
strile finale i am obinul AFD-ul cerut. n AFN-ul iniial stare final era doar q2. Orice
stare-mulime din AFD-ul nostru care l conine pe q2 va fi stare final. Exist una
singur: q012.
Obs: Dac am fi ales varianta (a), atunci am fi calculat n tabel i linia corespunztoare
strii q12, ns observm c nici ea, dar nici strile q1 i q2 nu apar n AFD.
- 12 -
- 13 -
~ Seminar 2 ~
(AFN; Transformarea AFN AFD; Automatul minimal;
Condiii asupra numrului de apariii ale unui caracter ntr-un cuvnt)
q {r | r (q, k )}
k 0
- 14 -
EXEMPLU:
Se d urmtorul AFN:
(q0 , 0 ) {q0 }
(q0 , 1 ) {q2 , q3 }
(q0 , 2 ) { (q2 , )} { (q3 , )} {q4 } {q5 } {q4 , q5 }
(q0 , 3 ) { (q4 , )} { (q5 , )} {q6 } {q2 , q6 } {q2 , q6 } dar q2 era deja n nchidere
(q0 , 4 ) { (q6 , )}
q0 {q0 , q2 , q3 , q4 , q5 , q6 }
(q1 , 0 ) {q1}
(q1 , 1 ) {q2 }
(q1 , 2 ) { (q2 , )} {q4 }
(q1 , 3 ) { (q4 , )} {q6 }
(q1 , 4 ) { (q6 , )}
q1 {q1 , q2 , q4 , q6 }
(q 2 , 0 ) {q 2 }
(q 2 , 1 ) {q4 }
(q 2 , 2 ) { (q 4 , )} {q6 }
(q 2 , 3 ) { (q6 , )}
q 2 {q 2 , q 4 , q6 }
- 15 -
(q3 , 0 ) {q3 }
(q3 , 1 ) {q5 }
(q3 , 2 ) { (q5 , )} {q2 , q6 }
(q3 , 3 ) { (q2 , )} { (q6 , )} {q4 } {q4 }
(q3 , 4 ) { (q4 , )} {q6 } dar q6 era deja n nchidere
q3 {q2 , q3 , q4 , q5 , q6 }
(q4 , 0 ) {q4 }
(q4 , 1 ) {q6 }
(q4 , 2 ) { (q6 , )}
q4 {q4 , q6 }
(q5 , 0 ) {q5 }
(q5 , 1 ) {q2 , q6 }
(q5 , 2 ) { (q2 , )} { (q6 , )} {q4 } {q4 }
(q5 , 3 ) { (q4 , )} {q6 } dar q6 era deja n nchidere
q5 {q2 , q4 , q5 , q6 }
(q6 , 0 ) {q6 }
(q6 , 1 )
q6 {q6 }
Verificm dac un cuvnt este sau nu acceptat de automatul AFN dat.
pas 0: Pornim de la perechea (q0, abbaa).
pas 1a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
<q0> = {q0, q2, q3, q4, q5, q6}
pas 1b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
(q0 , a) {q0 , q1}
(q2 , a) {q3 }
(q3 , a) {q6 }
(q4 , a) {q6 }
(q5 , a) {q6 }
( q6 , a )
Deci noua mulime de stri este {q0, q1, q3, q6}, iar cuvntul rmas este bbaa.
- 16 -
(q1 , b)
( q2 , b)
(q3 , b) {q3 , q6 }
(q4 , b) {q5 }
(q5 , b) {q2 }
(q6 , b) {q6 }
Deci noua mulime de stri este {q2, q3, q5, q6}, iar cuvntul rmas este baa.
pas 3a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
q2 , q3 , q5 , q6 q2 q3 q5 q6
{q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q2 , q4 , q5 , q6 } {6 6 }
{q2 , q3 , q4 , q5 , q6 }
pas 3b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
( q 2 , b)
(q3 , b) {q3 , q6 }
(q4 , b) {q5 }
(q5 , b) {q2 }
(q6 , b) {q6 }
Deci noua mulime de stri este {q2, q3, q5, q6}, iar cuvntul rmas este aa.
pas 4a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
q 2 , q3 , q 5 , q 6 q 2 q 3 q 5 q 6
{q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q2 , q4 , q5 , q6 } {q6 }
{q2 , q3 , q4 , q5 , q6 }
pas 4b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
- 17 -
(q2 , a) {q3 }
(q3 , a) {q6 }
(q4 , a) {q6 }
(q5 , a) {q6 }
( q6 , a )
Deci noua mulime de stri este {q3, q6}, iar cuvntul rmas este a.
pas 5a: Facem nchiderea mulimii curente de stri pentru a obine noua mulime de
stri.
q 3 , q 6 q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 }
{q2 , q3 , q4 , q5 , q6 }
pas 5b: n fiecare stare din mulimea curent ncercm s citim simbolul curent din
cuvnt i obinem o nou mulime de stri.
(q2 , a) {q3 }
(q3 , a) {q6 }
(q4 , a) {q6 }
(q5 , a) {q6 }
( q6 , a )
Deci noua mulime de stri este {q3, q6}, iar cuvntul a fost citit n ntregime.
pas 6: Facem ultima nchidere a mulimii curente de stri pentru a obine mulimea
final de stri.
q 3 , q 6 q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 }
{q2 , q3 , q4 , q5 , q6 }
pas 7: Verificm dac printre strile n care am ajuns este vreo una final.
{q2 , q3 , q4 , q5 , q6 } F {q2 , q3 , q4 , q5 , q6 } {q2 , q6 } {q2 , q6 }
Deci cuvntul abbaa este acceptat de automatul AFN dat.
- 18 -
EXEMPLU:
Plecm de la acelai automat de mai sus.
q1 {q1 , q2 , q4 , q6 }
q2 {q2 , q4 , q6 }
q3 {q2 , q3 , q4 , q5 , q6 }
q4 {q4 , q6 }
q5 {q2 , q4 , q5 , q6 }
q6 {q6 }
Avem tabelul pentru primele 7 linii obinut dup cum urmeaz:
q0
q1
q2
q3
q4
q5
q6
* a *
{q0, q1, q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q6}
{q2, q3, q4, q5, q6}
* b *
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q6}
- 19 -
( q0 , a) ({q0 , q2 , q3 , q4 , q5 , q6 }, a)
{ (q0 , a)} { (q2 , a)} { (q3 , a)} { (q4 , a)} { (q5 , a)} { (q6 , a)}
{q0 , q1} {q3 } {q6 } {q6 } {q6 } {q0 , q1 , q3 , q6 }
q0 q1 q3 q6
{q0 , q2 , q3 , q4 , q5 , q6 } {q1 , q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q6 } {q0 , q1 , q2 , q3 , q4 , q5 , q6 }
( q0 , b) ({q0 , q2 , q3 , q4 , q5 , q6 }, b)
{ (q0 , b)} { (q2 , b)} { (q3 , b)} { (q4 , b)} { (q5 , b)} { (q6 , b)}
{q2 } {q3 , q6 } {q5 } {q2 } {q6 } {q2 , q3 , q5 , q6 }
q 2 q3 q5 q 6
{q2 , q4 , q6 } {q2 , q3 , q4 , q5 , q6 } {q2 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q1 , a ) ({q1 , q2 , q4 , q6 }, a)
{ (q1 , a )} { (q2 , a )} { (q4 , a)} { (q6 , a)}
{q3 } {q6 } {q3 , q6 }
q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q1 , b) ({q1 , q2 , q4 , q6 }, b)
{ (q1 , b)} { (q2 , b)} { (q4 , b)} { (q6 , b)}
{q5 } {q6 } {q5 , q6 }
q5 q 6
{q2 , q4 , q5 , q6 } {q6 } {q2 , q4 , q5 , q6 }
( q2 , a) ({q2 , q4 , q6 }, a)
{ (q2 , a )} { (q4 , a)} { (q6 , a)}
{q3 } {q6 } {q3 , q6 }
q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q2 , b) ({q2 , q4 , q6 }, b)
{ (q2 , b)} { (q4 , b)} { (q6 , b)}
{q5 } {q6 } {q5 , q6 }
q5 q 6
{q2 , q4 , q5 , q6 } {q6 } {q2 , q4 , q5 , q6 }
- 20 -
( q5 , a) ({q2 , q4 , q5 , q6 }, a)
{ (q2 , a )} { (q4 , a)} { (q5 , a)} { (q6 , a)}
{q3 } {q6 } {q6 } {q3 , q6 }
q3 q 6
{q2 , q3 , q4 , q5 , q6 } {q6 } {q2 , q3 , q4 , q5 , q6 }
( q5 , b) ({q2 , q4 , q5 , q6 }, b)
{ (q2 , b)} { (q4 , b)} { (q5 , b)} { (q6 , b)}
{q5 } {q2 } {q6 } {q2 , q5 , q6 }
q 2 q5 q 6
{q2 , q4 , q6 } {q2 , q4 , q5 , q6 } {q6 } {q2 , q4 , q5 , q6 }
- 21 -
q0
q1
q2
q3
q4
q5
q6
q023456
q0123456
q23456
* a *
{q0, q1, q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q6}
{q2, q3, q4, q5, q6}
q0123456
q0123456
q23456
* b *
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q3, q4, q5, q6}
{q2, q4, q5, q6}
{q2, q4, q5, q6}
{q6}
q23456
q23456
q23456
Automatul iniial avea strile finale FAFN = {q2, q6}, deci n noul automat vom avea
strile finale FAFD = { q023456, q0123456, q23456}.
Obs: Limbajul acceptat de acest automat este L = {a,b}*, adic orice cuvinte formate cu
literele a i b n orice ordine, cuvinte de orice lungime, inclusiv zero.
Obs: Cred c la seminar am uitat s punem i tranziia de la q5 la q2 cu b, aa c pot exista
mici diferene la calculele intermediare, dar rezultatul final este acelai.
Automatul minimal
Se pornete de la un AFD complet definit (adic pentru orice stare din mulimea Q i
pentru orice caracter din alfabetul , funcia este definit).
Ideea algoritmului este de a gsi acele stri care au comportament echivalent, pentru a le
grupa i a obine o unic stare nou n locul acestora.
- Dou stri sunt echivalente dac pentru orice cuvnt am alege, plecnd din cele
dou stri, fie ajungem n dou stri finale, fie ajungem n dou stri nefinale.
p, q Q, p q [w * , p, w F q, w F ]
- Dou stri sunt separabile dac exist un cuvnt pentru care plecnd din cele
dou stri ajungem ntr-o stare final i ntr-una nefinal.
p, q Q, p w q [w * , p, w F q, w F ]
- 22 -
EXEMPLU:
Fie automatul AFD complet definit:
Pas 0: Cutm perechile de stri separabile prin cuvntul de lungime zero. Avem o
singur stare final n acest exemplu, deci ea va fi separabil prin de toate celelalte
stri, care sunt nefinale. Completm n tabel, pentru toate perechile (q6, qi), 0 i 5.
q0
q1
q2
q3
q4
q5
q6
q0
q1
q2
q3
q4
q5
q6
- 23 -
q0
q1
q2
q3
q4
q5
q6
q0
q1
q2
q3
q4
q5
aa
aa
a
a
a
a
a
a
a
a
a
ba
ba
- 24 -
q6
EXEMPLE:
L1 {w {0,1} a. . | w |0 par , | w |1 impar}
Ideea de rezolvare este ca fiecare stare s aib doi indici, egali cu restul mpririi la 2 a
numrului de apariii ale caracterului 0, respectiv ale caracterului 1.
Starea final va fi q01 pentru c ea codific numrul par de 0-uri i impar de 1-uri.
Obs: Pentru c nu exist nicio alt restricie asupra formei cuvntului, automatul va fi
complet definit, adic n orice stare am fi trebuie s avem tranziii cu toate caracterele din
alfabet.
- 25 -
Obs:
- Fiecare stare va avea doi indici pentru c alfabetul are dou elemente i ambele au
condiii ataate.
- Primul indice, corespunztor caracterului a, va lua valori n mulimea resturilor
mpririi la 2, deoarece coeficientul necunoscutei n este 2. Al doilea indice,
corespunztor caracterului b, va lua valori n mulimea resturilor mpririi la 3,
deoarece coeficientul necunoscutei m este 3.
- Numrul de stri va fi egal cu produsul numerelor ce reprezint cardinalele
mulimilor n care iau valori indicii, n cazul acesta 23=6.
Starea final va fi q12, deoarece termenii liberi sunt + 1 i + 2.
Obs: Acest limbaj ar mai putea fi scris i L3 { , b, bb} ({a, aa} {b, bb}) { , a, aa} .
Suntei de acord c e adevrat? tii s explicai cum am ajuns la acea expresie ?
- 26 -
~ Seminar 3 ~
(Expresii regulate; Transformarea expresie_regulat automat_finit
Transformarea automat_finit expresie_regulat ; Gramatici ; Gramatici regulate)
Expresii regulate
Se numete familia expresiilor regulate peste i se noteaz REX() mulimea de
cuvinte peste alfabetul {(, ),,,, , } definit recursiv astfel:
i) , REX ; a REX pentru a
ii) e1 , e2 REX (e1 e2 ) REX
iii) e1 , e2 REX (e1 e2 ) REX
iv) e REX (e*) REX
Precedena operaiilor , ,
Obs: Atenie la ordinea n care se evalueaz operaiile: nti stelarea, apoi concatenarea i
apoi reuniunea. (Dac vrei s fii siguri c nu le ncurcai, putei s facei o analogie cu
operaiile aritmetice, unde se evalueaz nti ridicarea la putere, apoi nmulirea i apoi
adunarea.)
{ }
e1 e2
e1 e2
(e1 )
Automat finit
Q {q0 }, F ,
Q {q0 }, F {q0 },
{a}, a
L(e1 e2 )
Q Q1 Q2 {q0 }; F F1 F2 ; V V1 V2 ;
L(e1 ) L(e2 )
L(e1 e2 )
Q Q1 Q2 , q0 q01; F F2 ; V V1 V2 ;
L(e1 ) L(e2 )
L(e1 ) ( L(e1 ))
Q Q1 {q0 }; F {q0 }; V V1 ;
Descrierea n cuvinte a ultimelor trei linii ale tabelului o gsii n acest document la
pagina 9 (compunerea automatelor finite).
- 27 -
Ri0j
{} {a V | (qi , a) q j }, dac i j
- 28 -
|Q|
1f
, adic
f F
reuniunea etichetelor de la starea iniial la toate strile finale, avnd ca stri intermediare
toate strile automatului.
(D) {e1 , e2 } (e1 e2 ) (e1 e2 ) (formul valabil pentru oricte expresii, nu doar 2)
(E) e1 (e2 e3 ) (e1 e2 ) (e1 e3 ) ; (e1 e2 ) e3 (e1 e3 ) (e2 e3 )
EXEMPLU:
Se d automatul finit urmtor i se dorete obinerea expresiei regulate care i corespunde,
folosind tabelul descris anterior.
Avem dou stri, deci tabelul va avea 22 = 4 linii i 2 coloane complete (plus eventual una
incomplet pentru rspunsul final).
Rik j1
k+1 = 0
rij = r11
rij = r12
rij = r21
rij = r22
1+
0
k+1 = 1
k+1 = 2
- 29 -
k+1 = 0
k+1 = 1
rij = r11
rij = r12
rij = r21
rij = r22
1+
0
1*
1 0
k+1 = 2
1 0
- 30 -
Gramatici
G = (N, T, S, P)
N = {A, B, C, } mulimea de simboluri neterminale
T = {a, b, c, ...} mulimea de simboluri terminale
S N simbolul de start
P mulimea de producii (sau reguli de producie)
Modul n care este definit funcia P determin diferite tipuri de gramatici.
Gramatici liniare
Au producii de tipurile
A x, cu x T i A N
A xBy, cu x, y T i A, B N
A x, cu x T i A N
A xB, cu x T i A, B N
A x, cu x T i A N
A Bx , cu x T i A, B N
Gramatici regulate
O gramatic se numete regulat dac este liniar la dreapta sau liniar la stnga.
Dar pentru c gramaticile liniare la dreapta i cele liniare la stnga definesc acelai set de
limbaje, atunci n general ne referim la cele liniare la dreapta.
A
Deci gramaticile regulate au producii de tipurile A a
A aB, cu a T i A, B N
Obs: Putem grupa mai multe producii care au acelai membru stng i putem scrie pe
scurt A | a | aB, cu a T i A, B N
- 31 -
sau
S aA
A aS |
sau
S aA
A aB | a
B aA
sau
S aA
A aB
B aA |
B aA | a
sau
S aA
A aS | aB
Ba
L7 = {a2n b3m, n 0, m 0}
= {, a2, a4, a6, a8, , b3, b6, b9, b12, , a2b3, a2b6, a4b3,a4b6, a6b3, a6b6, }
S aA | bB |
S aA | bB |
A aS
A aS
B bC
sau
B bC
C bD
C bD | b
D bB |
D bB
- 32 -
- 33 -
~ Seminar 4 ~
(Exemple cu gramatici independente de context GIC ;
Transformarea GIC gramatic n F.N. Chomsky ;
Automatul Push-Down / Automatul Stiv)
L1 = {anbn, n 0}
= {=a0b0, ab=a1b1, aabb=a2b2, aaabbb=a3b3, aaaabbbb=a4b4, }
(1)
( 2)
S aSb |
sau
(1)
( 2)
( 3)
( 4)
S aAb |
A aAb |
Ideea acestei gramatici este de a genera cuvntul dinspre margini spre mijlocui lui, astfel
pentru fiecare aplicare a produciei (1) vor aprea un a i un b, iar ntre ele va rmne
S-ul pentru a continua generarea. La final, se aplic producia (2) pentru a nu mai avea
neterminal n cuvntul obinut.
Cel mai mic cuvnd este ntr-adevr cuvntul vid, pentru c putem aplica direct a doua
producie fr s o aplicm deloc pe prima.
L2 = {anbn, n 1}
= {ab=a1b1, aabb=a2b2, aaabbb=a3b3, aaaabbbb=a4b4, }
(1)
(1)
( 2)
S aSb | ab
sau
S aAb
( 2)
( 3)
A aAb |
Aici, cel mai mic cuvnt trebuie s fie ab, deci observm c din ambele gramatici de la
exemplul anterior au disprut produciile S.
n prima soluie avem ca pas se oprire cuvntul ab, iar n a doua soluie suntem obligai
s generm cel puin un a i un b (prin prima producie) nainte de a ne opri (cu a
treia producie).
- 34 -
L3 = {anb2n, n 1}
= {abb=a1b2, aabbbb=a2b4, aaabbbbbb=a3b6, }
(1)
( 2)
S aSbb | abb
Pentru fiecare a din prima parte a cuvntului trebuie s avem doi de b n a doua parte
a cuvntului.
Deoarece avem n 1, pasul de oprire, a doua producie este cu abb n membrul
drept.
Dac era n 0, atunci a doua producie ar fi avut ca membru drept cuvntul vid.
L4 = {a2nbkc3n, n 0, k 1}
= { b=b1, bb=b2, bbb=b3, bbbb=b4, ,
aabccc=a2b1c3, aabbccc=a2b2c3, aabbbccc=a2b3c3, aabbbbccc=a2b4c3, ,
aaaabcccccc=a4b1c6, aaaabbcccccc=a4b2c6, aaaabbbcccccc=a4b3c6, ... }
(1)
( 2)
S aaSccc | bA
( 3)
( 4)
A bA |
Pentru fiecare aa de la nceputul cuvntului trebuie s avem ccc la finalul lui, iar ntre
ele vom avea b-uri. Deci aici vom folosi nti neterminalul S pentru a genera a-urile
i c-urile, iar apoi vom trece n alt neterminal cu ajutorul cruia vom genera b-urile.
Observm c avem n 0, deci nu trebuie s-l obligm s aib a-uri i c-uri, ci
trebuie s l lsm s treac direct la b-uri.
Cel mai mic cuvnt este b: aplicm producia (2) i apoi pe (4).
L5 = {a2nbkc3n, n 1, k 1}
= { aabccc=a2b1c3, aabbccc=a2b2c3, aabbbccc=a2b3c3, aabbbbccc=a2b4c3, ,
aaaabcccccc=a4b1c6, aaaabbcccccc=a4b2c6, aaaabbbcccccc=a4b3c6, ... }
(1)
( 3)
( 4)
A bA | b
(1)
( 2)
S aaSccc | aaAccc
sau
( 2)
S aaSccc | aaAbccc
( 3)
( 4)
A bA |
(1)
sau
( 2)
S aaSccc | aabAccc
( 3)
( 4)
A bA |
Diferena fa de exemplul anterior este c aici i n este strict pozitiv, de aceea trebuie ca
nainte de a trece la neterminalul A s generm obligatoriu minim doi de a i trei de c
(producia a doua). Apoi n neterminalul A s generm cel puin un b (de aceea
observm c s-a modificat i producia a patra).
Cel mai mic cuvnt este aabccc: aplicm producia (2) i apoi (4).
- 35 -
L6 = {a2nc3nbk, n 1, k 1}
= { aacccb=a2c3b1, aacccbb=a2c3b2, aacccbbb=a2c3b3, aacccbbbb=a2c3b4, ,
aaaabccccccb=a4c6b1, aaaaccccccbb=a4c6b2, aaaaccccccbbb= a4c6b3, ... }
(1)
S AB
( 2)
( 3)
A aaAccc | aaccc
( 4)
( 5)
B bB | b
Observm c nu ntotdeauna putem genera cuvintele dinspre exterior spre centru, avnd
maxim un singur neterminal n membrul drept al produciilor. Uneori este necesar s
generm cuvintele pe buci, folosind pentru fiecare parte un neterminal separat.
Aici, vom folosi neterminalul A pentru a genera a-urile i c-urile spre centru simultan
cte doi de a i cte trei de c, iar din neterminalul B vom genera b-urile.
Dac am fi avut condiia n 0, atunci producia (3) ar fi fost A, iar dac am fi
avut condiia k 0, atunci producia (5) ar fi fost B.
S AB
( 2)
( 3)
A aaAccc | aaccc
( 4)
( 5)
B bB | b
(a) Avei aici (http://bit.ly/arbore_derivare) poza arborelui de derivare pentru a gsi toate
drumurile posibile prin care poate fi obinut cuvntul dat.
n desen, muchiile sunt etichetate cu numrul produciei care a fost aplicat, iar nodurile
interioare cu neterminalul care a fost rescris (n interiorul cercului) i cu noul cuvnt
obinut (n dreptunghiul de sub cerc).
Avem mai multe tipuri de noduri fr fii:
- Cele marcate cu -- reprezint nceputul unor subarbori care mai pot fi extini,
dar n care nu vom mai gsi soluii pentru cuvntul dat. Acest lucru se poate
ntmpla din dou motive: fie am aplicat de prea multe ori una dintre produciile
recursive (2 sau 4), fie am aplicat producia pentru pasul de oprire (3 sau 5)
nainte de a o aplica de suficiente ori pe cea recursiv.
- Cele marcate cu cerc dublu reprezint frunze ale arborelui, adic sfritul
drumurilor n urma crora am obinut cuvinte fr neterminale, adic unele dintre
cuvintele care sunt generate de gramatic.
- Cel marcate cu cerc dublu n care este scris OK reprezint toate drumurile prin
care putem genera cuvntul dat.
Observm (direct din cuvnt i din structura gramaticii) c produciile pe care trebuie s
le aplicm sunt: o dat (1), apoi o dat (2), o dat (3) (dar numai dup ce a fost aplicat
2), de dou ori (4), o dat (5) (dar numai dup ce a fost aplicat 4 de dou ori). Dar
ordinea pentru 2,3,4,5 poate fi oricare n afara restriciilor menionate. De aceea vom
obine cele 10 soluii: 23445, 24345, 24435, 24453, 42345, 42435, 42453, 44235, 44253,
44523.
- 37 -
( 2)
( 3)
( 4)
( 4)
( 5)
S AB aa AcccB a 4 c 6 B a 4 c 6b B a 4 c 6b 2 B a 4 c 6b 3
Obs: Dac cerina este doar de a verifica pentru un anumit cuvnt dac este sau nu
generat de gramatic, atunci este preferabil varianta (b). Dar dac cerina este s se afle
toate cuvintele generate de o gramatic, pentru o lungime de cuvnt dat sau pentru un
numr maxim de aplicri ale produciilor, atunci trebuie folosit varianta (a) cu
extinderea mai multor drumuri.
Continum cu exemplele de gramatici independente de context.
Dac avem cuvinte formate din 4 poriuni (a, b, c, d) i vrem ca lungimile poriunilor
(puterile la care sunt literele) s depind unele de altele grupate dou cte dou atunci
avem doar dou posibiliti de grupare: prima cu a patra (i a doua cu a treia) sau prima
cu a doua (i a treia cu a patra).
Deci nu vom putea s avem grupe intersectate (prima cu a treia; a doua cu a patra)!
( 3)
(1)
( 2)
S aSd | aAd
( 4)
sau
( 2)
( 3)
S aSd | ad | aAd
( 4)
( 5)
A bAcc |
A bAcc |
(n a doua soluie, producia (2) este redundant pentru c poate fi obinut aplicnd (3)
i apoi (5))
Aici avem grupate poriunile 1-4 i 2-3, deci vom genera cuvintele dinspre exterior spre
centru, nti a-urile simultan cu d-urile, iar apoi b-urile simultan cu c-urile.
Atenie, trebuie s folosim neterminale diferite, pentru c altfel s-ar genera i cuvinte cu
literele amestecate (a i b ntre ele i c i d ntre ele).
Avem k 0, deci b-urile i c-urile pot lipsi, de aceea avem producia (4) pe care o
aplicm pentru cazurile cnd avem k = 0.
Avem n 1, deci producia (2), pentru c trebuie s ne asigurm c avem cel puin un
a i un d nainte de a trece la neterminalul A pentru a genera mijlocul cuvntului.
Dac am fi avut k 1, atunci producia (4) s-ar fi transformat n Abcc.
- 38 -
( 2)
S aSd | bAcc
( 3)
( 4)
A bAcc |
Structura cuvintelor este aceeai ca la exemplul anterior, s-au schimbat doar condiiile.
Avem n 0, deci a-urile i d-urile pot lipsi, dar mijlocul nu. De aceea avem
producia (2) n care folosim direct bcc-ul pentru a trece la neterminalul A.
Avem k 1, dar deja am citit un bcc cu neterminalul S, deci pasul de oprire pentru A
va fi cu cuvntul vid.
Dac am fi avut k 0, nseamn c i mijlocul (b-urile i c-urile) ar fi putut lipsi,
deci am fi avut n plus producia S.
S AB
( 2)
( 3)
A aAbb |
( 4)
( 5)
B ccBd | ccd
Aici avem grupate poriunile 1-2 i 3-4, deci din simbolul de start S ne vom ramifica n
dou pri disjuncte: vom folosi un neterminal A pentru a genera dinspre exterior spre
interior poriunea cu a-uri i b-uri, iar separat vom folosi un neterminal B pentru a
genera dinspre exterior spre interior poriunea cu c-uri i d-uri.
Avem n 0, deci pasul de oprire pentru A va fi cuvntul vid.
Avem k 1, deci pasul de oprire pentru B va fi ccd.
( 2)
S AB |
( 3)
( 4)
A aAbb |
( 5)
(6)
(7)
B cBeee | | dC
(8)
(9)
C dC |
(producia (2) este reduntant pentru c poate fi obinut din 1, 4, 6)
Vom folosi neterminaul A pentru a genera spre interior a-urile i b-urile. Separat,
vom folosi neterminalul B pentru a genera spre interior c-urile i e-urile, iar apoi
ntre ele d-urile.
- 39 -
A BC
EXEMPLU:
Avem urmtoarea gramatic independent de context:
(1)
( 2)
( 3)
S aBcDeF | HF | HBc
( 4) (5)
B b |
(6) (7 )
Dd |
(8)
F G
( 9 ) (10)
G f | g
(11)
- 40 -
(12)
(13)
S aBcDeF | F | Bc
( 4)
(5)
(6)
(7)
B b |
Dd |
(8 )
F G
(9)
(10)
G f | g
(ii) Dac neterminalul care are o producie are i alte producii, atunci
- va fi eliminat doar producia lui
- toate produciile care au ca membru drept un cuvnt de lungime minim 2 n care
apare acest neterminal vor fi nlocuite att de varianta n care cuvntul conine
neterminalul, ct i de varianta n care neterminalul este eliminat din cuvnt
- dac membrul drept avea lungime 1 (adic era doar acest neterminal), atunci aceast
producie este o redenumire i va fi eliminat la pasul 2
n EXEMPLU:
Neterminalele B i D au mai multe producii printre care i cte o producie. Deci
(5) i (7) vor fi eliminate.
n producia (13) apare doar B, deci va fi nlocuit cu SBc (14) i Sc (15).
n producia (1) apar i B i D, deci va fi nlocuit de toate variaiile posibile:
-- B i D prezente: SaBcDeF (16)
-- B lips, D prezent: SacDeF (17)
-- B prezent, D lips: SaBceF (18)
-- B i D lips: SaceF (19)
(16)
(17)
(18)
(19)
(11)
(14)
(15)
B b
(6)
; Dd
(8)
( 9 ) (10)
; F G ; G f | g
(17)
(18)
(19)
( 22) ( 23)
(14)
(15)
B b
(6)
; Dd
( 20) ( 21)
; F f | g
( 25)
( 26)
( 27 )
( 22) ( 23)
( 28)
(15)
S Xa B Xc D Xe F | Xa Xc D Xe F | Xa B Xc Xe F | Xa Xc Xe F | f | g | B Xc | c
( 4)
B b
(6)
; D d
( 29)
Xa a
( 20) ( 21)
; F f | g
( 30)
Xc c
( 31)
Xe e
- 42 -
( 37 )
( 38)
( 41)
( 22) ( 23)
( 28)
(15)
S X a Y1 | X a Y2 | X a Y5 | X a Y6 | f | g | B X c | c
( 4)
B b
(6)
; Dd
( 29)
Xa a
( 33)
Y1 B Y2
( 20) ( 21)
; F f | g
( 30)
Xc c
( 34)
; Y2 X c Y3
( 31)
Xe e
( 35)
; Y3 D Y4
( 36)
; Y4 X e F
( 39)
; Y5 B Y6
( 40)
; Y6 X c Y4
- 43 -
LF ( APD) {w | (q0 , w, Z 0 ) ( p, , ), p F , }
(Obs: semnul cu stelu deasupra ar trebui s fie doar T-ul ntors, fr sgeat n
dreapta, dar nu am gsit simbolul potrivit...)
Citim: Cuvntul w este acceptat de automat dac pornind din configuraia avnd starea
q0, cuvntul de intrare w i pe stiv simbolul iniial Z0, dup ce aplicm un numr
oarecare de tranziii ajungem n configuraia final.
n acest caz (a) ne intereseaz:
- prima component s fie o stare final;
- a doua component s fie cuvntul vid (adic s fi terminat de parcurs tot cuvntul
de intrare)
n acest caz (a) NU ne intereseaz a treia component (coninutul stivei): poate s fie vid
sau poate s conin un cuvnt cu simboluri din alfabetul .
(b) cu vidarea stivei
*
L ( APD) {w | (q0 , w, Z 0 ) ( p, , ), p Q}
- 44 -
L1 = {anbn, n 1}
Vrem ca numrul de a-uri s fie egal cu numrul de b-uri, deci vom reine acest
numr cu ajutorul stivei astfel:
- pentru fiecare a citit din cuvntul de intrare, vom aduga un A n stiv;
- pentru fiecare b citit vom terge un A din stiv;
- 45 -
L2 = {anb2n, n 0}
Pentru fiecare a citit, vom aduga doi de A n stiv (adic AA).
Pentru fiecare b citit, vom terge un A din stiv.
Astfel ne asigurm c numrul de b-uri este dublul celui de a-uri.
Schimbm starea dup ce citim primul b, pentru a nu amesteca literele.
Trebui s ne asigurm c acceptm i cuvntul vid (pentru c avem n 0).
- 46 -
- 47 -
- 48 -
- 49 -
~ Seminar 5 ~
(Exemple cu APD (continuare) ;
Algoritmul CYK: Verificare generare cuvnt de ctre gramatic n F.N.Chomsky)
- 50 -
- 51 -
(q0 , a, Z 0 ) (q0 , AZ 0 )
(q0 , a, A) (q0 , AA)
(q0 , b, A) (q1 , )
(q1 , b, A) (q1 , )
(q1 , , A) (q2 , ) // obligatoriu mai gsete cel puin un A n stiv
(q2 , , A) (q2 , ) // altfel nu poate ajunge din q1 n q3
(q2 , , Z 0 ) (q3 , ) , F {q3 }
Aceeai soluie, sub form de graf:
(q0 , a, Z 0 ) (q0 , AZ 0 )
- 52 -
L8 = {an bk, n 1, k 1, n k}
Putem avea fie numrul de a-uri strict mai mare dect numrul de b-uri fie invers
(numrul de b-uri strict mai mare dect numrul de a-uri).
Pentru fiecare a vom aduga un A, iar pentru fiecare b vom terge un A. Fie ne vor
rmne A-uri n stiv dup ce terminm de citit cuvntul de intrare (dac n > k), fie vom
ntlni Z0 dar vom mai citi cel puin un b din cuvnt (dac n < k).
(q0 , a, Z 0 ) (q0 , AZ 0 )
(q0 , a, A) (q0 , AA)
(q0 , b, A) (q1 , )
(q1 , b, A) (q1 , )
// n > k
(q1 , , A) (q2 , ) // obligatoriu mai gsete cel puin un A n stiv
(q2 , , A) (q2 , ) // altfel nu poate ajunge din q1 n q4
( q2 , , Z 0 ) ( q4 , )
// n < k
(q1 , b, Z 0 ) (q3 , Z 0 ) // obligatoriu mai citete cel puin un b
(q3 , b, Z 0 ) (q3 , Z 0 ) // dar nu uitm c trebuie s-l pstrm pe Z0 pn la final
(q3 , , Z 0 ) (q4 , )
F {q4 }
- 53 -
L9 = {a2n b3k, n 1, k 1, n k}
Obs: Exist i o alt modalitate de a avea circuite de o anumit lungime. n loc s
folosim stri diferite, putem folosi simboluri diferite n stiv pe care le nlocuim unul cu
altul.
Trebuie s avem grupuri de cte doi a. Cnd l citim pe primul din grup adugm un A
n stiv. Cnd l citim pe al doilea din grup vom nlocui A-ul cu un B. La final vom avea
n de B n stiv.
Trebuie s avem grupuri de cte trei b. Cnd citim primul b din grup nlocuim un B
cu C n stiv. Cnd citim al doilea b din grup nlocuim C-ul cu un D. Iar cnd citim al
treilea b din grup tergem D-ul din stiv.
Deci avem circuit ntre A-B-A pentru 2n i circuit ntre B-C-D-B pentru 3k.
- 54 -
Notm cu Vi j mulimea de neterminale care pot genera acea poriune din cuvntul de
intrare care ncepe de pe poziia i i are lungimea j.
Ideea este de a mpri cuvntul n dou pri n toate modurile posibile. Dac prima
parte poate fi generat de neterminalul B, a doua parte poate fi generat de neterminalul
C i avem n gramatic producia ABC, atunci nseamn c ntreg cuvntul poate fi
generat de neterminalul A.
Observm c avem mpriri posibile pentru k=1 (prima liter n prima parte, iar restul n
a doua), k=2 (primele dou litere n prima parte, iar restul n a doua), ... pn la k=j1
(doar ultima liter n a doua parte, iar restul n prima).
Obs: Nu reinei indicii pe dinafar, ci ncercai s i deducei logic!
Valoare pe care o calculm este Vi j pentru cuvntul care ncepe la poziia i i are
lungimea j.
Prima parte (generat de neterminalul B) conine primele k litere din cuvnt. Deci va
ncepe la poziia i (la fel ca ntreg cuvntul) i va avea lungime k, deci Vi k.
A doua parte (generat de neterminalul C) conine restul de litere, adic jk, i ncepe cu
k poziii mai n dreapta fa de cuvntul total, adic la i+k, deci avem Vi+k, j-k.
Rspunsul final pe care l cutm este V1, |w| adic mulimea de neterminale din care
putem genera cuvntul dat ncepnd de pe prima poziie i avnd lungimea egal cu
ntreg cuvntul. Dac n aceast mulime se va gsi i simbolul de start S, nseamn c
cuvntul este generat de gramatic. Dac nu, atunci nu este generat.
La pasul iniial vom cuta neterminalele care genereaz fiecare liter mic (terminal) din
cuvnt: Vi1 { A N | ( A xi ) P} , unde xi este litera de pe poziia i din cuvntul dat.
- 55 -
EXEMPLU:
S BA
A a | BA | CA
Avem o gramatic n F.N.Chomsky:
i un cuvnt: baabca.
B b | AA | AB
C c | BC | BB
i=1
{B}
i=2
{A}
i=3
{A}
i=4
{B}
i=5
{C}
i=6
{A}
Pentru a doua linie, j = 2, avem cuvinte de lungime 2, deci nu le putem separa dect ntrun singur mod, pentru k = 1.
V12 V11 V21 {B}{A} {BA}
n gramatic apare BA ca membru drept pentru neterminalele S i A, deci n tabel vom
completa cu mulimea {S, A}.
V22 V21 V31 { A}{ A} { AA}
Singurul neterminal care se rescrie n AA este B, deci l trecem n tabel.
V32 V31 V41 { A}{B} { AB} rezult B n tabel.
V42 V41 V51 {B}{C} {BC} rezult C n tabel.
V52 V51 V61 {C} { A} {CA} rezult A n tabel.
Obs: Pentru a calcula orice valoare de pe linia j=2 se face produsul cartezian ntre
mulimile aflate la nord i la nord-est de acea valoare.
- 56 -
i=1
{B}
{S, A}
i=2
{A}
{B}
i=3
{A}
{B}
i=4
{B}
{C}
i=5
{C}
{A}
i=6
{A}
Pentru a treia linie, j = 3, avem cuvinte de lungime 3, deci putem avea k=1 sau k=2 i
reunim cele dou cazuri.
V13 V11 V22 V12 V31 {B}{B} {S , A}{ A} {BB , SA, AA}
Nu avem SA ca membru drept n gramatic, dar avem BB generat de C, iar AA de B,
deci n tabel completm {B, C}.
V23 V21 V32 V22 V41 { A}{B} {B}{B} { AB, BB} rezult {B, C} n tabel.
V33 V31 V42 V32 V51 { A}{C} {B}{C} { AC, BC} rezult {C} n tabel.
V43 V41 V52 V42 V61 {B}{ A} {C}{ A} {BA, CA} rezult {S, A} n tabel.
Vi j
j=1
j=2
j=3
j=4
j=5
j=6
i=1
{B}
{S, A}
{B, C}
i=2
{A}
{B}
{B, C}
i=3
{A}
{B}
{C}
i=4
{B}
{C}
{S, A}
i=5
{C}
{A}
i=6
{A}
Pentru a patra linie, j = 4, avem cuvinte de lungime 4, deci putem avea k=1, k=2 sau k=3.
V14 (V11 V23 ) (V12 V32 ) (V13 V41 )
Nu avem SB sau CB
{B} {B, C} {S , A} {B} {B, C} {B} {BB , BC , SB, AB, CB}
ca membru drept n gramatic, dar pentru restul avem {B,C} n tabel.
V24 (V21 V33 ) (V22 V42 ) (V23 V51 )
i=1
{B}
{S, A}
{B, C}
{B, C}
i=2
{A}
{B}
{B, C}
{C}
i=3
{A}
{B}
{C}
{S, A, B}
- 57 -
i=4
{B}
{C}
{S, A}
i=5
{C}
{A}
i=6
{A}
{B} {C} {S , A} {C} {B, C} {C} {B, C} {C} {BC , SC , AC, CC}
Nu avem SC, AC sau CC, dar pentru BC rezult {C} n tabel.
V25 (V21 V34 ) (V22 V43 ) (V23 V52 ) (V24 V61 )
{ A} {S , A, B} {B} {S , A} {B, C} { A} {C} { A} { AS , AA, AB, BS , BA, CA}
Nu avem AS, BS dar pentru AA, AB, BA, CA rezult {S,A,B} n tabel.
Vi j
j=1
j=2
j=3
j=4
j=5
j=6
i=1
{B}
{S, A}
{B, C}
{B, C}
{C}
i=2
{A}
{B}
{B, C}
{C}
{S, A, B}
i=3
{A}
{B}
{C}
{S, A, B}
i=4
{B}
{C}
{S, A}
i=5
{C}
{A}
i=6
{A}
Pentru linia a asea, avem cuvntul total de lungime j=6, variabila k ia valori ntre 1 i 5.
V16 (V11 V25 ) (V12 V34 ) (V13 V43 ) (V14 V52 ) (V15 V61 )
i=1
{B}
{S, A}
{B, C}
{B, C}
{C}
{S,A,B,C}
i=2
{A}
{B}
{B, C}
{C}
{S, A, B}
i=3
{A}
{B}
{C}
{S, A, B}
i=4
{B}
{C}
{S, A}
i=5
{C}
{A}
i=6
{A}
n mulimea final obinut pentru V16 exist S, deci cuvntul este generat de gramatic.
Obs: Dac mulimea final conine i alte elemente, nseamn c acel cuvnt dat ar putea
fi generat i pornind din acele neterminale (A, B sau C). Dar dac existau doar ele i nu
exista i S, acest lucru nu ne ajuta la nimic, cuvntul nu ar fi fost generat de gramatic.
Obs: Unde apare S n tabel nseamn c gramatica genereaz i cuvintele corespunztoare
pentru acele perechi (i, j).
Pentru ij = 12 avem cuvntul ba: S BA b A ba .
Pentru ij = 25 avem aabca, pentru ij = 34 avem abca, pentru ij = 43 avem bca.
- 58 -
~ Seminar 6 ~
(Leme de pompare pentru limbajele regulate)
i)
u v n
ii )
v 1
iii ) u v i w L, i 0
Vrem s demonstrm c urmtoarele limbaje nu sunt regulate.
Schema demonstraiei este s presupunem prin absurd c limbajul este regulat i atunci
putem aplica lema anterioar. Alegem un cuvnt din limbajul dat care s respecte
ipoteza lemei, adic s aib lungimea cel puin n, iar descompunerea sa u v w s
respecte condiiile i) i ii). Apoi alegem convenabil un numr natural i pentru care s
obinem o contradicie a condiiei iii), adic s rezulte c cuvntul u v i w L , i deci
presupunerea fcut este fals.
L1 = {ak^2, k 1} = {a1, a4, a9, a16, a25, a36, a49, a64, a81, a100, ...}
Vrem s demonstrm c L1 nu este limbaj regulat. Observm c L1 conine cuvinte
formate doar din litera a i avnd lungimi egale cu ptratele perfecte strict pozitive.
Presupunem prin absurd c L1 este limbaj legulat. Atunci n N i putem aplica lema
2
de pompare. Alegem cuvntul a n , cu n 2 n (deci lungimea cuvntului
respect ipoteza lemei).
Conform lemei, cuvntul poate fi scris sub forma u v w , iar 1 v n (cele dou
inegaliti rezult din condiiile ii) i i) i din faptul c nu se spune c u nu ar putea fi
cuvntul vid, deci de lungime 0).
De asemenea, condiia iii) spune c u v i w L, i 0 . Alegem i 2 . Atunci avem
cuvntul u v 2 w de lungime u v 2 w u v w v v n 2 v .
La inegalitatea de mai sus adunm peste tot n2 i obinem: n2 1 n2 v n2 n , adic
n2 1 u v2 w n2 n .
u v 2 w L1 (pentru c lungimea cuvntului este inclus strict ntre dou ptrate perfecte
alturate, deci u v 2 w nu poate fi ptrat perfect).
- 59 -
- 60 -