1. Scrieți o MT care să decidă $ L_1 = \{ 0^{2^n} \mid n \ge 0 \}$
Mașina funcționează astfel:
- merge de la stânga la dreapta marcând cu X zerouri din doi în doi
- dacă a găsit un singur 0 acceptă
- dacă a găsit un număr impar de 0 respinge
- întoarce capul de citire pe primul simbol și repetă procesul
Toate celulele goale ar trebui interpretate ca tranziții către $ q_{reject}$.
0 | X | # | |
---|---|---|---|
init | (check, #, R) | ||
check | (skip, X, R) | (check, X, R) | ($ q_{accept}$, #, R) |
skip | (mark, 0, R) | (skip, X, R) | (rewind, #, L) |
mark | (skip, X, R) | (mark, X, R) | |
rewind | (rewind, 0, L) | (rewind, X, L) | (init, #, R) |
2. Scrieți o MT care să decidă: $ L_2 = \{ a^nb^mc^nd^m \mid n, m \ge 0 \}$
Următorul tabel descrie o mașină care întâi marchează a-uri și c-uri în perechi, apoi trece la a marca b-uri și d-uri. Toate celule goale ar trebui interpretate ca tranziții către $ q_{reject}$.
a | b | c | d | A | B | C | D | # | |
---|---|---|---|---|---|---|---|---|---|
find_a | (find_c, A, R) | (find_d, B, R) | (check_no_cs, C, R) | ($ q_{accept}$, #, R) | |||||
find_b | (find_d, B, R) | (check_no_ds, C, R) | (check_no_ds, D, R) | ||||||
find_c | (find_c, a, R) | (find_c, b, R) | (rewind_a, C, L) | ||||||
find_d | (rewind_b, D, L) | (find_d, C, R) | (find_d, D, R) | ||||||
rewind_a | (rewind_a, a, L) | (rewind_a, b, L) | (find_a, A, R) | (rewind_a, C, L) | |||||
rewind_b | (rewind_b, b, L) | (find_b, B, R) | (rewind_b, C, L) | ||||||
check_no_cs | (check_no_cs, C, R) | ($ q_{accept}$, #, R) | |||||||
check_no_ds | (check_no_ds, C, R) | (check_no_ds, D, R) | ($ q_{accept}$, #, R) |