share:trueauthor: Jan Černý
date:2022-10-01cssclass: center-print
Jan Černý
Úkol 02 - 21. 10. 2022
Zadání
Navrhněte bezkontextovou gramatiku pro následující bezkontextové jazyky:
(0,4 bodu) Navrhněte konečný automat pro následující regulární jazyk:
(0,5 bodu) Pro následující konečný automat vytvořte ekvivalentní minimální deterministický konečný automat . Popište svůj postup a pokud má více kroků, ukažte všechny mezivýsledky. , kde :
(0,1 bodu) Všimněte si, že je NKA s -přechody a více počátečními stavy. Takový automat nebyl na přednášce oficiálně zaveden. Má však stejnou výpočetní sílu jako ostatní typy konečných automatů (tj. též rozpoznává právě třídu regulárních jazyků). Zdůvodněte proč.
Řešení
Úkol 1
Regulární jazyk generuje řetězce ve tvaru , kde a mají délku přesně 2 znaky a zároveň a nejsou stejné
Pokud obsahuje méně než 2 symboly (tedy 0 nebo 1), musí být nebo , a naopak
Mezi nimi (řetězec ) může být libovolný (i nulový) počet symbolů
Přípustné jsou tedy jen tyto kombinace:
Začátek ()
Střed ()
Konec ()
, kde :
Poznámka
Moje pojmenování stavů je asi poněkud nestardardní, proto bych ho rád vysvětlil
Názvy a jsem si značil, že po příchodu do tohoto stavu začíná řetězec symbolem nebo , podtržítko tedy značí zbytek řetězce
Názvy a jsem si značil, že po odchodu z tohoto stavu má řetězec končit symboly , nebo
Názvy a jsem si značil, že po odchodu z tohoto stavu má řetězec končit symbolem nebo
Úkol 2
Postup:
Odstraním -přechody s pomocí -closure
Vznikne mi NKA s více počátečními stavy
Převedu determinizací na DKA (zároveň se tím zbavím nedosažitelných a neužitečných stavů)
Minimalizuji hledáním ekvivalentních stavů
1. Odstranění -přechodů
Vytvořím si sloupeček -closure
-closure
Pomocí něj doplním přechody do automatu již bez -přechodů
2. Převod na DKA
Díky determinizaci se zbavím i nedosažitelných a neužitečných stavů, které by bylo jinak potřeba odstranit před minimalizací
3. Minimalizace
Hledání ekvivalentních stavů
Poznámka pro Elišku
Tak už jsem objevil první nedostatek Obsidianu😅 Jelikož je renderovaný pomocí MathJaxu (který neumí \begin{tabular}), musel jsem využít tabulky formátované v Markdownu. Nepodařilo se mi tak v nich bohužel nijak zvýraznit/zdvojit čáry mezi sloupečky různých kroků :))
Výsledný automat bude tedy vypadat takto
, kde :
Úkol 3
Pokud máme NKA s -přechody, není potřeba mít více počátečních stavů
Počáteční stavy lze nahradit pouze jedním počátečním stavem, a z něj vést -přechody do "původních" počátečních stavů
Tím jsme automat převedli na NKA s -přechody a jedním počátečním stavem, který známe z přednášky
Opět lze u takového automatu odstranit -přechody, determinizovat a minimalizovat