Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 20. 01. 2012 23:23 — Editoval SUK (20. 01. 2012 23:29)

SUK
Zelenáč
Místo: HK
Příspěvky: 23
Reputace:   
Web
 

Regulární výraz => DFA

Ahoj, v zkouskove pisemce co budu psat v pondeli bude urcite prevod regularniho vyrazu na DFA.
Neznam na to zadny algoritmus, tak jsem pouzil takovou intuitivni metodu, pri ktery si proste kreslim graf podle moznyho vstupu, nasledne podmnozinovou konstrukci prevedu NFA na DFA. Jenze hned u prveho zkouseneho prikladu jsem narazil na problem. Popisu:

Samotny regv:
$r = (a^*(a+b)b)^*$ (perl regexp by vypadal takhle: (a*[ab]b)* )

coz vicemene dava vstup, ktery muze (ale nemusi) zacinat libovolnym poctem a, nasleduje jedno nebo dve b (v pripade, ze nezacina zadnym ackem). Pote muze byt vstup ukoncen a nebo se opakovat podobna situace nekonecnekrat dokola. Zaroven to "zere" prazdne slovo.


tabulka prechodove fce: z grafu, co jsem stvoril, onim i a o znacim vstupni (i) a vystupni (o) stav.

$\begin{tabular}{c | c | c | c} & & a & b \\ io & 1 & 3 & 2 \\ & 2 & & 1 \\ & 3 & 3 & 2,1 \end{tabular}$

Podmnozinovou konstrukci z toho dostanu vicemene identickou tabulku (psal jsem to bez {} protoze me to nebavi v latechu escapovat)
$\begin{tabular}{c | c | c | c}
& & a & b \\
io & 1 & 3 & 2 \\
& 2 & null  & 1 \\
& 3 & 3 & 2,1 \\
o & 2,1 & 3 & \bf{2,1} \\
& null & null & null \\
\end{tabular}$

Onen radek s tucnou 2,1 je to, co mi pusobi problem: zatimco puvodni regexp prijme maximalne abbb (ab a potom bb), tak tenhle DFA uz je ochotnej (diky te smycce u (2,1)) prijmout i [b]abbbb[b/] k cemuz nema podporu v regexpu. Opravit tuhle konkretni chybu dokazu, misto $\delta(\{2,1\}, b) = \{2,1\}$ pouziju $\delta(\{2,1\}, b) = \{1\}$, cimz by to melo zacit odpovidat. Jenze podobne chyby si v pisemce treba ani nemusim vsimnout ci mi nepujde tak lehce odstranit. A ted se konecne muzu zacit ptat:

1. Je muj postup prevodu vubec spravny/pouzitelny?
2. Nemam treba dokonce chybu nekde v te podmnozinove konstrukci? 
2. Existuje nejaky prijemnejsi algoritmus pro prevod?

Snad je pochopitelne, co mam za problem a co chci, proto dekuji za odpovedi a preju hezkej den!


((sgn(abs(sin(x*2)) - 0.99) + 1)/2)*abs(sin(x*2)/10) + abs(sin(x*2))

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson