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