języki, automaty, wyrażenia regularne,

0

ostatnio zaczęły mnie interesować języki, automaty deterministyczne i wyrażenia regularne.
no i przeglądając jakąś stronę natknąłem się na takie zadania:

. Skonstruuj NFA oraz DFA rozpoznający język L,
L={wv<należy do> {0,1}* : liczba wystąpień litery 1 jest podzielna przez 3}

wszystko było by fajnie gdyby nie to że: A)nie ma odp. b)nie ma pokazane jak się to rozwiązuje :/
podobnie z tym:

Posługując się ogólnym algorytmem konstrukcji NFA zbuduj automat rozpoznający język wyrażenia regularnego R=ab*+ba

i z mojej strony jest pytanie czy ktoś mógłby mi powiedzieć jak mam rozwiązać te zadania? bo chyba za głupi jestem żeby samemu wpaść ;-(

0

Daj linka tej strony, bo wydaje mi się, że przekręciłeś zadanie. Po pierwsze w definicji L używasz w i v, a żadne z nich nie występuje po dwukropku??

Jeżeli dobrze rozumiem, to masz język tych słów, w których liczba wystąpień jedynki występuje 3 * k razy. To jest zbyt proste zadanie, żeby tworzyć dla niego NFA. Jeżeli chodzi o deterministyczny (który z definicji jest też niedeterministycznym) to robisz sobie trzy stany. Każdy oznacza resztę z dzielenia liczby jedynek przez 3. Jeżeli wczytasz jedynkę to zmieniasz stan na następny modulo 3, jeżeli zero to zostajesz w stanie. Stanem akceptującym jest pierwszy stan (ten, który oznacza dzielenie modulo 3 z resztą 0).

Drugi przykład jest trochę trudniejszy do opisania (bo łatwiej byłoby to rysować). Generalnie idea jest taka, że najpierw definiujemy automat z epsilon-przejściami (potem łatwo je usunąć). Na automat patrzysz jak na zbiór bloków (każdy blok jest zbiorem stanu i połączeń, który coś robi). Chodzi o to, że wydzielasz takie jakby "procedury". Dla wyrażenia "a" i dla "b" łatwo narysować automat ;-P Potem dla konkatenacji - wystarczy takie bloki zestawić ze sobą i wyjście pierwszego połączyć z wejściem drugiego epsilon-przejściem. Gwiazdkę robi się tak, że bierzesz blok i wyjście łączysz z wejściem epsilon-przejściem. Sumę - wiadomo. Masz dwa bloki, jakieś wejście i robisz rozwidlenie (epsilon-przejścia do wejść każdego z bloków).

Ten proces jest dość łatwy. Jeżeli będziesz chciał to może "wysilę" się na obrazki ;-)

// Edit: Na ważniaku jest opis tego typu rzeczy. Są tam ćwiczenia z odpowiedziami.

0

może nie rysuj...bo to za dużo czasu by wzięło, a takie coś:

(a)Podaj wyrażenie regularne R takie że L(R) = L
(b) Skonstruuj DFA M taki że L(M) = R

dla L={w<nalezy do>{0,1}* : słowo w kończy się na 00}

0

a) (0+1)*00
b) Idea jest taka, że w stanach automatu pamiętasz ostatnie dwa znaki. Czyli masz stany:
00
01
10
11
Stanem startowym jest 11, a akceptującym 00. Przejścia łatwo zrobić. Zapiszę to tak: stan_początkowy/wejście/stan_następny, czyli 00/1/01 oznacza, że będąc w stanie 00 i otrzymując na wejściu 1 przechodzisz do stanu 01.

Mamy takie przejścia:
00/1/01
00/0/00
01/1/11
01/0/10
10/0/00
10/1/01
11/0/10
11/1/11

Może się pomyliłem (wątpię), ale wiadomo o co chodzi. Z tym typem zadania (punkt b) wiąże się twierdzenie o indeksie - polecam poszukać tego hasła.

1 użytkowników online, w tym zalogowanych: 0, gości: 1