Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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)  |