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 23. 03. 2009 09:44

Reziel7
Zelenáč
Příspěvky: 4
Reputace:   
 

Sestrojení deterministického konečného automatu

Potřeboval bych opravdu pomoct a nakopnout při řešení referátu, který mi byl zadán.

Popište, jak sestrojit deterministický konečný automat přijímající slova z níže
popsaného jazyka L nad abecedou Σ = {0, 1, +}. Do jazyka L patří právě ta slova, která
jednak patří do jazyka popsaného regulárním výrazem:
(0 + 1)(0 + 1)∗(+(0 + 1)(0 + 1)∗)∗
(tedy například slovo 100010+010010+10+0+11101) a která navíc mají tu vlastnost, že když
se na dané slovo podíváme jako na zápis součtu binárních čísel (tj. binární čísla oddělená
symboly +), tak platí, že součet těchto binárních čísel je dělitelný 541 (číslo 541 je zapsáno
desítkově).

Díky moc za jakýkoliv nápad.

Offline

 

#2 25. 03. 2009 20:48

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

Re: Sestrojení deterministického konečného automatu

Nejprve sestrojme automat pro jazyk, který nemusí odpovídat danému regexpu, ale splňuje druhou podmínku (slova v jazyku jsou binárně zapsané součty dělitelné 541, nadbytečná znaménka + přitom ignorujeme). Za množinu stavů zvolíme množinu dvojic (a,b) celých čísel od 0 do 540. Číslo a bude rovno zbytku aktuálně načítaného sčítance mod 541, číslo b bude odpovídat součtu předchozích sčítanců mod 541. Počáteční stav je (0,0).

Ze stavu (a,b) se načtením nuly automat dostane do stavu (2a mod 541,b), načtením jedničky do stavu (2a+1 mod 541,b), načtením plusu do stavu (0,a+b mod 541). Přijímající budou ty stavy (a,b), pro které je a+b dělitelné 541.

Nyní tento automat upravíme tak, aby akceptoval pouze korektně  zapsané vstupy. S každým stavem (a,b) do něj přidáme stav (a,b)', který odpovídá tomu, že další znak musí být číslo. Navíc přidáme stav FAIL, do kterého automat spadne, pokud se na vstupu objeví něco nekorektního. Počáteční stav nyní bude (0,0)', přechodovou funkci snadno domyslíš.


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

Offline

 

#3 25. 03. 2009 21:55

Padawancs
Zelenáč
Příspěvky: 9
Reputace:   
 

Re: Sestrojení deterministického konečného automatu

prosim tě mohl by jsi mi to podrobněji vysvětlit nejak z toho nejsem moudry

Offline

 

#4 25. 03. 2009 22:19

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

Re: Sestrojení deterministického konečného automatu

↑ Padawancs:Představuj si, že píšeš program na rozpoznání toho jazyka, který musí odpovědět "patří"/"nepatří" hned když načte slovo. Ten program bude mít tři proměnné: int a = součet předchozích sčítanců mod 541, int b =aktuální sčítanec mod 541, bool x=pravdivostní hodnota výroku "další znak musí být cifra".
1) Z významu těchto proměnných plyne, jak se budou měnit (pro proměnné a,b jsem to popsal výše, proměnná x je na začátku true, s načtením cifry se mění na false a s načtením + na true).
2) Pokud máme konečně mnoho proměnných a každá nabývá konečně mnoho hodnot, stačí nám automat s konečným počtem stavů, kde každý stav odpovídá trojici hodnot proměnných.

Která z částí 1) a 2) není jasná a proč?


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

Offline

 

#5 30. 03. 2009 13:55

Reziel7
Zelenáč
Příspěvky: 4
Reputace:   
 

Re: Sestrojení deterministického konečného automatu

↑ Kondr: Díky moc za pomoc a snahu ...

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson