Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
|
lfa:exercise-sheet-4-solution [2021/01/26 15:11] dmihai |
lfa:exercise-sheet-4-solution [2021/01/28 10:54] (current) dmihai |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| 1. Scrieți o MT care să decidă $ L_1 = \{ 0^{2^n} \mid n \ge 0 \}$ | 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}$. | 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 ^ # ^ | ^ ^ a ^ b ^ c ^ d ^ A ^ B ^ C ^ D ^ # ^ | ||
| - | | **find_a** | (find_c, A, R) | (find_d, B, R) | | | | | (check_no_cs, C, R) | | (accept, #, R) | | + | | **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_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_c** | (find_c, a, R) | (find_c, b, R) | (rewind_a, C, L) | | | | | | | | ||
| Line 10: | Line 30: | ||
| | **rewind_a** | (rewind_a, a, L) | (rewind_a, b, L) | | | (find_a, A, R) | | (rewind_a, C, L) | | | | | **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) | | | | | **rewind_b** | | (rewind_b, b, L) | | | | (find_b, B, R) | (rewind_b, C, L) | | | | ||
| - | | **check_no_cs** | | | | | | | (check_no_cs, C, R) | | (accept, #, R) | | + | | **check_no_cs** | | | | | | | (check_no_cs, C, R) | | ($ q_{accept}$, #, R) | |
| - | | **check_no_ds** | | | | | | | (check_no_ds, C, R) | (check_no_ds, D, R) | (accept, #, R) | | + | | **check_no_ds** | | | | | | | (check_no_ds, C, R) | (check_no_ds, D, R) | ($ q_{accept}$, #, R) | |