Algorisme de Kleene

De testwiki
Salta a la navegació Salta a la cerca

En informàtica teòrica, en particular en teoria de llenguatges formals, l'algorisme de Kleene transforma un autòmat finit no determinista (AFND) en una expressió regular. Juntament amb altres algorismes de conversió, estableix l'equivalència de diversos formats de descripció per llenguatges regulars. Presentacions alternatives del mateix mètode inclouen el "mètode d'eliminació" atribuït a Brzozowski i McCluskey, l'algorisme de McNaughton i Yamada, i l'ús del lema d'Arden.[1]

Descripció de l'algorisme

Segons Brut i Yellen (2004),[2] l'algoritme pot ser remuntat a Kleene (1956).[3] Una presentació de l'algorisme en el cas de l'autòmat determinista finit (ADF) és donat a Hopcroft i Ullman (1979).[4] La presentació de l'algorisme per AFNDs a sota segueix Brut i Yellen (2004).

Donat un autòmat finit no determinista M=(Q,Σ,δ,q0,F), amb Q={q0,,qn} el seu conjunt d'estats, l'algorisme computa els conjunts Rijk de totes les entrades que porten M de l'estat qi a qj sense passar per cap estat superior a k. Aquí, "passar per un estat" vol dir entrar-hi i sortir-ne, així que ambdós i i j poden ser superiors a k, però no cap estat intermedi. Cada conjunt Rijk és representat per una expressió regular; l'algorisme els computa pas a pas per k=1,0,,n. Com no hi ha cap estat superior a n, l'expressió regular R0jn representa el conjunt de totes les entrades que porten M del seu estat inicial q0 a qj. Si F={q1,,qf} és el conjunt d'estats finals, l'expressió regular R01nR0fn representa el llenguatge acceptat per M.

Les expressions regulars inicials, per a k=1, es computen de la següent manera per a ij:

Rij1=a1am on qjδ(qi,a1),,qjδ(qi,am)

i com segueix per a i=j:

Rii1=a1amϵ on qiδ(qi,a1),,qiδ(qi,am)

És a dir, Rij1 representa tots els símbols d'entrada que causen una transició d'qi a qj, i també incloem ϵ quan i=j.

Seguidament, en cada pas les expressions Rijk es calculen a partir de les anteriors mitjançant:

Rijk=Rikk1(Rkkk1)Rkjk1Rijk1

Una altra manera d'entendre el procediment de l'algorisme és com un "mètode d'eliminació", on els estats de 0 a n s'eliminen successivament: quan s'elimina l'estat k, l'expressió regular Rijk1, que descriu les paraules d'entrada que generen un camí de l'estat i>k a l'estat j>k, és reescrita dins Rijk a fi de tenir en compte la possibilitat de passar per l'estat "eliminat" k.

Per inducció en k, es pot veure que la longitud[5] de cada expressió Rijk és com a màxim 13(4k+1(6s+7)4) símbols, on s denota el nombre de caràcters dins l'alfabet Σ. Per tant, la longitud de l'expressió regular que representa la llengua acceptada per M és com a màxim  13(4n+1(6s+7)ff3) símbols, on f denota el nombre d'estats finals. Aquest creixement exponencial és inevitable, ja que existeixen famílies d'AFDs pels quals qualsevol expressió regular equivalent ha de ser de mida exponencial.[6]

A la pràctica, la mida de l'expressió regular obtinguda per l'algorisme pot ser molt diferent depenent en l'ordre en què es consideren els estats, i.e. l'ordre amb el qual són numerats de 0 a n.

Exemple

Autòmat finit determinista (AFD) de l'exemple

L'autòmat donat a l'esquema pot ser descrit com M=(Q,Σ,δ,q0,F) amb

  • Q={q0,q1,q2} el conjunt d'estats,
  • Σ={a,b} l'alfabet d'entrada,
  • δ la funció de transició amb δ(q0,a)=q0, δ(q0,b)=q1, δ(q1,a)=q2, δ(q1,b)=q1, δ(q2,a)=q1, δ(q0,b)=q1,
  • q0 l'estat inicial,
  • F={q1} el conjunt d'estats finals o d'acceptació.

L'algorisme de Kleene computa les expressions regulars inicials de la següent forma:

R001=aϵR011=bR021=R101=R111=bϵR121=aR201=R211=abR221=ϵ

Seguidament, les Rijk es computen a partir de les Rijk1 pas a pas per k=0,1,2. S'utilitzen igualtats de l'àlgebra de Kleene per a simplificar les expressions regulars tant com sigui possible.

Pas 0

R000=R001(R001)R001R001=(aϵ)(aϵ)(aϵ)aϵ=aR010=R001(R001)R011R011=(aϵ)(aϵ)bb=abR020=R001(R001)R021R021=(aϵ)(aϵ)=R100=R101(R001)R001R101=(aϵ)(aϵ)=R110=R101(R001)R011R111=(aϵ)bbϵ=bϵR120=R101(R001)R021R121=(aϵ)a=aR200=R201(R001)R001R201=(aϵ)(aϵ)=R210=R201(R001)R011R211=(aϵ)bab=abR220=R201(R001)R021R221=(aϵ)ϵ=ϵ

Pas 1

R001=R010(R110)R100R000=ab(bϵ)a=aR011=R010(R110)R110R010=ab(bϵ)(bϵ)ab=abbR021=R010(R110)R120R020=ab(bϵ)a=abbaR101=R110(R110)R100R100=(bϵ)(bϵ)=R111=R110(R110)R110R110=(bϵ)(bϵ)(bϵ)bϵ=bR121=R110(R110)R120R120=(bϵ)(bϵ)aa=baR201=R210(R110)R100R200=(ab)(bϵ)=R211=R210(R110)R110R210=(ab)(bϵ)(bϵ)ab=(ab)bR221=R210(R110)R120R220=(ab)(bϵ)aϵ=(ab)baϵ

Pas 2

R002=R021(R221)R101R001=abba((ab)baϵ)a=aR012=R021(R221)R111R011=abba((ab)baϵ)(ab)babb=ab(a(ab)b)R022=R021(R221)R121R021=abba((ab)baϵ)((ab)baϵ)abba=abb(a(ab)b)aR102=R121(R221)R101R101=ba((ab)baϵ)=R112=R121(R221)R111R111=ba((ab)baϵ)(ab)bb=(a(ab)b)R122=R121(R221)R121R121=ba((ab)baϵ)((ab)baϵ)ba=(a(ab)b)aR202=R221(R221)R101R201=((ab)baϵ)((ab)baϵ)=R212=R221(R221)R111R211=((ab)baϵ)((ab)baϵ)(ab)b(ab)b=(ab)(a(ab)b)R222=R221(R221)R121R221=((ab)baϵ)((ab)baϵ)((ab)baϵ)(ab)baϵ=((ab)ba)

Com q0 és l'estat inicial i q1 és l'únic estat final, l'expressió regular R012 denota el conjunt de totes les paraules d'entrada acceptades per l'autòmat.

Referències

Plantilla:Referències

  1. Plantilla:Ref-publicació
  2. Plantilla:Ref-llibre Here: sect.2.1, remark R13 on p.65
  3. Plantilla:Ref-publicació Here: sect.9, p.37-40
  4. Plantilla:Ref-llibre Here: Section 3.2.1 pages 91-96
  5. More precisely, the number of regular-expression symbols, "ai", "ε", "|", "*", "·"; not counting parentheses.
  6. Plantilla:Ref-publicació. Theorem 16.