Escolar Documentos
Profissional Documentos
Cultura Documentos
v
Resumo
H dois algoritmos standard para converter um autmato finito numa expresso regular
equivalente, que so o algoritmo de Kleene e o algoritmo da eliminao de estados, que
consiste em eliminar em cada passo um estado e actualizar as transies do autmato de
forma a que a linguagem reconhecida no se altere. O primeiro algoritmo produz, regra
geral, expresses de tamanho superior s produzidas pelo segundo. Na especificao
do segundo algoritmo nada dito quanto ao estado que deve ser eliminado, a no
ser que deve ser diferente de dois estados especiais que no so removveis em passo
algum do algoritmo. A ordem em que os estados so removidos determina o tamanho
da expresso obtida e assim, numa aplicao deste algoritmo sem uma preocupao
com a escolha do estado a ser removido, podem produzir-se expresses de tamanho
muito superior ao de uma expresso de tamanho mnimo obtenvel por este algoritmo
para o autmato em causa.
vii
ndice
Resumo vii
1 Introduo 1
ix
1.1.7.1 Implementao 15
2 Autmatos nard 23
2.1 Introduo 23
2.3 Implementao 31
2.5 Concluses 38
3.1 Pesos 43
3.2 Heurstica 44
3.4 Implementao 48
3.5 Concluses 49
4.1 Motivao 55
4.2 Heurstica 56
4.3 Exemplo 62
4.5 Implementao 67
4.6 Concluses 71
x
5 Concluses 75
Referncias 79
ndice de Tabelas 83
ndice de Figuras 85
Lista de Acrnimos 89
ndice Remissivo 91
A Cdigo 93
A.l FAtoRatExpX 93
A.2 NardFAtoRatExp 99
xi
Captulo 1
Introduo
Da hierarquia de Chomsky [HU01] iremos lidar neste trabalho apenas com linguagens
regulares. O estudo de linguagens regulares e autmatos finitos data do incio da
dcada de 40 do sculo XX, em que autmatos finitos eram usados para modelar redes
neuronais por McCulloch e Pitts [MP43]. Resultados da investigao inicial so, por
exemplo, o teorema de Kleene que estabelece a equivalncia entre expresses regulares e
autmatos finitos [Kle56], a introduo de autmatos com output por Mealy e Moore
[M0066], a introduo de autmatos finitos no determinsticos por Rabin e Scott
[RS59] e a caracterizao de linguagens regulares por congruncias de ndice finito por
Myhill [Myh57] e Nerode [Ner58].
1
mais recentes surgiram aplicaes nos domnios do processamento paralelo, gerao e
compresso de imagem, teoria de tipos para linguagens de programao orientadas a
objectos, computaes de ADN, etc [Yu97].
Neste trabalho, dentro do tema das linguagens regulares, iremos focar-nos no problema
de procurar, para uma dada linguagem deste tipo, uma sua representao por uma
expresso regular com o menor tamanho. O tema da simplificao de expresses
regulares foi abordado por alguns investigadores, nomeadamente os referidos em
[Mit03]. Estes trabalhos consistem em manipulaes algbricas de expresses regulares.
A nossa abordagem difere destas no sentido de que tentamos obter, a partir de um
autmato e baseados num algoritmo conhecido, uma expresso regular equivalente
com o menor tamanho. Nas nossas pesquisas, encontrmos muito pouco trabalho
neste sentido, sendo esta abordagem apenas referida em Regular Expressions: New
Results and Open Problems [ESW02], onde se diz, a propsito da converso de
autmatos finitos em expresses regulares, que "Dividir para conquistar, juntamente
com uma heurstica para a separao de grafos ou um algoritmo de aproximao sero
certamente tcnicas poderosas para a obteno de expresses regulares relativamente
pequenas a partir de autmatos arbitrrios..."; em A characterization of Thompson
digraphs [GPW99], onde se caracterizam os digrafos de Thompson (aqueles que so
obtidos a partir de uma expresso regular pelo algoritmo de Thompson) e para estes
se apresenta um algoritmo linear que produz uma expresso de tamanho linear no
tamanho do digrafo, em que o tamanho do digrafo o nmero das suas transies e
o tamanho de uma expresso regular o nmero total de ocorrncias na expresso de
smbolos de S U {e, 0}; e em Characterization of Glushkov automata [CZOO] onde algo
semelhante feito mas para autmatos de Glushkov.
2
escolha apropriada do estado a ser removido, pelas quais se verifica que a heurstica
produz melhores resultados. No Captulo 4 apresentamos uma heurstica com o mesmo
objectivo que a anterior, mas concebida especificamente para o caso de autmatos
acclicos e que, nestes casos, produz melhores resultados que a heurstica anterior.
No Captulo 5 delineamos a continuao deste trabalho que gostaramos de fazer no
futuro. Em apndice apresentamos o cdigo das vrias funes implementadas.
3
a linguagem vazia 0 uma linguagem regular,
Assumimos que * tem maior precedncia que e + e que tem maior precedncia que
+. Os parntesis sero omitidos sempre que isso no seja ambguo e omitiremos o
smbolo na escrita de expresses regulares.
Exemplo 1.1.1 A linguagem constituda por todas as palavras que comeam por aa
e terminam com sobre o alfabeto S = {a, b} pode ser representada pela expresso
regular aa(a + b)*bb.
4
1.1.1.1 Medidas de Complexidade de Expresses Regulares
Por outro lado, se L uma linguagem regular aceite por um autmato finito (ver pgina
8) A = (Q,T,,,q0,F) em que \ Q \= n e \ T, \= k, ento L pode ser representada
5
por uma expresso regular de tamanho (segundo a medida 3) no superior a nk4n
[ESW02].
1. r + (s + t) - (r + s) + t
2. r + s = s + r
3. r + $ = r
4. r + r = r
5. r(st) = (rs)t
6. er = r
7. re r
6
8. r(s + ) = rs + rt
9. (r + s)t = rt + st
10. 0r = 0
11. r0 = 0
onde r < s = r + s = s,
Neste trabalho, apenas consideraremos digrafos, pelo que, sempre que escrevermos
"grafo", estaremos a referir-nos a um digrafo.
Um caminho num grafo G uma sequncia de vrtices, Vi vn, tais que (V, Vi+\) G
E,l < i < n. C hamamos ciclo a um caminho em que o primeiro e o ltimo vrtices
so o mesmo.
7
Definimos o grau de entrada de um vrtice v, num grafo G, ge(v), como o nmero de
arcos (u, v) de G, com u^v. Analogamente, definimos o grau de sada de um vrtice
v, num grafo G, gs(v), como o nmero de arcos (v, u) de G, com u ^ v [BJG01]. Uma
ordem topolgica T num grafo acclico G (V, E) com | V | = n uma funo de V
em { 1 , . . . , n} tal que se (u, v) & E ento T(u) < T(v).
lista de adjacncias: uma lista em que o i-simo elemento a lista dos vrtices
v tais que (i, v) G E e
Nesta subseco iremos apresentar quatro tipos de autmatos finitos (AF): autmatos
finitos determinsticos (AFD), autmatos finitos no determinsticos (AFND),
autmatos finitos no determinsticos com transies-e (AFNDTE) e autmatos finitos
estendidos (AFE).
S o alfabeto de input,
9o Q o estado inicial e
8
F Q o conjunto de estados finais.
Note-se que em geral no requeremos que a funo de transio S seja total, i.e., que
esteja definida para todos os pares e m Q x E . Se 6 for total dizemos que A um AFD
completo.
(l,o) = l, S(l,b) = 2,
(2,a) = l, (2,6) = 3,
6(3,0.) = 2, 6(3, b) = 3.
Na Figura que se segue encontra-se uma representao grfica deste autmato, em que
existe o arco (1,1*2) etiquetado por a se 6(vi,a) = V2, o estado inicial indicado por
uma seta com a cabea nesse estado e a cauda em nenhum estado e os estados finais
so representados com crculos duplos.
9
tal que a h * - 1 7 e 7 h j3. O fecho transitivo e o fecho reflexivo e transitivo de h so
denotados por h + e h* respectivamente. Uma palavra i E ' aceite por um AFD
A se e s se q0x \-*A fe com / G F. A linguagem aceite por um AFD A o conjunto
das palavras aceites por A e designa-se por L(4).
10
com f F. A linguagem aceite por um A FND o conjunto das palavras aceites pelo
autmato em causa.
E o alfabeto de input,
qo o estado inicial e
11
L(5(qn-i,qn)). A linguagem aceite por um A FE o conjunto das palavras aceites pelo
autmato em causa.
Chamamos autmato til a um autmato em cujo grafo subjacente passa por todo o
vrtice algum caminho entre o vrtice inicial e um vrtice final e para cada vrtice
final fin existe um caminho do vrtice inicial para fin. Dizemos que um autmato
acclico se no contm nenhum ciclo.
12
1.1.5 Equivalncia dos Modelos Apresentados
Assim tambm vemos que um AFE pode ser transformado num AFNDTE equivalente,
substituindo o arco entre dois estados p e q pelo AFNDTE que resulta da aplicao
do algoritmo de Thompson expresso 6(p, q), uma vez que o autmato de Thompson
resultante tem apenas um estado final. Claramente, um AFNDTE pode ser visto como
um AFE, resultando a equivalncia entre AFEs e AFNDTEs.
13
1.1.6 Autmatos Mnimos
Dado um AFD A possvel encontrar um AFD A' tal que L(A) L(A') e A' mnimo
no nmero de estados. Um dos algoritmos para a minimizao encontra-se descrito em
[ASU86] e uma taxonomia destes algoritmos pode ser encontrada em [Wat94a]. O AFD
mnimo para uma dada linguagem regular nico a menos de uma renomeao dos
estados [ASU86], o que permite testar se dois autmatos aceitam a mesma linguagem.
Um AFND mnimo no nmero de estados pode no ser nico no conjunto dos AFNDs
que lhe so equivalentes, o mesmo acontecendo com as expresses regulares. Em termos
de espao, a representao de uma linguagem regular por um AFND pode oferecer uma
vantagem exponencial em relao a um AFD [HK02]. 0 problema de converter um
AFD num AFND equivalente e minimal PSPACE-completo [JR93]. O problema da
minimizao de AFNDs PSPACE-completo (excepto no caso de alfabetos unrios,
em que o problema NP-completo) [GJ03].
O algoritmo da eliminao de estados (AEE) permite obter uma expresso regular que
representa a linguagem reconhecida por um dado AF. O AEE consiste em remover em
cada passo um vrtice do AFE associado ao autmato finito dado e na actualizao
do AFE resultante de forma a que a linguagem reconhecida no se altere. O algoritmo
termina quando restarem apenas dois vrtices ira e fin (que no so removveis e que
so, respectivamente, um novo estado inicial do qual parte uma transio por e para
o estado inicial, que deixa de ser inicial e um novo estado final para o qual h uma
transio por e de cada estado final, deixando estes de ser finais) e a expresso regular
de output S(ini,fin).
Seja A (Q,T,,,q0,F) um AFE e rPq a expresso regular (p, q), i.e., a etiqueta da
transio entre p e q, p, q Q. Seja q um estado tal que q ^ q0 e q F. Um AFE
A' = (Q1, S, 6', o, F) equivalente a A tal que Q' = Q {<?}, i.e., em que q foi removido
de A, definido do seguinte modo: para cada par de estados pes pertencentes a Q',
14
A descrio completa do algoritmo a seguinte (ver [Yu97]): Seja A (Q, S, S, q0, F)
um AFE,
1. Se o estado inicial for tambm final ou se tiver grau de entrada superior a 0, ento
adiciona-se a A um novo estado ini no removvel e inicial e uma transio por
e de ini para o estado inicial e este deixa de ser inicial; se o estado inicial no
for final e tiver grau de entrada 0, ento no necessrio acrescentar um novo
estado e toma-se o estado no removvel, ini, como sendo o estado inicial. Se
houver mais que um estado final ou se o nico estado final tiver grau de sada
superior a 0, ento acrescenta-se um novo estado ao autmato, fin no removvel
e final e uma transio por e de cada estado final para fin, deixando estes de
ser finais; se houver apenas um estado final e este tiver grau de sada 0, ento
no necessrio acrescentar um novo estado e toma-se o estado no removvel,
fin, como sendo o estado final.
3. Escolhe-se q G Q' tal que ini / q / fin, remove-se q de A' como indicado acima,
actualizando ' como na Equao (1.1) e executa-se o passo 2.
1.1.7.1 Implementao
O GAP um sistema de software livre sob GPL (GNU Public License) para lgebra
computacional discreta e o seu nome um acrnimo de Groups, Algorithms and
Programming. Este sistema fornece uma linguagem de programao imperativa.
Na Seco A.l (pgina 93) apresentamos uma implementao do AEE escrita em
GAP [GAP04]. Esta implementao fez, inicialmente, parte de um pacote sobre
autmatos [DLM04] desenvolvido em colaborao com M. Delgado (Universidade
do Porto) e S. Linton (Universidade de St. Andrews) e aceite para integrar
futuras distribuies do GAP. Esta implementao foi posteriormente substituda pela
heurstica descrita no Captulo 3.
15
tais que do estado q h uma transio para s etiquetada por a. No cdigo chamamos
GTG - Generalized Transition Graph [MMP + 95] ao AFE associado ao autmato de
input. A funo computeGTG calcula o AFE associado ao AF dado e as funes
destroyLoop e d e s t r o y S t a t e implementam, respectivamente, a eliminao de um
estado pela eliminao primeiro do lacete, se existir e em seguida a eliminao do estado
propriamente dita. A funo RatExpOnnLetters(n, op, l i s t ) cria uma expresso
regular sobre um alfabeto S de n smbolos, em que op [ ] , product, union ou s t a r
conforme se trate de um smbolo do alfabeto (ou e ou 0), ou uma concatenao, ou
uma unio ou o fecho de Kleene, respectivamente; l i s t uma lista de expresses
regulares (as subexpresses) se se trata de uma concatenao ou unio, [n] se se trata
do n-simo smbolo de no caso de a expresso ser um smbolo de E (considera-se
uma ordem em E) ou uma expresso regular se se trata do fecho de Kleene.
FAtoRatExpX := function(A)
16
A funo computeGTG executada uma nica vez e tem complexidade 0(kn3) no caso
2
de o input ser um AFND ou um AFNDTE e 0{kn ) no caso de um AFD, em que n
o nmero de estados do AF de input e k = | S |. Como se pode ver pelas seguintes
linhas de cdigo da funo computeGTG a complexidade Q(kn3):
f o r p i n [1 . . A ! . s t a t e s ] do
for q in [1 . . A ! . s t a t e s ] do
for a i n [1 . . A!.alphabet] do
i f q in A ! . t r a n s i t i o n s [ a ] [ p ] then
fi;
od;
od;
od;
for p i n [1 . . n-1] do
17
for q in [1 . . n-1] do
. . . Actualizao das etiquetas das t r a n s i e s . . .
od;
od;
em que n o estado a ser removido. Por tudo isto o algoritmo tem complexidade
0(n3Mn).
O problema que abordamos neste trabalho o de, dado um autmato finito, encontrar,
pelo algoritmo da eliminao de estados, uma expresso regular equivalente com o
menor tamanho. Quando aplicamos a um autmato o algoritmo da eliminao de
estados, a ordem de remoo dos vrtices influencia o tamanho da expresso regular
obtida. Assim, a obteno de uma expresso de menor tamanho pode ser feita atravs
de uma escolha adequada da ordem de remoo dos vrtices.
18
procedure Kleene(A){
for i := 1 to n do
for j := 1 to n do
C_0[i,j] := L[i,j];
od;
od;
for i := 1 to n do
C_0[i,i] := 0 + C.OCi.i];
od;
for k := 1 to n do
for i := 1 t o n do
for j := 1 t o n do
C_k[i,j] := C_{k-l}[i,j] +
C_{k-i}[i,k].(C_{k-l}[k,k])*.C_{k-l}[k,j]
od;
od;
od;
for i := 1 t o n do
for j := 1 to n do
C [ i , j ] := C _ n [ i , j ] ;
od;
od;
return(C);
19
Consideremos o autmato da Figura 1.3.
VL)"~QD
Se neste autmato removermos os vrtices na ordem 2,1,4,3, (ver Figuras 1.4 a 1.7
em que I ini e F fin), obtemos a expresso regular r = a+ (b+aa)(ba + a(b+a(b+
aa)))*(b+aaa) em que tamanho(r) = 16; se, por outro lado, removermos os vrtices na
ordem 3,4,2,1 (ver Figuras 1.8 a 1.11), obtemos a expresso regular s = (ba(ba)*a +
(a + bb + ba(baybb)(ab + aa(ba)*bb)*aa(ba)*ay(a + bb + ba(baybb)(ab + aa(ba)*bby em
que tamanho(s) = 44.
20
b + aa
a + (b + aa){ba + a(b-\-a(b + aa)))"(b + aaa)
Figura 1.7: Autmato A depois de removidos os vrtices 2, 1, 4 e 3
ba(ba)*a
aa(ba)*a
2 t 3 a ' ) + aa(ba)"bb
21
ba(ba)*a + (a + bb + ba(ba)''bb)(ab + aa(ba)*bbyaa(ba)'a
0
(ba(ba)'a + (a + bb + ba(ba)'bb){ab + aa(6a)*h6)*aa(6a)*a)*(a + bb + ba(ba)*bb)(ab + aa(6a)*66)*
Figura 1.11: Autmato A depois de removidos os vrtices 3, 4, 2 e 1
No caso geral, encontrar uma ordem ptima (no sentido de ser uma que produz
uma das expresses de menor tamanho) de remoo dos vrtices um problema
computacionalmente difcil. O algoritmo por "fora bruta", que consiste em aplicar o
AEE em todas as ordens de remoo possveis, tem complexidade 0(n\), uma vez que
para um autmato de n estados h n! ordens de remoo diferentes.
22
Captulo 2
Autmatos nard
Neste captulo consideraremos apenas autmatos com um nico estado final, uma vez
que o caso de autmatos com mais do que um estado final pode ser reduzido ao caso
de um nico estado final, pela introduo de uma transio por e de cada estado final
(deixando estes de ser finais) para um novo estado, sendo este o nico estado final.
2.1 Introduo
23
na Seco 1.1.1.2 (ver pgina 6).
No caso da aplicao do AEE a um autmato nard este problema no se pe, uma vez
que, como veremos, ser sempre removido um vrtice v tal que ge(v) = 1 = gs(v), no
havendo portanto ocorrncias mltiplas na expresso final da etiqueta de uma dada
transio.
Definio 2.2.1 (Forma nard) Dizemos que um autmato acclico til, com apenas
um estado inicial (que denotaremos sempre por nj e um estado final (que denotaremos
24
sempre por fin^ se encontra na forma nard se no seu grafo subjacente no existirem
vrtices intermdios V\ e v2 (v\ ^ v 2 j tais que:
1. existe um caminho de ini para vi que no passa por\2 e um caminho de ini para
v2 que no passa por vi e
XD
25
Definio 2.2.2 (Homeomorflsmo de Grafos) Dois grafos so homeomorfos se
existir um terceiro a partir do qual ambos podem ser obtidos por uma sequncia de
operaes em que um arco (u,v) subdividido nos dois arcos (u,q) e (q,v), sendo q
um novo vrtice [Har69j.
Proposio 2.2.1 Um autmato acclico til, com apenas um estado final nard se
e s se o seu grafo subjacente no contiver como subgrafo um grafo homeomorfo a D.
Vamos agora provar que se G contm como subgrafo um grafo homeomorfo a D ento
no se encontra em forma nard. Suponhamos que em G existem vrtices V\ e v2 nas
condies da Definio 2.2.1. Tomemos o subgrafo de G definido por ini e vrtices e
arcos no caminho ini vi que no passa por v2, ini e vrtices e arcos no caminho
ini v2 que no passa por v\, V\ e vrtices e arcos no caminho V\ v2, V\ e
vrtices e arcos no caminho V\ fin que no passa por v2 e v2 e vrtices e arcos
no caminho v2 fin que no passa por v\. Podemos concluir que este subgrafo
homeomorfo a D, nomeadamente, identificando, respectivamente, ini, V\, v2 e fin com
26
1,^2, 3 e 4 da Definio 2.2.3. Estando provadas as implicaes nos dois sentidos
segue a veracidade da proposio.
Foi feita uma contagem dos grafos nard de entre os grafos de at 7 vrtices, acclicos,
com apenas um vrtice u tal que ge(u) = 0 e um vrtice v tal que gs(v) = 0 e teis
no sentido de que todos os vrtices fazem parte de algum caminho de u para v e os
resultados so apresentados na Tabela 2.1.
Vamos mostrar que se um autmato nard ento contm um estado v tal que ge(v) =
1 = gs(v). Seja A = (Q,T,,6,ini, {fin}) um autmato nard tal que gs(ini) > 1
e ge(fin) > 1. Sejam i , . . . , u m os vrtices tais que (ini,Ui) 7^ 0,1 < i < m e
U = {i,.. .,um}. Seja XUi = {IJ U{x \ x e Q\ {fin} A +(uhx) ^ 0}. Seja
R uma relao binria em U x U tal que para ui,U2 U se tem u\Ru2 se e s se
xui n xU2 0.
27
s mesmas condies. Vamos mostrar que tem de se ter +(x,y) / 0 ou 5+(y,x) ^ 0,
ou x = y, provando assim que XUl D XUA ^ 0, ou seja, UiRu3.
Proposio 2.2.3 Seja, num autmato nard A, tal que gs(ini) > 1 e ge(fin) > 1,
uma classe de equivalncia [ui] de R com mais que um elemento, ento, | j Xu / 0
e[i]
28
de +), pelo que f] Xu # 0. D
Proposio 2.2.4 .Seja, num autmato nard A, tal que gs(ini) > 1 e ge(fin) > 1,
uma c/a&se de equivalncia [ui] de R com mais que um elemento e q (^ X a o
U6[MI]
estado com menor valor numa ordem topolgica T em A, de entre os que obedecem
s mesmas condies. Seja Zq = {z \ z e [j Xu e +(z,q) ^ 0}. Ento, para todo
ue[ui]
z <E Zq, se c = z s\ sn fin um caminho de z para fin, ento existe
1 < i < n tal que Si = q, ou seja, todos os caminhos z fin passam por q.
Proposio 2.2.5 Num autmato nard existe pelo menos um vrtice v com ge(v) =
1 = gs(v).
29
autmato A contm portanto um estado nas condies da proposio (o mesmo). Por
um raciocnio anlogo se pode concluir que se em A, ge(firi) = 1, ento A contm
um estado nas condies da proposio. Suponhamos, portanto, que gs(ini) = m e
ge(fin) = n, com m, n > 1.
Sejam ui,...,um, [/, XUi e R como definidos acima. Seja [u\\ uma classe de
equivalncia de R e analisemos os seguintes casos:
1. [ui] tem apenas um elemento U\. Seja Y = XUl U {fin}. Seja A' o subautmato
definido pelos vrtices em Y (sendo U\ o estado inicial de A' e fin o estado final).
(a) Por U\ ser o nico elemento de [u\] (significa que 5+(U,V) = 0, para Uj G
U \ {u\} e v XU1), temos que, em A', apenas fin e U\ podem ter grau de
entrada menor do que em A.
(b) Por u\ ser o nico elemento de [u\] (significa que 6+(u\,v) 0, para M, e
U\{u\} e v e XUi), temos que, em A', nenhum estado tem grau de sada menor
do que em A.
Pela definio de XU1 conclui-se que A' til; pode igualmente concluir-se que
A' acclico e tambm que A nard (por ser subgrafo de um grafo nard no
so acrescentados caminhos). A' um autmato nard com menos de n estados
pelo que, por hiptese de induo, tem um estado nas condies da proposio e
este estado existe em A com o mesmo grau de entrada e sada, por (a) e (b) (se
A' tiver apenas os estados u\ e fin, conclui-se que em A, U\ est nas condies
da proposio).
2. [u\\ tem mais do que um elemento. Seja q G (~) Xu o estado com menor valor
ue[ui]
numa ordem topolgica T em A, de entre os que obedecem s mesmas condies.
Seja Zq como na Proposio 2.2.4 e Y = Zq U {ini, q). Seja A' o subautmato
definido pelos vrtices em Y, sendo ini o estado inicial de A' e q o seu estado
final. Pela definio de Xu e pela Proposio 2.2.4 pode concluir-se que A' til;
fcil concluir que A acclico e, sendo subgrafo de um grafo nard, A' nard.
Temos ainda que:
30
(b) Pela Proposio 2.2.4 temos que, em A', apenas ini e q podem ter grau de
sada menor do que em A, uma vez que em A todos os caminhos, de qualquer
antecessor de q, para fin passam por q.
A' um autmato nard com menos de n estados, pelo que, por hiptese de
induo, tem um estado nas condies da proposio e este estado existe em A
com o mesmo grau de entrada e sada, por (a) e (b).
Teorema 2.2.1 Seja A = (Q, E, ini, 6, fin) um autmato em forma nard. E possvel
aplicar a A o algoritmo da eliminao de estados, removendo em cada passo um
estado q tal que ge(q) = 1 = gs(q) e estes autmatos so os nicos para os quais
esta propriedade se verifica.
Demonstrao: Pela Proposio 2.2.5, A tem pelo menos um estado q nas condies
do teorema. Se removermos q obtemos um autmato A' que ainda se encontra em
forma nard pois no acrescentamos em A nenhum caminho que possa formar um grafo
Jhomeomorfo a D. Por A ainda se encontrar em forma nard ele possui um vrtice q' nas
condies do teorema ou tem apenas dois estados, terminando o processo. Podemos
aplicar o mesmo raciocnio a A' e concluir a veracidade da propriedade indicada no
teorema.
2.3 Implementao
31
~0-KD-Mj>
a _\ ' J c
32
dado pela sua lista de adjacncias acclico [KR99]. Esta funo tem complexidade
0(n2). Seja ExistsPathvltov3Withoutv2 uma funo GAP para decidir se num grafo
dado pela sua lista de adjacncias existe um caminho de um vrtice vi para um vrtice
3 que no passe por um vrtice V2- Esta funo tem complexidade G(n). Seja
DescendentsOfVertex uma funo GAP que, para um grafo dado pela sua lista de
adjacncias e um vrtice v\ devolve a lista dos descendentes de V\. Esta funo tem
complexidade 0(n2). Seja ReverseOf Graph, uma funo GAP que, para um grafo dado
pela sua lista de adjacncias devolve a lista de adjacncias do grafo que tem os sentidos
dos arcos invertidos. Esta funo tem complexidade 0(n2).
Na Figura 2.6 apresentamos uma funo GAP que, para o grafo, dado pela sua lista
de adjacncias, subjacente a um autmato com apenas um estado final, decide se o
grafo nard. Esta funo, alm do grafo subjacente, tem como input o estado inicial
e o estado final do autmato. Pelas linhas de cdigo seguintes podemos ver que esta
funo tem complexidade 0(n5).
for i in l i s t do
for j in Difference(list, [i]) do
fi;
od;
od;
Na Seco A.2 (ver pgina 99) apresentamos uma verso do AEE especfica para o
caso de o AF de input ser nard e esta funo tem complexidade 0(kn3), em que n o
nmero de estados do AF de input e k =| |. Este valor dominado pela converso do
AF inicial no seu AFE associado e esta complexidade deve-se s razes apresentadas
na Seco 1.1.7.1 (ver pgina 17) para a complexidade da funo computeGTG. Se o
33
IsNardGraph := function(G,ini,fin)
local v, n, i, j , k, list, inter, Gr, flag;
flag := false;
if IsAcyclicGraph(G) then
n := Length(G);
list := Difference([i..n], [ini.fin]);
for i in list do
for j in Difference(list, [i]) do
if ExistsPathvltov3Withoutv2(G,i,j,0) and
ExistsPathvltov3Withoutv2(G,ini,i,j) and
ExistsPathvltov3Withoutv2(G,ini,j,i) and
ExistsPathvltov3Withoutv2(G,i,fin,j) and
ExistsPathvltov3Withoutv2(G,j,fin,i) then
Gr := ReverseOfGraph(G);
inter := Intersection(
DescendentsOfVertex(G,i),
DescendentsOfVertex(Gr,j));
if ForAll(inter, x ->
ExistsPathvitov3Withoutv2(G,ini,j,x)) then
return(false);
fi;
fi;
od;
od;
return(true);
else
return(false) ;
fi;
end;
34
input fosse j o AFE, ento a funo teria complexidade 0(kn2), pois este tamanho
mximo das expresses calculadas. A expresso resultado tem tamanho linear no
nmero transies do autmato inicial.
NardFAtoRatExp := function(A)
35
-
--
--MD
36
Figura 2.12: Autmato de Thompson representando uma concatenao
37
Proposio 2.4.1 Os autmatos de Thompson de linguagens finitas so nard.
2.5 Concluses
wJC^
38
Figura 2.15: Aps a remoo de v
O nico caso em que no acontece uma repetio de duas ou mais vezes de etiquetas
de arcos o caso da remoo de um vrtice v tal que ge(v) = 1 = gs(v) (Figuras 2.16
e 2.17).
A verso do AEE para o caso nard (Seco A.2, ver pgina 99) tem como output a
expresso regular equivalente e de menor tamanho obtenvel pelo AEE para o autmato
em causa, uma vez que em nenhum passo foi duplicada a etiqueta de algum arco. Neste
caso o tamanho da expresso final seria igual ao nmero de arcos do autmato de input
e neste sentido que dizemos que a ordem de remoo ptima.
39
tem complexidade 0(kn3) usando as representaes GAP que temos vindo a referir)
e neste sentido que dizemos que a ordem ptima de remoo pode ser encontrada,
neste caso, de forma eficiente.
Pelo que foi dito antes, deste autmato nard possvel encontrar de forma eficiente
a ordem ptima de remoo para obter a expresso r, pelo que, em trabalho futuro,
40
gostaramos de tentar resolver o Problema 2.5.1
Problema 2.5.1 (Autmato nard mnimo equivalente)
Dado um autmato A, acclico e com apenas um estado final, qual um autmato
nard A' tal que L(A') = L(A) e A' mnimo no nmero de transies?
41
Captulo 3
Neste captulo apresentamos uma heurstica para o problema de encontrar uma ordem
ptima de remoo dos vrtices para o caso de um autmato arbitrrio. Esta heurstica
surgiu no decurso dos trabalhos de estgio da licenciatura e foi apresentada em [DM04].
3.1 Pesos
Q Q
-p(A) = ]T Y, tamanho(S(i,j)) - E
i=i j = i
V(v)=V(Al)-V(A)
43
Como vimos na Seco 2.5, os nicos vrtices v tais que V(v) = 0 so aqueles para os
quais ge(v) 1 = gs(v). Mais precisamente, o peso de um vrtice v pode ser calculado
pela frmula:
P()= ( / ( M x M ) - i ) ) +
peJSv
( / ( , )xfoe(i;)-l))+ (3.1)
fc(v) x (0e(v) x ps(u) - 1),
em que:
Sv = {u | u e Q A <5(t>, ) 7^ 0},
3.2 Heurstica
Resumindo, se
44
ge(v) 1 (ou gs(v) = 1) ento o nmero de arcos vai diminuir com a remoo
do vrtice;
ge(v) > 2 e gs(v) > 1 (ou vice-versa) ento o nmero de arcos vai aumentar com
a remoo do vrtice.
Comemos por aplicar o AEE sem heurstica a 512 autmatos diferentes, teis,
gerados aleatoriamente de 4, 5, 6 e 7 estados, obtendo os resultados da Tabela 3.1
1. N: nmero de autmatos;
45
3. Mdia de erro: mdia da diferena entre o tamanho da expresso devolvida e o
tamanho mnimo, considerada apenas nos casos em que h diferena; e
Na Tabela 3.2 temos os valores para os mesmos autmatos, mas usando a heurstica
descrita.
Apresentamos ainda, na Tabela 3.3, resultados obtidos com autmatos obtidos a partir
do grafo de Cayley de alguns monides de transformaes. O grafo de Cayley de um
monide M um grafo em que, para x,y M o arco (x, y) est presente se e s se
existir um gerador a de M tal que x-a = y eno autmato construdo a partir do grafo
de Cayley de M a etiqueta do arco (x, y) a.
Sejam k\, fa,..., kn G { 1 , . . . , n } U { # } . Denotamos por [ki, k2, ., kn] a funo parcial
/ de { 1 , . . . , n} em si mesmo, tal que para todo i e { 1 , . . . , n}, f(i) = ki se ki ^ # e
f(i) no est definida caso contrrio.
46
VOVl4: gerado por [2,3,4,1] e [1,2,4, #];
Foi tambm desenvolvida uma verso melhorada da heurstica e cujos resultados para
os autmatos mnimos da tabela anterior apresentamos na Tabela 3.4. Nesta tabela lk
e nv so parmetros da verso melhorada [DM04]. Consideremos uma rvore em que
a raiz o AFE inicial e cada descendente directo da raiz o AFE obtido pela remoo
de um vrtice diferente, do AFE inicial. Cada descendente directo de cada um dos ns
anteriores o AFE obtido pela remoo de um vrtice diferente, do AFE representado
pelo n pai. As folhas desta rvore representam o AFE com apenas os estados ini e fin
para todas as ordens de remoo possveis e se fosse possvel calcul-la completamente,
bastaria escolher, de entre as folhas, aquela que representasse a expresso regular de
menor tamanho, sendo esta um expresso de tamanho mnimo obtenvel pelo AEE.
Dada a intratabilidade do clculo de toda esta rvore, os parmetros lk e nv permitem
tratar uma rvore de menor tamanho, da seguinte forma:
47
1. Ik: representa o nmero de nveis da rvore que iremos calcular e
2. nv: em vez de cada n da rvore ter tantos descendentes directos como vrtices
tem o AFE representado por esse n, este parmetro permite definir que cada
n ter apenas nv descendentes directos; sero os definidos pela remoo dos nv
vrtices de menor peso.
Ao fim de lk nveis da rvore ser escolhido para remoo o vrtice cuja remoo
deu origem ao AFE representado por um descendente directo da raiz da rvore que
pertence a um caminho da raiz a uma folha que representa um AFE de menor peso.
3.4 Implementao
Na Seco A.3 (ver pgin 107) apresentamos a funo GAP que implementa a heurstica
descrita neste captulo.
48
FAtoRatExp := functioii(A)
3.5 Concluses
49
--
Peso
AFE 7
1 3
2 3
3 7
4 1
Nas Figuras 3.3 a 3.6 apresentamos os vrios passos do AEE removendo em cada passo
um dos vrtices de menor peso e nas Tabelas 3.6 a 3.8 os pesos associados.
GH-
~ J -
Figura 3.3: Autmato A depois de removido o vrtice 4
Peso
AFE 8
1 4
2 3
3 11
50
ab + ba
Peso
AFE 11
1 6
3 7
Peso
AFE 17
3 0
0
a + (6 + aa)(ab + ba + (aa(b + aa)))* (b + aaa)
Figura 3.6: Autmato A depois de removidos os vrtices 4, 2, 1 e 3
51
Reparamos assim que o tamanho da expresso obtida usando a heurstica apresentada
tem tamanho 17. A expresso mnima obtenvel pelo AEE para este autmato tem
tamanho 16 e a sua obteno foi ilustrada nas Figuras 1.4 a 1.7 (ver pgina 20).
Apresentamos nas Tabelas 3.9 a 3.11 os pesos associados em cada passo.
Peso
AFE 10
1 5
3 12
4 1
Peso
AFE 15
3 16
4 1
Peso
AFE 16
3 0
Podemos ver na Tabela 3.12 os pesos com que cada vrtice foi removido em cada uma
das duas ordens de remoo anteriores.
1 2 3 4
4, 2, 1, 3 6 3 0 1
2, 1, 4, 3 5 3 0 1
52
Representamos por Vv(u) o peso do vrtice u depois de removido o vrtice v. Pode,
assim, dar-se o caso de, para um AFE no decurso do AEE, existirem vrtices v, u e z
tais que V(v) < V(u) < V(z) e em que aps a remoo de v tenhamos Vv(u) V(u) e
'Pv(z) = V(z) + me aps a remoo de u tenhamos Vu{v) = V(v) e Vu(z) = V{z) + n
e estes valores tais que V(v) + Vv{u) + Vvu(z) > V{u) + Vu(v) + Vuv(z).
53
Captulo 4
Neste captulo apresentamos uma heurstica para a escolha do melhor vrtice a ser
removido em cada passo do AEE, que especfica para o caso de autmatos acclicos e
que tem resultados substancialmente melhores que os da heurstica para o caso geral.
4.1 Motivao
55
4.2 Heurstica
A verso do AEE que implementmos para o caso acclico comea por remover todos
os estados q tais que ge(q) = 1 = gs(q). Em seguinda, se ainda houver vrtices por
remover, aplica a heurstica para escolher o prximo vrtice a ser removido. Nesta
heurstica, a funo computeWeight(q) calcula o peso do estado q de acordo com a
Equao (3.1) (ver pgina 44), que denotamos por V(q). A funo computeWDist(q)
calcula o peso que ser "poupado" pela remoo de q, ou seja, com a remoo de q
estamos a construir uma subexpresso da expresso final da forma (ri H \- rn)(si +
1- sm) em vez de r\8\ H h rism H h rns\ -\ f- rnsm. Esta funo identifica,
para um estado q, estados i e j tais que os arcos (i,q),(q,j) e (i,j) existem. Para
cada par i, j encontrado, adiciona a um contador w o tamanho da etiqueta de cada
arco que entra em i e em seguida o tamanho das etiquetas dos arcos que partem de
j e retorna o valor deste contador. Na Figura 4.1 vemos um grafo etiquetado nestas
condies.
56
passamos a ter gs(i) = 1, como se pode ver na Figura 4.2.
Formalmente, seja
57
0(Hj) = {v\veQe S(j, v) # 0}
e
SO(ij) X] tamanho(S(j,v)),
ento
^()= E si{iJ) + so{i:j).
{i,j)exq
Assim, aparentemente, faz sentido que se tente escolher para remoo, um vrtice que
maximize WD(q), pois isso pode significar diminuio no nmero de subexpresses
repetidas no resultado, uma vez que podemos estar a diminuir gs(i) e/ou ge(j).
Sq = {u | u e Q e S(q, u) ^ 0},
se Vi e Sq(s e Et).
58
computeWDist := function(q)
local i, j, k, w;
w := 0;
# Invertices[q] a lista de estados p tais que o arco
# (pq) existe
# Outvertices[q] a lista de estados p tais que o arco
# Cq>p) existe
# Nin[q] |Invertices[q]I = ge(q)
# NoutCq] IOutvertices[q]I = gs(q)
# WT[k][i] tamario(delta(k,i))
f o r i i n I n v e r t i c e s [ q ] do
f o r j i n O u t v e r t i c e s [ q ] do
if j in OutverticesCi] then
i f Nout[j] = 1 and N i n [ j ] = 2 and Nin[q] = 1 t h e n
bonus[q] := bonus[q] + computeWeight(j);
fi;
i f NoutCi] = 2 and N i n [ i ] = 1 and Nout[q] = 1 t h e n
bonus[q] := bonus[q] + computeWeight(i);
fi;
f o r k i n I n v e r t i c e s [ i ] do
w := w + WT[k] [ i ] ;
od;
f o r k i n O u t v e r t i c e s [ j ] do
w := v + W T [ j ] [ k ] ;
od;
fi;
od;
od;
return(w);
end;
59
computeDistGain := function(q)
local s, t ;
dist_gain := L i s t ( [ l . . Q ] , x->0);
for t in Outvertices[q] do
if ForAll(Invertices[q], i -> t in Outverticesfx]) then
dist_gain[t] := d i s t _ g a i n [ t ] + Nout[t];
fi;
od;
for s in Invertices[q] do
if ForAll(Outvertices[q] , x -> s in Invertices[x3) then
dist_gain[s] := dist_gain[s] + Nin[s];
fi;
od;
end;
60
computeBest := functionO
local i , j , 1, s, t , dg;
if Q = 2 then
return(l);
fi;
bonus := L i s t ( [ l . . Q ] , x->0);
1 := [ ] ;
j := 0;
for i in [3..Q] do
AddSetd, [computeWDist(i)-computeWeight(i) + bonus [ i ] , i ] ) ;
j := j + 1;
od;
if j > 1 then
s := l [ j - l ] [ 2 ] ;
t := l [ j ] [ 2 ] ;
computeDistGain(s);
dg := StructuralCopy(dist_gain);
computeDistGain(t);
if dg[t] > dist_gain[s] then
return(s);
else
return(t);
fi;
else
return(l[j][2]);
fi;
end;
61
4.3 Exemplo
Para o autmato da Figura 4.6 (o nmero 847 refere-se a uma enumerao feita por
ns) a nica ordem ptima de remoo 5,3,4,6.
62
Tabela 4.1: Valores para escolha do primeiro vrtice a ser removido
i dist_gain[i]
3 1
5 0
A escolha feita seria o vrtice 5, uma vez que 3 e 5 so os dois vrtices com maior
valor na ltima coluna da Tabela 4.1 e dist-.gain{5] < dist-gain[3].
O AFE resultante da remoo do estado 5 o da Figura 4.7 e para este AFE mostramos
nas Tabelas 4.3 e 4.4 os valores que orientam a escolha do segundo vrtice a ser
removido.
63
Figura 4.7: Autmato 847 depois de removido o estado 5
i dist_gain[i]
3 1
4 1
Aqui seria escolhido o estado 3 para remoo pois o valor da ltima coluna da Tabela
4.3 mximo para este estado e entre 3 e o estado com segundo maior valor nessa
coluna (4) temos dist-gain[3] = dist.gain\4\.
64
Figura 4.8: Autmato 847 depois de removidos os estados 5 e 3
0 AFE obtido depois de remover o estado 3 o da Figura 4.8. A partir deste AFE
no seriam feitas mais escolhas porque o estado 4 seria eliminado imediatamente por
se ter ge(4) = 1 = gs(A) e em seguida seria removido o vrtice 6 pelo mesmo motivo,
tendo sido assim conseguida a ordem ptima de remoo 5,3,4,6.
Neste autmato, a heurstica para o caso geral removeria os vrtices na ordem 3,6,4,5,
resultando numa expresso com mais 1 smbolo que a mnima. Variaes desta
heurstica para o caso acclico foram tentadas, mas com piores resultados.
65
Tabela 4.5: Heurstica para o caso geral
66
4.5 Implementao
Na Seco A.4 (ver pgina 111) apresentamos a funo GAP que implementa a
heurstica descrita neste captulo.
AcyclicFAtoRatExp := function(A)
computeGTGO;
removeImediate O ; # Remove os estados v t a i s que
# ge(v) = 1 = gs(v)
while Q > 2 do
q := computeBestO ; # Calcula o "melhor"
# vrtice a ser removido
destroyState(q); # Elimina o estado q
removelmediateO ;
od;
for i in [1..Q] do # Remove os ltimos 2 estados
destroyState(l);
od;
# . . . Devolve a expresso resultado . . .
end;
A funo computeGTG executada uma nica vez e tem complexidade 0(kn3) no caso
de o input ser um AFND ou um AFNDTE, pelas razes apresentadas na Seco 1.1.7.1
e 0{kn2) no caso de um AFD, em que n o nmero de estados do AF de input e
k = | E |. A funo d e s t r o y S t a t e executada n vezes e a sua complexidade
determinada pelas linhas de cdigo seguintes:
for p i n I n v e r t i c e s [ n ] do
67
for q in Outvertices[n] do
. . . Actualizao das etiquetas das transies ...
od;
od;
pelo que, para determinar a complexidade desta funo necessrio majorar o tamanho
das expresses regulares envolvidas. A maior expresso, obtenvel pelo AEE, que
representa a linguagem reconhecida por um autmato acclico consiste numa unio de
concatenaes, que exactamente a unio das expresses que representam um caminho
do estado inicial para um estado final. Esta expresso ter tamanho mximo, para
um autmato acclico de n estados, se o seu grafo subjacente tiver todos os arcos
possveis, pois assim garantido que o nmero de caminhos do estado inicial para
qualquer estado final mximo. A linguagem reconhecida por um autmato de n
estados e com vrios estados finais pode ser reconhecida por um autmato de n + 1
estados em que, s transies existentes se acrescenta uma transio por c de cada
estado final para o novo estado, passando este a ser o nico estado final, pelo que nos
restringiremos ao caso de apenas um estado final.
Chamemos GAUC - grafo acclico, til (no sentido de que h apenas um vrtice s tal
que ge(s) = 0 e apenas um vrtice t tal que gs(t) = 0 e qualquer outro vrtice faz
parte de algum caminho de s para ) e completo (no sentido de que existem todos os
arcos possveis).
68
NCGn+1(l,n+l) = l + YiNCGn(l,i). (4.1)
A parcela 1 na Equao (4.1) devese ao arco (l,n + 1). Vamos mostrar que cada
NCGa(l, i) na Equao (4.1) representa o nmero de caminhos de s para t num CAUC
de % vrtices. Seja Gi = ({1,..., i}, Ei) o subgrafo de G definido pelos vrtices em
{ 1 , . . . , z'} com 2 < i < n. Seja Tn a ordem topolgica em Gn e 77 a ordem topolgica
em Gi. Para todo u { 1 , . . . ,i} temos 7(M) = Tn{u). Em Gj temos = i. Gi um
GAUC de i vrtices pois para quaisquer u, v { 1 , . . . , z} tais que 7(M) < 77(v) temos
(u, v) Ej por Tn{u) < Tn{v) e Gn ser um GA UC. Em G, o nmero de caminhos de
s para exactamente V C G ^ I , i) pois todos os caminhos de s para t em Gj passam
apenas por vrticess u tais que %.(u) < %.(i). Por isto e por G, ser um GA UC com
menos de n + 1 vrtices temos que, usando a hiptese de induo,
Sn = Ux X ,
1r
69
Proposio 4.5.2 Dados um autmato A = (Q, S, , q0, F) acclico de n estados com
apenas um estado final e uma expresso regular r, obtida por aplicao do AEE a A,
tem-se que tamanho(r) < k(n 1)2"~ 2 em que k = | S |.
for i in I n v e r t i c e s [ q ] do
for j in O u t v e r t i c e s [q] do
if j in O u t v e r t i c e s [ i ] then
for k in I n v e r t i c e s [ i ] do
od;
fi;
od;
od;
70
for t in Outvertices[q] do
if ForAll(Invertices[q] , x -> t in Outvertices[x]) then
fi;
od;
for i in [3..Q] do
AddSetCl, [computeWDist(i)-computeWeight(i) + bonus[i], i ] ) ;
od;
4.6 Concluses
Podemos ver pelas tabelas apresentadas na Seco 4.4 que a heurstica para o caso
acclico produz resultados melhores que os da heurstica para o caso geral, se aplicadas
a autmatos acclicos.
71
Figura 4.10: Autmato 663
Considerando neste autmato ini = 1 e fin 2 temos que a nica ordem ptima de
remoo 6,3, 5,4, obtendo-se a expresso r = ((ad+b)f + ae)(hj+i) + ((ad+b)g+c)j
em que tamanho(r) = 15.
Para a escolha do primeiro vrtice a ser removido, a heurstica deste captulo basear-
se-ia nos valores das Tabelas 4.7 e 4.8.
i dist_gain[i]
6 0
5 0
72
Figura 4.11: Autmato 663 depois de removido o vrtice 6
Para a escolha do segundo vrtice a ser removido temos os valores das Tabelas 4.9 e
4.10.
i dist_gain[i]
4 2
5 1
73
Vemos assim que na escolha do segundo vrtice j h diferena em relao ordem
ptima. Notemos aqui que o estado 5 o nico com valor mximo na ltima coluna da
Tabela 4.9 mas tanto o estado 4 como o 3 seriam elegveis para comparao do valor
de computeDistGain(i). A escolha do estado 4 para figurar na Tabela 4.10 de certo
modo arbitrria, uma vez que feita, em caso de igualdade, pelo ndice maior. Se em
vez do estado 4 tivssemos considerado o estado 3, em vez da Tabela 4.10 teramos a
Tabela 4.11
i dist_gain[i]
3 0
5 1
74
Captulo 5
Concluses
75
No Captulo 3 apresentmos uma heurstica para o problema de encontrar, a partir de
um autmato e usando o algortimo da eliminao de estados, uma expresso regular
equivalente com o menor tamanho, que foi elaborada no decurso dos trabalhos de
estgio da licenciatura. Esta heurstica baseia-se na noo de peso de um vrtice
apresentada na Seco 3.1 (ver pgina 43) e consiste em eliminar primeiro os estados
com menor peso. De notar que o tamanho da expresso final ser igual soma do peso
do AFE inicial (definido na Seco 3.1) com o peso de cada estado quando removido.
Esta heurstica produz resultados consideravelmente melhores que os produzidos por
uma aplicao do AEE que no tenha em considerao uma escolha adequada do
estado a ser removido em cada passo. Apresentmos tabelas com alguns resultados
obtidos e terminmos com o exemplo de um autmato para o qual a heurstica no
consegue produzir uma expresso de tamanho mnimo obtenvel pelo AEE.
76
Na Tabela 5.1 apresentamos as expresses obtidas pelo AEE para as duas ordens de
remoo possveis.
Como se pode verificar, com nenhuma das ordens foi possvel obter a expresso mnima
r = (a + b)*b. Num autmato til, todas as etiquetas das transies contribuem para o
tamanho da expresso final, no sentido de que nessa expresso as etiquetas aparecero
como subexpresses possivelmente com multiplicidade superior a 1. Isto faz-nos querer
investigar se a Proposio 5.0.1 ser verdadeira.
Proposio 5.0.1 Uma expresso regular mnima para uma dada linguagem L
obtenvel pelo AEE quando aplicado a um AFNDTE que aceite L e seja mnimo no
nmero de transies, se forem feitas, na aplicao do AEE, as simplificaes ae = a
e r + 0 = r.
Na Tabela 5.2 apresentamos as expresses obtidas pelo AEE para as duas ordens de
remoo possveis, para este autmato mnimo.
77
Tabela 5.2: Expresses obtidas para as duas ordens de remoo possveis
Vemos assim que a ordem de remoo 2,1 produz a expresso mnima r = (a + )*6.
Se a Proposio 5.0.1 for verdadeira temos assim um mtodo (ainda que de complexi-
dade exponencial) para calcular uma expresso mnima para uma dada linguagem.
78
Referncias
[ASU86] Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. Compilers Principles,
Techniques, and Tools. Addison Wesley, 1986.
[ESW02] K. Ellul, J. Shallit, and Ming-wei Wang. Regular expressions: New results
and open problems. In Descriptional Complexity of Formal Systems,
Ontario, 2002. http://www.math.uwaterloo.ca/~m2wang/papers/jalc.ps.
[GAP04] The GAP Group. GAP - Groups, Algorithms, and Programming, Version
4-4, 2004. (http://www.gap-system.org).
79
[GJ03] Michael R. Garey and David S. Johnson. Computers and Intractability /
A Guide to the Theory of NP-Completeness. W.H. Freeman &; Company,
New York, 2003.
[JR93] Tao Jiang and B. Ravikumar. Minimal NFA problems are hard. SIAM J.
Comput., 22(6):1117-1141, 1993.
[Koz94] Dexter Kozen. A completeness theorem for Kleene algebras and the algebra
of regular events. Infor, and Comput, 110(2):366-390, May 1994.
80
http://www.nmitchell.co.uk/download/\
regular_expression_simplification.pdf.
[NV90] Maria Neves and Maria Vieira. Acesso ao ensino superior: matemtica.
Porto Editora, 1990.
[RS59] M. O. Rabin and D. Scott. Finite automata and their decision problems.
IBM J. Res, 3: 2:115-125, 1959.
81
[Wat94b] Bruce W. Watson. A taxonomy of finite automata construction al-
gorithms. Technical Report Computing Science Note 93/43, Eind-
hoven University of Technology, The Netherlands, May 1994. cite-
seer.ist.psu.edu/watson94taxonomy.html.
82
ndice de Tabelas
4.2 dist-gain[i] 63
4.4 dist-gain[i] 64
83
4.5 Heurstica para o caso geral 66
4.8 dist-gain[i] 72
4.10 dist-gain[i] 73
4.11 dist-gain[i] 74
84
ndice de Figuras
1.3 Autmato A 20
2.4 Grafo D 26
85
2.7 NardFAtoRatExp 35
3.2 Autmato A 50
4.4 computeDistGainQ 60
86
4.5 cornputeBest() 61
87
Lista de Acrnimos
89
ndice Remissivo
adjacncias equivalentes
lista de, 8 autmatos, 13
matriz de, 8 expresses regulares, 6
AEE, 14 Expresses Regulares, 4
AFD, 8
grafo, 7
completo, 9
D, 26
AFE, 11
dirigido, 7
AFND, 10
homeomorfo, 26
AFNDTE, 11
subjacente, 12
alfabeto, 3
grau de entrada, 8
algoritmo
grau de sada, 8
eliminao de estados, 14
GTG, 16
Kleene, 18
arcos, 7 Kleene
arestas, 7 fecho de, 3
autmato
lacete, 7
til, 12
linguagem, 3
acclico, 12
vazia, 3
caminho, 7 linguagens regulares, 3
ciclo, 7
nard, 24
colapsvel, 5
comprimento, 3 ordem topolgica, 8
concatenao, 3
palavra, 3
de linguagens, 3
vazia, 3
configurao, 9
passo de computao, 9
configurao de aceitao, 9
peso
configurao inicial, 9
de um AFE, 43
digrafo, 7 de um vrtice, 43
91
92 NDICE REMISSIVO
tamanho
de uma expresso regular, 6
vrtices
finais, 12
iniciais, 12
intermdios, 12
no teis, 23
I
Apndice A
Cdigo
A.l FAtoRatExpX
FAtoRatExpX := function(A)
local T, # Transition function of the GTG
Q, # The number of states of the GTG without
counting qO and qf
qO, qf, t The two extra states of the GTG
compute GTG,
destroyLoop,
destroyState,
qf A!.states + 2;
93
94 PA NDICE A. CDIGO
for p in [ i . . A!.states] do
T[p] : - D :
for q in [1 . . A ! . s t a t e s ] do
list :- 0;
c : - 0;
for a in [1 . . A{.alphabet] do
i f q in A! .trans i t ions [a] [p] then
AddClist, a);
c : - c + 1;
fi;
od;
if l i s t = [] then
T[p][q] :" 0; t 0 means the empty_set
elif IsBound(list[2]) then
T[p][q] :-
RatExpOnnLetters(
ShallowCopyCFamilyObj(A)!.alphabet) ,
"union".
List(list, a -> RatExpOnnLettersC
ShallowCopy(FamilyObj (A) ! .alphabet) ,
. [a])));
else
T[p][q] : =
RatExpOnnLetters(
ShallowCopy(FamilyObj(A)!.alphabet),
D , list);
fi;
od;
od;
elif A!.type - "epsilon" then
if IsStringCFamilyObj(A)!.alphabet) then
1 :- ShallowCopyCFamilyObjCA)!.alphabet);
Unbind(l[Length(l)]);
fi;
for p in [1 . . A!.states] do
T[p] := G;
for q in [1 . . A ! . s t a t e s ] do
list :- ;
c : - 0;
for a in [1 . . A!.alphabet-1] do
if q in A!.transitions[a][p] then
AddClist, a ) ;
c : c + 1;
fi;
od;
a : A!.alphabet ;
if q in A! .transitions[a] [p] then
AddClist, 0 ) ;
fi;
if l i s t [] then
T[p]Cq] : 0; # 0 means the empty_set
e l i f IsBoundClist[2]) then
A.l. FATORATEX
P X
list2 : Di
for x in list do
if x 0 then
if IsStringCFamilyObj(A) ! .alphabet) then
Add(list2, RatExpOnnLettersCl, [], D ) ) ;
else
Add(list2, RatExpOnnLettersC
FamilyObjCA)!.alphabet-1, , []));
fi;
else
if IsStringCFamilyObj(A)!.alphabet) then
Add(list2, RatExpOnnLettersC
1, [], W ) ) ;
else
Add(list2, RatExpOnnLettersC
FamilyObj (A) ! . alphabet-1, D , [x] ) ) ;
fi;
fi;
od;
if IsStringCFamilyObj(A)!.alphabet) then
T[p][q] : RatExpOnnLettersC
1, "union", list2);
else
T[p][q] : RatExpOnnLettersC
FamilyObj CA)!.alphabet-1,
"union", list2);
fi;
else
if list = [0] then
if IsStringCFamilyObjCA)!.alphabet) then
T[p][q] := RatExpOnnLettersCl, , []);
else
T[p][q] : RatExpOnnLettersC
FamilyObj CA)!, alphabet-1, D , D ) ;
fi;
else
if IsStringCFamilyObjCA)!.alphabet) then
T[p][q] : RatExpOnnLettersC
1, G , list);
else
T[p][q] := RatExpOnnLettersC
FamilyObj CA) ! .alphabet-1, D , l i s t ) ;
fi;
fi;
fi;
od;
od;
else
for p in [1 . . A{.states] do
T[p] :- 0 ;
for q in [1 . . A!.states] do
l i s t :- [ ] ;
APNDICE A. CDIGO
c :- 0;
for a in [1 .. A !.alphabet] do
# The only difference to the
nondeterministic case
if q A!.transitions[a][p] then
Adddist, a);
c := c + 1;
fi;
od;
if list [] then
T[p3 [q] : 0; # 0 means the empty_set
e l i f IsBounddist [2] ) then
T[p][q] := RatExpQnnLettersC
ShallowCopyCFamilyObj(A)!.alphabet),
"union", List(
l i s t , a -> RatExpOniiLetters (
ShallowCopyCFamilyObj(A)!.alphabet),
0. [a])));
else
T[p] [q] := RatExpQnnLettersC
ShallowCopyCFamilyObj(A)!.alphabet),
D , list);
fi;
od;
od;
fi;
T[q0] :- D ; T[qf] :- [] ;
for p in [1 . . A!.states] do
T[p][q0] :- 0;
if p in A!.accepting then
if A!.type = "epsilon" then
if IsString(FamilyObj(A)!.alphabet) then
T[p][qf] :- RatExpOnnLettersd, D . G ) ;
else
T[p][qf] := RatExpOnnLetters(
FamilyObj(A)!.alphabet-l, Q, [ ] ) ;
fi;
else
T[p][qf] := RatExpOnnLetters(
ShallowCopy(FamilyObj(A)!.alphabet), [ ] , []);
fi;
else
TCp] [qf] := 0;
fi;
od;
for q in [1 . . A!.states] do
if q in A ! . i n i t i a l then
if A!-type * "epsilon" then
if IsString(FamilyObj(A)!.alphabet) then
T[q0][q] := RatExpOnnLettersd, , D ) ;
else
T[q0] [q] := RatExpQnnLettersC
A J. FATORATEXP X
for p in [1 . . n-1] do
if not T[p][n] 0 then
for q in [1 . . n-1] do
98 APNDICE A. CDIGO
f o r q i n [n . . Q+l] do
T[p][q] : - T[p] [ q + l ] ;
od;
od;
Q : Q - li
end;
## End of d e s t r o y S t a t e O
computeGTGO ;
w h i l e Q > 0 do
destroyLoop(Q);
destroyState(Q);
od;
i f T [ l ] [2] - 0 then
return(RatExpOnnLetters(A!.alphabet, [ ] , "empty_set"));
else
retura(T[1] [ 2 ] ) ;
fi;
end:
A.2 NardFAtoRatExp
NardFAtoRatExp := function(A)
local T, # Transition function of the GTG
WT, # Weighted transition function of the GTG
Nout, * Number of edges going out to distinct vertices
Nin, * Number of edges coming in from distinct
vertices
Invertices, # The numbers of the vertices that have a
transition into i
Outvertices, t The numbers of the vertices that have a
transition from i
Q, # The number of states of the GTG without
counting qO and qf
qO, qf, # The two extra states of the GTG
best,
computeGTG,
destroyState,
flag,
perm,
i. j. k, q i. P;
perm : [ 1 . . A ! . s t a t e s ] ;
100 APNDICE A. CDIGO
i :- A!. i n i t i a l [ l ] ;
j :- A!.accepting[1];
perm[i] : 1;
perm[l] : i;
p : Position(perm, 2 ) ;
k : perm[j] ;
perm[j] := 2;
perm[p] : k;
A :" PennutedAutomaton(A, perm);
AddSet(Invertices[q], p) ;
AddSet(Outvert i c e s [ p ] , q) ;
fi;
fi;
odj
if l i s t [] then
T[p][q] i* 0; # 0 means the empty_set
WT[p][q] :- - 1 ;
e l i f IsBound(list[2]) then
T[p][q] : RatExpOnnLetters(
ShallowCopy(FamilyObj(A)!.alphabet), "union"
L i s t ( l i s t , a -> RatExpOnnLetters(
ShallowCopy(FamilyObj(A)!.alphabet),
, [a])));
WT[P:|[q] :- c;
if not p = q then
Nout[p] :- N outCp] + 1;
NinCq] :- N in[q] + 1;
fi;
else
T[p][q] :- RatExpOnnLetters(
ShallowCopy(FamilyObj(A)!.alphabet), [], list)
WT[p] [q] :- c;
if not p = q then
Nout[p] :- N out[p] + 1;
Hin[q] :- N in[q] + 1;
fi:
li;
od;
od;
elif A!.type - "epsilon" then
if IsString(FamilyObj(A)!.alphabet) then
1 :- ShallowCopy(FamilyObj(A)!.alphabet);
Onbindd [Length(l)] ) ;
fi;
for p in [1 . . A!.states] do
T[p] :- D ;
WT[p] :- ;
NoutCp] :- 0;
for q in [1 . . A!.states] do
l i s t : [ ] ;
c := 0;
for a in [1 . . A!.alphabet-!] do
if q in A!.transitions[a][p] then
Adddist, a);
c :- c + 1;
if not q = p then
AddSet(Invertices[q], p);
AddSet(Outvertices[p], q) ;
fi;
fi;
od;
APNDICE A. CDIGO
a : A!.alphabet ;
if q in A!.transitions[a][p] then
Add(list, 0);
if not q p then
AddSet(Invertices [q], p) ;
AddSetCOutvertices[p], q) ;
fi;
fi!
if list [] then
T[p][q] : 0; # 0 means the empty_set
HT[p][q] := - i ;
e l i f IsBound(list[2]) then
l i s t 2 :- D ;
for x in l i s t do
i f i 0 then
if IsStringCFamilyObj(A)!.alphabet) then
Add(list2, RatExpOnnLettersCl, [ ] , [ ] ) ) ;
else
Add(list2, RatExpOnnLettersC
FamilyQbj(A)!.alphabet-l, [ ] , D ) ) ;
fi;
else
if IsString(FamilyObj(A)!.alphabet) then
Add(list2, RatExpOnnLettersC
1. [], W));
else
Add(list2, RatExpOnnLetters(
FarailyObj(A)!.alphabet-1, [] , [ x ] ) ) ;
fi;
fi;
od;
if IsStringCFamilyObj(A)!.alphabet) then
T[p][q] := RatExpOnnLettersC
1, "union", list2);
else
T[p][q] : RatExpOnnLettersC
FamilyObj(A)!.alphabet-1, "union", list2);
fi;
WT[p][q] :- c;
if not p q then
Nout[p] := N out[p] + 1;
Nin[q] := N in[q] + 1;
fi;
else
if l i s t [0] then
if IsStringCFamilyObj(A)!.alphabet) then
T[p][q] : RatExpOnnLettersCl, , [ ] ) ;
else
T[p][q] : RatExpOnnLettersC
FamilyObj CA) ! . alphabet-1, [] , [] ) ;
fi;
else
A.2. NARDFATORATEX
P
i f IsString(Familybj(A)!.alphabet) then
T[p][q] : - RatExpOnnLetters(l, [], list);
else
T[p][q] := RatExpOnnLetters(
FamilyObj(A)! . a l p h a b e t - 1 , D. list);
fi;
fi;
WT[p][q] := c;
i f not p * q then
Nout[p] : - N out[p] + 1;
NinCq] : - N in[q] + 1;
i;
fi;
od;
od;
else
for p in [1 .. A!.states] do
T[p] : D ;
WT[p] :- 0;
Nout[p] := 0;
for q in [1 .. A!.states] do
list := [];
c :- 0;
for a in [1 .. A !.alphabet] do
# The only difference to the nondeterministic case
if q - A!.transitions[a][p] then
AddClist, a ) ;
C : c + 1;
s
if not q p then
AddSet(Invertices[q], p ) ;
AddSet(Outvertices[p], q) ;
fi;
fi;
od;
if list [] then
T[p] [q] : 0; # 0 means the empty_set
WT[p][q] : - - 1 ;
elif IsBound(list[2]) then
T[p][q] : - RatExpOnnLetters(ShallowCopy(
FamilyObj(A)!.alphabet), "union",
List(list, a -> RatExpOnnLetters(
ShallowCopy (FamilyObj (A) ( . a l p h a b e t ) , , [a])));
HT[p][q] : - c;
i f not p q then
Hout[p] := N outCp] + 1;
Nin[q] : - N in[q] + 1;
fi;
else
Tip][q] : - RatExpOnnLetters(ShallowCopy(
FamilyObj (A)! . a l p h a b e t ) , D, list);
WT[p][q] : - c;
B
i f not p q then
104 APNDICE A. CDIGO
Nout[p] := Nout[p] + i;
Nin[q] : = Nin[q] + 1;
fi;
fi;
od;
od;
fi;
T[q0] :- D ; T[qf] := [] ;
WT[qO] := ; WT[qf] :- ;
for p in [1 . . A!.states] do
T[p] [qO] :- 0;
WTCpHqO] :- - 1 ;
if p in A!.accepting then
if A!.type = "epsilon" then
if IsStringCFamilyObj(A)!.alphabet) then
T[p][qf] := RatExpOnnLetters(1, [], ) ;
else
T[p][qf] :- RatExpOnnLetters(
FamilyObj(A)!.alphabet-1, [] , G ) ;
fi;
else
T[p][qf] :- RatExpOnnLetters(ShallowCopy(
FamilyObj(A)!.alphabet), [ ] , ) ;
fi;
WT[p][qf] :- 0;
Nout[p] :- Hout[p] + 1;
AddSet(Invertices[qf], p) ;
AddSet(Ontvertices[p], qf ) ;
else
T[p][qf] :- 0;
WT[p][qf] :- - 1 ;
fi;
od;
for q in [1 . . A!.states] do
if q in A ! . i n i t i a l then
if A!.type = "epsilon" then
if IsStringCFamilyObj(A)!.alphabet) then
T[q0][q] :- RatExpOnnLetters(1, 0 , 0 ) ;
else
T[qO][q] : RatExpOnnLetters (
FamilyObj (A)!.alphabet-1, G , G ) ;
fi;
else
T[qO][q] :- RatExpOnnLetters(ShallowCopy(
FamilyObj (A)!, alphabet), G . G ) ;
fi;
WT[qO][q] :- 0;
Nin[q] := Nin[q] + 1;
AddSet(Invertices[q], qO);
AddSet(Outvertices[qO], q) ;
else
T[qO][q] :- 0;
A.2. NARDFATORATEXP
WT[qO][q] : - - 1 ;
fi;
T[qf] [q] : - 0 :
WT[qf][q] := - 1 ;
od;
T[qO][qO] : - 0; T[q0] [qf] : - 0; T[qf] [qO] : - 0; T[qf] [qf] : - 0;
WT[qO][qO] : - - 1 ; WT[qO][qf] := - 1 ; WT[qi][qO] := - 1 ;
WT[qf][qf] := - 1 ;
end;
## End of computeGTGQ
f o r p i n I n v e r t i c e s [ n ] do
f o r q i n O u t v e r t i c e s [ n ] do
i f T [ p ] [ q ] 0 then
T[p][q] := ProductRatExp(T[p][n], T[n][q]);
WT[p][q] : - WT[p][n] + WT[n] [q] ;
else
T[p] [q] : UnionRatExp(ProductRatExp(T[p][n],
T[n][q]), T[p][q]);
i f WT[p][q] = 0 then
WT[p][q] : - WT[p][n] + WT[n][q] + 1;
else
WT[p][q] : - WT[p][n] + WT[n][q] + WT [p] [q] ;
fi;
fi;
od;
od;
f o r p i n [1 . . n-1] do
f o r q i n [n . . Q+l] do
T[p][q] : - TCp] [ q + l ] ;
WT[p][q] := WT[p][q+l];
od;
od;
f o r p i n [n . . Q+l] do
T[p] : - T[p+1];
WT[p] : - WT[p+l];
f o r q i n [n . . Q+l] do
T[p][q] :- T[p][q+1];
WT[p][q] : - WT[p][q+l];
od;
od;
Q := Q - l;
f o r p i n [1 . . Q+2] do
Nout[p] : - 0; N in[p] := 0;
Invertices[p] := D ; 0utvertices[p] := [] ;
od;
f o r p i n [1 . . Q+2] do
106 APNDICE A. CDIGO
for q in [1 .. p-1] do
if WT[p][q] >- 0 then
Nout[p] :- Nout[p] + 1;
Nin[q] := Nin[q] + 1;
AddSet(Invertices[q], p ) ;
AddSet(Outvertices[p], q) j
fii
od;
foi q in [p+1 .. Q+2] do
if WT[p][q] >- 0 then
Nout[p] :- Nout[p] + 1;
Nin[q] := Nin[q] + 1;
AddSet(Invertices[q], p);
AddSet(Outvert ices[p] . q ) ;
fi;
od;
od;
end
## End of destroyState()
#
# Main
#--
computeGTGO ;
while Q > 0 do
for i in [3..Q] do
if N in[i] - 0 or N out[i] 0 or
(Nin[i] - 1 and N out[i] " 1) then
destroyState(i);
break;
fi;
od;
od;
if T[l][2] - 0 then
if A!.type * "epsilon" then
r := RatExpOnnLettersd, [] , "empty_set") ;
else
r := RatExpOnnLetters(
ShallowCopy(FamilyObj(A)!.alphabet), [ ] , "empty_set");
fi;
Setter(SizeRatExp)(r,0);
MinimalKnovnRatExp(A)[1] : r;
return(r);
else
r :- T [ l ] [ 2 ] ;
if WT[1] [2] = 0 then
Setter(SizeRatExp)(r,l);
else
A.3. FATORATEX
P
Setter(SizeRatExp)(r,WT[1][2]);
fi;
retum(r);
fi;
end;
A.3 FAtoRatExp
FAtoRatExp : function(A)
local T, # Transition function of the GTG
WT, # Weighted transition function of the GTG
Nout, # Number of edges going out to distinct vertices
Bin, # Number of edges coming in from distinct
vertices
Invertices, # The numbers of the vertices that have a
transition into i
Outvertices, # The numbers of the vertices that have a
transition from i
Inv,
Outv,
Q. The number of states of the GTG without
counting qO and qf
qO, qf, The two extra states of the GTG
WL,
V,
computeGTG,
destroyLoop,
destroyState,
computeWeight,
computeBest, # Try to choose the best vertex
flag,
i, q, r, 1;
Invertices : ;
Outvertices :- [];
for i in [1 .. Q+2] do
Invertices [i] : [] ;
Outvertices[i] := [];
od;
computeWeight : = function(i)
local v, p, q;
v : - 0;
for p in Invertices[i] do
v . v + WT[p][i] * (N out[i] - 1);
od;
if WT[i][i] = -1 then # Do nothing, there i s no loop
else
v : - w + HT[i][i] * (N out[i] * N in[i] - 1);
fi;
for q in Outvertices[i] do
v : - v + WT[i][q] * (N in[i] - 1);
od;
return(w);
end;
## End of computeWeight()
computeBest := functionO
local p, q, i, v;
A.3. FATORATEXP
if WL [] then
for i in [1 .. t|] do
AddSet(WL, [computeWeightii), i] ) ;
od;
else
for i in Inv do
AddSet(WL, [computeWeight(i),i]);
od;
for i in Outv do
AddSet(WL, [eomputeWeight(i),i]);
od;
fi;
retum(WL[l][2]);
end;
## End of computeBestO
computeGTGO ;
flag := t r u e ;
w h i l e f l a g do
f l a g : f a l s e ;
f o r i i n [1 . . Q] do
i f N o u t [ i ] 0 then
destroyLoop(i);
destroyState(i);
flag := t r u e ;
break;
fi;
od;
od;
flag := t r u e ;
w h i l e f l a g do
f l a g : f a l s e ;
f o r i i n [1 . . Q] do
i f N i n [ i ] 0 then
destroyLoop(i) ;
destroyState(i);
flag := t r u e ;
break;
fi;
od;
od;
w h i l e Q > 0 do
V : computeBestO;
i : - 1;
w h i l e IsBound(WL[i]) do
i f WL[i][2] - V then
Unbind(WL[i;i);
e l i f WL[i][2] > V then
i f WL[i][2] i n I n v e r t i c e s [V] or
WL[i][2] i n Q u t v e r t i c e s [ V ]
110 APNDICE A. CDIGO
Unbind(WL[i]);
else
WL[i][2] : - WL[i][2] - 1;
fii
else
if WL[i][2] in Invertices[V] or
WL[i][2] in Outvertices then
Unbind(WL[i]);
fi;
fi;
i := i + 1;
od;
WL : C ompacted(WL);
Inv : - Difference(Invertices[V] , [Q+l.Q+2]);
Outv := Difference(Outvertices[V], [0+1,0+2]);
i := i ;
while IsBound(Inv[i]) do
if Inv[i] > V then
Inv[i] : Inv[i] - 1;
fi;
i : - i + 1;
od;
i : - 1;
while IsBound(0utv[i]) do
if 0utv[i] > V then
0utv[i] : 0utv[i] - 1;
fi;
i : - i + 1;
od;
destroyLoop(V);
destroyState(V);
od;
A.4 AcyclicFAtoRatExp
AcyclicFAtoRatExp function(A)
local T, # Transition function of the GTG
WT, # Weighted transition function of the GTG
Nout, 4 Number of edges going out to distinct vertices
Min, # Number of edges coming in from distinct
vertices
Invert ices, # The numbers of the vertices that have a
transition into i
Outvertices, # The numbers of the vertices that have a
transition from i
Q. # The number of states of the GTG without
counting qO and qf
qO, qf, t The two extra states of the GTG
best,
computeGTG,
destroyState,
computeWeight,
computeHDist,
computeDistGain, dist.gain,
computeBest, # Try to choose the best vertex
removelmediate,
flag,
perm, bonus,
i, j, k, q, r, 1, p;
perm :m [1..A!.states];
i : A!.initial[l];
j := A ! . a c c e p t i n g [ l ] ;
perm[i] : 1;
perm[l] :- i;
p : Positionnera, 2);
k : perm[j] ;
perm[j] : - 2 ;
perm[p] :~ k;
A :- PermutedAutomaton(A, perm);
od;
Nout[qO] : 0; # Value not used but saves tests
Nout[qf] : 0; * Value not used but saves tests
Invertices : D ;
Outvertices : D ;
for i in [1 . . Q+2] do
Invertices [i] : [] ;
Outvertices[i] :- [];
od;
computeWeight :- function(i)
... Cdigo igual ao da funo FAtoRatExp ...
end;
## End of computeWeight()
computeWDist :* function(q)
local i, j, k, v;
w :- 0;
for i in Invertices[q] do
for j in Outvertices[q] do
if j in Outvertices[i] then
if Nout[j] 1 and Nin[j] - 2 and Nin[q] = 1 then
bonus[q] := bonus[q] + computeWeight(j);
fi;
if Nout[i] - 2 and Nin[i] = i and Nout[q] = 1 then
bonus[q] := bonus[q] + computeWeight(i);
fi;
for k in Invertices[i] do
w :- v + WT[k][i];
od;
for k in Outvertices[j] do
V :- + WT[j][k];
od;
fi;
A.4. ACYCLICFATORATEX
P 113
od;
od;
return(w);
end;
## End of contputeWDistO
computeDistGain : function(q)
local s, t;
dist_gain :- L i s t ( [ l . . Q ] , x->0);
for t in Outvertices[q] do
if ForAll(Invertices[q], x -> t in Outvertices[x]) then
dist_gain[t] := dist_gain[t] + N out[t];
fi;
od;
for s in Invertices[q] do
if ForAll(Outvertices[q], x -> s in Invertices[x]) then
dist_gain[s] : dist_gain[s] + N in[s];
fi;
od;
end;
## End of computeDistGainO
computeBest := functionO
local i , j , 1, s, t , dg;
if Q = 2 then
return(l);
fi;
bonus := L i s t ( [ l . . Q ] , x->0);
1 :- ;
j :- 0;
for i in [3..Q] do
AddSet(l, [computeWDist(i)~computeWeight(i) + bonus[i] t i ] ) ;
J i- j + i:
od;
if j > 1 then
s : l [ j - l ] [ 2 ] ;
t := l [ j ] [ 2 ] ;
computeDistGain(s);
dg :~ StructuralCopy(dist_gain);
coraputeDistGain(t);
if dg[t] > dist_gain[s] then
return(s);
else
return(t);
fi;
else
return(l[j][2]);
fi;
114 APNDICE A. CDIGO
end;
## End of computeBestO
removeImediate : functionO
local i , f l a g ;
flag : f a l s e ;
for i in [3..Q] do
if Nin[i] 0 or Nout[i] 0 or
(Nin[i] 1 and Hout[i] 1) then
flag :< t r u e ;
destroyState(i);
break;
fi;
od;
if flag then
removelmediateO ;
fi;
end;
## End of removelmediateO
*
# Main Code
#
computeGTGO ;
removelmediateO ;
while Q > 2 do
q := computeBestO;
destroyState(q) ;
removelmediateO ;
od;
for i in [i.. Q] do
destroyState(l) ;
od;
Setter(SizeRatExp)(r,l);
else
Setter(SizeRatExp)(r,WT[1][2]);
fi;
return(r);
fi;
end;
116 APNDICE A. CDIGO