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 18. 04. 2009 09:07

marros11
Příspěvky: 71
Reputace:   
 

Algoritmus na prevod DKA a regularni vyraz.

Zdravim, prosim o pomoc s resenim nasledujciho problemu. Mam navrhnout a detailne popsat algoritmus resici nasledny problem:
Vstup: Deterministický konečný automat A a regulární výraz γ.
Otázka: Jsou A a γ ekvivalentní, tj. platí L(A) = [γ] ?
===================================
Muj postup:
1. Sestrojim algoritmus ktery mi rozpozna zdali je zadany vyraz regularni - tady jsem narazil jak by dany algoritmus mel vypadat?
2. K danemu regularnimu vyrazu sestrojim Nedeterministicky konecny automat - neni mi presne jasne jak bych to mel udelat. :(
3. NKA prevedu na DKA - tohle mi je jasne a vim jak na to :)
4. Porovnam oba DKA zdali prijimaji stejna slova nad abacedou L - tady jsem taky narazil jak bych to mel provest.

Dekuji vsem za rady a pomoc.

Offline

 

#2 18. 04. 2009 10:12

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

Bod 1. můžeš přeskočit -- když v zadání píšou že dostaneš regulární výraz, tak už nemusíš ověřovat, že je regulární (stejně tak neověřuješ, že A je utomat).
Jinak myšlenka dobrá, konkrétní realizace popsána v několika příspěvcích zde:
http://forum.matweb.cz/viewtopic.php?id=7350


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#3 20. 04. 2009 07:58

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

takze bod 1 mazu, bod 2 je jasny s predesleho prispevku. Bod 3 vim jak na nej. A ted k bodu 4. Da se nejak trivialne porovnat zdali jsou oba DKA ekvivalentni? Nebo musim provest minimalizace a pak prevest do normovaneho stavu a nasledne porovnat?

Offline

 

#4 20. 04. 2009 10:09

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

Porovnání automatů se provede tak, že se oba minimalizují a převedou na kanonický tvar, u vás se tomu tuším říká normalizace. Tedy vstupní  stav má číslo 1, stav, do kterého se z něj dostanu prvním symbolem abecedy 2, druhým symbolem 3,..., pak se podobně očíslují stavy, do kterých se umíme dostat ze stavu 2 atd. Platí, že automaty jsou ekvivalentní <=> jsou jejich kanonické tvary stejné.


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#5 20. 04. 2009 12:18

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

neexistuje jeste varianta kde bych se vyhnul minimalizaci? Na konzultaci mi bylo receno ze tenhle postup kde se vyuziva minimalizace je dosti slozity. Mel by byt jednoduchsi zpusob jak porovnat dva DKA zdali prijimaji stejna slova, ale nic me nenapada...

Offline

 

#6 21. 04. 2009 12:32

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

a jeste jeden dotaz pro uplnost:
- v podstate resim problem zdali zadany automat A a regularni vyraz gama, prijimaji stejna slova nad abecedou L? Chapu to dobre? Nebo ta terminologie je jinak?

Offline

 

#7 21. 04. 2009 14:51

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

Myslím, že automat přijímá slova a slova odpovídají regulárnímu výrazu.

Jak to udělat bez minimalizace nějak elegantně mě nenapadá. Minimalizovat stroj znamená zjistit, které z jeho stavů jsou ekvivalentní, zjistit, zda dva stroje přijímají stejný jazyk, znamená zjistit, jestli je počáteční stav prvního ekvivalentní s počátečním stavem druhého, k čemuž je potřeba ověřit ekvivalentnost spousty stavů mezi stroji ...


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#8 22. 04. 2009 08:00

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

jeste jeden dotaz, kdyz sestrojuji konecny automat k regularnimu vyrazu, tak je volana procedura AUTOMAT, pod tim si mam predstavit co? :) To je jako nejaky program? Nebo to je nejaky automat? ... :) Nebo?

Offline

 

#9 22. 04. 2009 11:49

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ marros11:Pokusil jsem se ten algoritmus popsat tak, jak bych ho programoval v Pascalu. Proto pojmy jako "volání" nebo "procedura". Představ si proto proceduru jako funkci nebo program. A pokud jsi zatím neprogramoval, tak třeba jako Turingův stroj :)


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#10 25. 05. 2009 19:32

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ Kondr:
Jak trivialne porovnat zdali dva DKA prijimaji stejna slova nad zadanou abecedou. Chtel bych se ujistit jestli premyslim spravne. Kdyz mam tedy dva DKA, ktere jsem sestrojil pomoci predchozich bodu 1~3 (viz. prvni prispevek), tak potom pomoci Modularniho navrhu zkonstrujuju novy automat A, a to tak ze A= L(A1)$\cap$L(A2).
Q = Q1 x Q2
$\delta$((q1,q2),a) = ($\delta$1(q1,a), $\delta$2(q2,a)) pro vsechna q1$\in$Q1, q2$\in$Q2, a$\in$$\Sigma$
q0 = (q01, q02)
F = (F1 x Q2) $\cap$ (Q1 x F2)

Potom tedy kdyz sestrojim jeden automat tak rozpoznam hned jestli dane slovo prijme ci ne, a tim i odpovim na otazku zdali dany DKA a RV prijimaji stejna slova.

Je tahle uvaha spravna?
Dekuji za help.

Offline

 

#11 25. 05. 2009 22:57

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ marros11:Nechápu. V čem mi pomůže průnik jazyků? Možná sestavit automat pro symetrický rozdíl jazyků (jen drobná modifikace algoritmu na automat pro průnik) a ověřit, že rozpoznává prázdný jazyk (snadné).


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#12 26. 05. 2009 08:15

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ Kondr:Myslel jsem ze kdyz sestrojim prunik dvou automatu, tak vlastne najdu slova ktere prijmou oba automaty.
Chtel bych jenom ted dokazat jestli dane slovo prijmou oba automaty nebo ne. Mam tedy ten obecny postup spravne? Docetl jsem se ve skriptech ze F by melo byt F = (F1 x F2). Tak ted nevim jestli postupuju spravne?

Offline

 

#13 26. 05. 2009 10:23

xxsawer
Příspěvky: 196
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ marros11:
Cau cau

Procet jsem si tady ten postup, ktery navrhujes a zkusil bych na to jit uplne obracene....
Co si prevest radsi ten DKA na regularni vyraz a pak porovnavat dva regularni vyrazy? Myslim ze prave proto jste dostali v zadani uz DKA protoze s tim nemusis nic delat...
Proste si ten DKA napis jako soustavu rovnic, vyres ji pro pocatecni stav, porovnej vyrazy a je hotovo...

Offline

 

#14 26. 05. 2009 12:44

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ marros11:Jeden automat přijímá množinu slov A, druhý B. Potřebujeme, aby všechna slova z A byla v průniku A,B a podobně aby v něm byla všechna slova z B. Nestačí ten průnik sestrojit, musíme ho s něčím porovnat. Ověřovat, že $A\cup B=A\cap B$ je ale ještě horší, než ověřovat A=B.

↑ xxsawer:To vypadá taky rozumě, akorát o algoritmu na porovnání dvou regulárních výrazů moc nevím. Celkem mě překvapuje, že to vede na soustavu rovnic.


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#15 26. 05. 2009 13:04

xxsawer
Příspěvky: 196
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ Kondr:

Algoritmus na porovnání regulárních výrazů si napíšeš sám...prostě máš nějak zadanej regulární výraz (nevim jak ho má přesně zadanej) no a buď to co ti vyjde je stejný nebo neni :)
Jinak k tý soustavě...máš n stavů a ke každýmu stavu uděláš rovnici -> n stavů, n neznámých...potřebuješ vyřešit rovnici pro počáteční stav

Offline

 

#16 26. 05. 2009 14:04

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

Uz jsem ztoho uplne mimo. Byl jsem znova na konzultaci a bylo mi receno ze se mam zamyslet nad resenim kdyz mam dva DKA, a mam jednoduse porovnat, zdali prijimaji stejna slova. Napadlo mne sestrojit novy automat a to
$L(A) = L(A1)\cap L(A2)$
Tenhle novy automat bude prijimat jen ty slova, ktere prijme puvodni automat A1 i A2. A tim dokazu ze pro dane slova jsou automaty ekvivalentni, tedy ze prijimaji stejna slova.

Proto F = (F1 x F2).

Je tenhle postup spravny?

Offline

 

#17 26. 05. 2009 15:14

xxsawer
Příspěvky: 196
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ marros11:

Chlape...zkus to udelat tak jak sem ti poradil
Znova sem si precet to zadani v tvym prvnim prispevku a neni mi jasny jestli tim, ze chces algoritmus myslis, ze mas jenom vymyslet postup jak to udelas, nebo jestli mas fakt napsat program (treba v jave), ktery to bude resit...

Tim co si napsal nic moc nedokazes...Predpokladej, ze ty automaty by byly stejny -> oba by teda prijimaly stejny jazyky, tak kdybys udelal treti automat, coz by byl jejich prunik tak ten automat by musel byt stejny :) A pak by byla otazka za milion: jak bys dokazal, ze ty automaty by prijimaly stejny slova, kdyz mnozina slov muze byt nekonecna????

Jestli ti neni presne jasny to co sem navrhnul tak sem hod nejakej regularni vyraz + konecnej automat k nemu (neco rozumnyho, ne zadny monstrum) a ja ti to na tom zkusim ukazat...

Offline

 

#18 26. 05. 2009 20:04

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ xxsawer:Rad bych pouzil tvuj navod, ale dostal jsem za ukol to resit skrze ty dva DKA. Nemuzu proto sestrojit regularni vyrazy :(( V mym pripade neresim konkretni pripad, ale obecny postup.... jsem uz na dne a vubec nevim jak dal.... :( Profesor porad dokola mi opakaval ze existuje trivialni zpusob jak porovnat jestli dva DKA prijimaji stejne slova... ale tim ze to tu resime uz pekne dlouho tak fakt netusim co je mysleno tim trivialni a vse co mne napadne konci ve slepe ulicce :(((

Offline

 

#19 26. 05. 2009 20:40

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ marros11:To jsi psal už dřív a já se ti to už dřív pokusil vyvrátit (ne, že bysis nemohl sestavit automat pro průnik, ale pouze to prodlužuje postup). Zkusme to jinak: Mám dva automaty. První akceptuje pouze slova Pionýr a Brkos, druhý pouze slova Pionýr a Matweb. Sestavím automat pro jejich průnik, ten akceptuje pouze slovo Pionýr. Co jsem tím získal? Algoritmus má pouze odpovědět "ano" nebo "ne". Zkus formulovat, za jakých podmínek tvůj algoritmus odpoví "ano" a za jakých odpoví "ne".


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#20 26. 05. 2009 22:10

xxsawer
Příspěvky: 196
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ marros11:

Hele podle mě řešíš kraviny...
Neodpověděl si mi na otázku, máš napsat program (v cečku, javě, pascalu...), kterej bude řešit tu úlohu nebo máš jenom vymyslet postup???
Jestli si dostal nějaký zadání, tak je jenom na tobě jak ho vyřešíš, bez ohledu na to co ti doporučil na konzultaci -> já bych to řešil tak jak sem ti poradil výš...
Jestli trváš na tom, že chceš porovnávat dva konečný automaty tak moje rada je tahle:

http://forum.matweb.cz/upload/838-snap012.jpg

Co to znamená? Vypadá to možná trochu šíleně, ale neni na tom nic težkýho, je to vlastně podstata důkazu pumping lemmy pro regularní jazyky.
Na začítku si ve stavu q0 (teda počátečnim stavu) a chceš zkusit jestli ten automat přijme řetězec w. Představ si, že ten řetězec je hodně dlouhej a dá se rozložit na tři podřetězce xyz. (To je ta druhá závorka). Teď ten automat přijme řetězec x a dostane se do nějakýho stavu q1 (to je ta třetí závorka - to ležatý T s hvězdičkou si můžeš představit jako že automat prostě prošel nějakýma stavama než přijmul řetězec x, ta hvězdička znamená, že těch stavů mohlo být libovolně mnoho ale taky 0).
Teď to důležitý: Si ve stavu q1 a přijímáš řetězec y. Ten automat ho přijme ale všimni si, že po tom co přijmul ten podřetězec y zůstal ve stavu q1!!!!
Nakonec přijme zbytek a dostane se do koncového stavu qF.

K čemu tohle všechno? Pointa je v tom, že v tom automatu musí být nějaký cyklus. Protože máš třeba nějakou abecedu, dejme tomu {a,b} a nad ní nějakej regulární výraz, kterej ti generuje nějakej jazyk. Ten jazyk může být někonečnej, to ale znamená, že se ty řetězce toho jazyka budou postupně natahovat (proto sem taky psal aby sis představil, že je řetězec w dostatečně dlouhej). V těch řetězcích toho jazyka prostě postupně uvidíš něco co se opakuje, nějakej cyklus. Ten musíš najít taky v tom konečnym automatu.

Takže moje rada:
Převeď ten regulární výraz na DKA (jelikož je to regulární výraz tak když to budeš převádět tak ti z toho vyleze vždycky DKA takže se nemuíš bát toho, že by byl nedeterministickej). V tom automatu musíš identifikovat ten cyklus (hádám, že tohle je ten triviální způsob co myslel), začátek a konec (kde ten začátek a konec tam být nemusí).

Řek bych že když mu to takhle podáš tak bude happy...

Offline

 

#21 27. 05. 2009 00:05

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

Zdravím diskutující a připomínám, že  otázka zní najít algoritmus který ROZHODUJE.  Odpovědí nemusí být program v C ani Javě, ale jasně popsaný algoritmus. Tedy např: "provedu kroky 1,2,3,4, pokud v kroku 4 uspěju odpovím že ANO, jinak odpovím NE." Takový jasný popis mi chybí i v příspěvku ↑ xxsawer:, takže ani nemohu říct, jestli je příspěvek správně (něco v něm jistě pravdivé je, ale netuším, kam autor míří a zdá se mi , že tudy cesta nevede).  Přesnější popis už jsem dával do jiného tématu: http://forum.matweb.cz/viewtopic.php?id=7350 , nevidím důvod to omílat znova.


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#22 27. 05. 2009 12:41

xxsawer
Příspěvky: 196
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ Kondr:
No tak když psal, že se to má zjistit jednoduchým podíváním se na automaty tak myšlenka byla taková, že si ten automat jakoby rozsekneš na 3 části, začátek, cyklus a konec a ty už postupně porovnáš, ano = sou stejny ne = nejsou stejný. Neni to teda nic algoritmicky přesnýho, ale odpovídá to myšlence rychlího se podívání na automaty :)
Jinak sem se mrknul na ty skripta co si doporučoval a vypadá to zajímavě no :) Takže asi pro variantu kdy chce fakt porovnávat dva DKA doporučim taky to tvoje řešení...

Offline

 

#23 27. 05. 2009 14:20

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

xxsawer: neresim konkretni pripad, ani to nemam v nicem naprogramovat. Mam jenom sestrojit obecny postup jak to dokazat. Formou referatu.
V tom prispevku jak jsi se rozepsal jak by to slo resit, slo by to zformulovat do nejakych obecnych kroku?
Taky bych chtel dodat, ze postup ktery je resen uz predtim kondrem, je spravny, a taky uz jsem ho prezentoval, ale je slozity a profesor mi to neuznal, neb jsme detailne minimalizaci neprobirali a tak se ji mam vyhnout. A stale mi tvrdi ze existuje trivialni zpusob jak dokazat totez ale bez minimalizace. Ale jak vidim, tak trivialni to pripada jen jemu :(((

Offline

 

#24 27. 05. 2009 17:30

Kondr
Veterán
Místo: Linz, Österreich
Příspěvky: 4247
Škola: FI MU 2013
Pozice: Vývojář, JKU
Reputace:   38 
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ xxsawer:Tak teď už můžu říct, že je tvůj postup špatně. Jednak tam těch cyklů může být spousta, druhak délka cyklu nemusí být v obou strojích stejná (třeba stroj, který rozppoznává jazyk slov sudé délky může mít cyklus délky 2, 4,6, ... podle toho, jak je optimálně zkonstruovaný. Zkrátka bez optimalizace nelze porovnávat automaty podle "tvaru", je potřeba do porovnání nějak zakomponovat významy jjednotlivých stavů.


BRKOS - matematický korespondenční seminář pro střední školy

Offline

 

#25 27. 05. 2009 19:02

marros11
Příspěvky: 71
Reputace:   
 

Re: Algoritmus na prevod DKA a regularni vyraz.

↑ Kondr: Jeste bych mel dotaz, bylo mi receno ze si mam predstavit ty dva automaty jako ze prijimaji jednotliva slova a pak ze je nejaka jedna ridici jednotka, ktera vyhodnoti jestli oba automaty prijimaji tytez slova. Ztoho lze odvodit jestli jsou ekvivalentni. V momente kdy jeden automat slovo neprijme cyklus konci. Jsem stale mimo... nevim co si pod tim predstavit.
PS. Ocenuji Vas cas straveny nad timhle prikladem! Dekuji.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson