Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lfa:exercise-sheet-1-solution [2021/01/18 13:01]
pdmatei
lfa:exercise-sheet-1-solution [2021/01/18 16:24] (current)
pdmatei
Line 27: Line 27:
   * Sa presupunem suntem in starea $math[q], iar numarul citit pana la pasul curent este $math[n = 5k+r]   * Sa presupunem suntem in starea $math[q], iar numarul citit pana la pasul curent este $math[n = 5k+r]
   * Daca urmatorul bit citit (cel mai nesemnificativ citit pana la pasul curent) este $math[b] (0 sau 1), atunci input-ul codifica valoarea $math[2*n + b] care este egala cu $math[10k + 2r + b].    * Daca urmatorul bit citit (cel mai nesemnificativ citit pana la pasul curent) este $math[b] (0 sau 1), atunci input-ul codifica valoarea $math[2*n + b] care este egala cu $math[10k + 2r + b]. 
-  * Asadar, daca dupa k tranzitii, restul impartirii inputului la 5 este $math[r], dupa citirea unui nou bit, restul impartiri inputului la 5 este $math[(2r + b) MOD 5].+  * Asadar, daca dupa k tranzitii, restul impartirii inputului la 5 este $math[r], dupa citirea unui nou bit, restul impartiri inputului la 5 este $math[(2r + b)MOD $math[5].
  
-Urmarind aceasta observatie putem construi, iterativ, AFD-ul:+Urmarind aceasta observatie putem construi, iterativ, AFD-ul ​ilustrat in ''​Fig. 3''​: 
 +  * din starea initiala, citirea unui zero nu influenteaza restul (numarul binar ''​0000...0''​ este codificarea lui 0); citirea unui 1 produce un numar a carui impartire la 5 este 1 
 +  * din starea $math[\vdots 1], daca citim zero, (cei 2 biti sunt ''​10''​),​ restul impartirii numarului la 5 este 2, iar daca citim 1 (cei doi biti sunt ''​11''​),​ restul impartirii numarului la 5 este 3 
 +  * in mod similar, daca din starea $math[\vdots 2] citim 0 (cei trei biti sunt ''​100''​),​ restul impartirii numarului la 5 este 4, iar daca citim 1, numarul se divide cu 5.
  
 +{{ :​lfa:​sheet-solutions-1.jpg?​600 |}}
  
  
Line 71: Line 75:
  
 5. Câte limbaje //​distincte//​ pot fi recunoscute de un AFD cu 2 stări? Justificați. 5. Câte limbaje //​distincte//​ pot fi recunoscute de un AFD cu 2 stări? Justificați.
 +
 +**//​Solutie//​**:​
 +
 +Daca AFD-ul nu contine stari finale, sau daca ambele stari sunt finale, limbajele acceptate sunt $math[\emptyset] respectiv $math[\Sigma^*],​ indiferent de structura AFD-ului. Avem prin urmare 2 limbaje identificate.
 +
 +Vom considera in continuare AFD-uri cu o stare finala. Din punct de vedere al tranzitiilor,​ acestea pot avea urmatoarele tipuri (forme), prezentate in figura de mai jos. Numele efectiv al fiecarei stari nu este relevant, ci doar calitatea fiecareia de a fi initiala/​finala. Vom numara in continuare limbajele posibile pentru fiecare tip de AFD:
 +  * **type A**: Oricare ar fi starile initiala/​finala,​ limbajele acceptate sunt tot $math[\emptyset] respectiv $math[\Sigma^*],​ numarate deja anterior.
 +  * **type B**: 
 +    * daca starea initiala coincide cu cea finala si este cea din stanga, avem 2 limbaje posibile (in functie de simbolul de pe tranzitia reflexiva)
 +    * daca starea initiala coincide cu cea finala si este cea din dreapta, limbajul este $math[\Sigma^*],​ indiferent de tranzitii, limbaj numarat deja.
 +    * daca starea initiala este cea din stanga iar cea finala este cea din dreapta, avem 2 limbaje posibile
 +    * daca starea initiala este cea din dreapta iar cea finala este cea din stanga, AFD-ul nu are o stare finala accesibila, prin urmare limbajul este $math[\emptyset],​ numarat deja
 +  * **type C**: structura este simetrica, prin urmare este suficient sa contabilizam doua cazuri:
 +    * starile initiala si finala coincid, caz in care avem 4 limbaje posibile, in functie de simbolii tranzitiilor
 +    * starile initiala si finala nu coincid, caz in care avem alte 4 limbaje posibile
 +  * **type D**: si aceasta structura e simetrica, in plus alegerea simbolilor pe tranzitii nu mai influenteaza limbajul acceptat, prin urmare, avem din nou doua cazuri:
 +    * starile initiala si finala nu coincid: 1 limbaj
 +    * starile initiala si finala coincid: 1 limbaj
 +  * **type E**: Doar simbolii tranzitiilor starii din stanga influenteaza limbajul, deci avem doua posibilitati,​ inmultit cu cele 4 posibile combinatii de stari initiale/​finale,​ deci 8 limbaje
 +  * **type F**: Simbolii tranzitiilor nu afecteaza limbajul, iar cele 4 combinatii de stari initiale/​finale genereaza limbajele $math[\Sigma^*],​ $math[\{\epsilon\}],​ $math[\emptyset],​ $math[\Sigma^+],​ din care doar doua nu au mai fost intalnite.
 +Insumand, peste cele 6 tipuri, obtinem un total de: $math[2 + 4 + 8 + 2 + 8 + 2= 26] limbaje diferite.
 +
 +
 +{{ :​lfa:​sheet-solutions-2.jpg?​500 |}}
 +