Sunteți pe pagina 1din 95

Seminar C&C gr.

231-235, 241-244
MN 2015 2016, FMI UNIBUC

Acest document a fost creat pentru grupele i anul colar care apar n
antet, cu scopul de a ajuta studenii la studiul individual sau
recapitularea pentru test sau examen.
V rog s nu folosii acest document n moduri lipsite de etic.
Nu avei permisiunea de a posta acest document (sau fiierele .jff
asociate) pe site-uri sau grupuri cu acces public.

Am notat cu (*) la nceput de rnd acele probleme nefcute n cadrul


seminarului, sau metode de rezolvare diferite de cele fcute n clas
pentru anumite probleme.
Unde am pus comentariul // TO DO, voi completa dac i cnd
voi avea timp.

Pe msur ce studiai acest fiier, v rog s completai chestionarul de


feedback de la adresa (http://bit.ly/feedback_pdf_CC_2015).
V mulumesc!
MN

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
~ Seminar 1 ~ ...................................................................................................................... 7
(recapitulare LFA) .......................................................................................................... 7
~ Seminar 2 ~ ...................................................................................................................... 7
(Maini Turing) ............................................................................................................... 7
Problema 1 ...................................................................................................................... 8
Se d un numr natural x (n baza 1). S se deplaseze cu patru poziii spre dreapta. . 8
Problema 2 .................................................................................................................... 10
Se dau dou numere naturale x i y. S se calculeze suma lor. ................................ 10
(*) Problema 2 [Rezolvare pe 2 benzi] ..................................................................... 12
Problema 3 .................................................................................................................... 14
Se dau dou numere naturale x i y. S se calculeze modulul diferenei lor. ........... 14
(*) Problema 3 [Rezolvare pe 3 benzi] ..................................................................... 17
~ Seminar 3 ~ .................................................................................................................... 20
(*) Problema 4............................................................................................................... 20
S se accepte cuvintele din limbajul L = {a 2 n b n | n 1} . .......................................... 20
(*) Problema 4 [Rezolvare pe 2 benzi] ..................................................................... 21
Problema 5 .................................................................................................................... 22
S se accepte cuvintele din limbajul L = {a n b m c 2 n | n > m 1} . .............................. 22
(*) Problema 5 [Rezolvare pe 2 benzi] ..................................................................... 25
Problema 6 .................................................................................................................... 27
Se dau dou numere naturale x i y. S se calculeze produsul lor (x*y). ................. 27
(*) Problema 6 [Rezolvare pe 3 benzi] ..................................................................... 29
Problema 7 .................................................................................................................... 32
Se dau dou numere naturale x i y. S se calculeze ctul (x/y) i restul (x%y). ..... 32
(*) Problema 7 [Rezolvare pe 3 benzi] ..................................................................... 34
~ Seminar 4 ~ .................................................................................................................... 38
Problema 8 .................................................................................................................... 38
S se accepte cuvintele din limbajul L = {w {a, b, c}* , | w |a =| w |b =| w |c > 0} . ....... 38
Rezolvarea (A) .......................................................................................................... 38
Rezolvarea (B) .......................................................................................................... 40
(*) Problema 8 [Rezolvare pe 4 benzi] ..................................................................... 41
Problema 9 .................................................................................................................... 43
S se accepte numerele x de forma 2k, k numr natural. .......................................... 43
Rezolvarea (A) (cu mpriri) ................................................................................... 43
(*) Rezolvarea (B) (cu nmuliri) .............................................................................. 44
(*) Rezolvarea (B) (cu nmuliri) [pe 2 benzi] .......................................................... 46
Problema 10 .................................................................................................................. 48
Se d un numr n baza 1. S se transforme n baza 2. ............................................. 48
Rezolvarea (A) (cu resturi) ....................................................................................... 48
(*) Rezolvarea (A) (cu resturi) [pe 2 benzi] ............................................................. 51
Rezolvarea (B) (cu adunri) ..................................................................................... 54

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
(*) Rezolvarea (B) (cu adunri) [pe 2 benzi] ........................................................... 55
(*) Problema 11............................................................................................................. 57
Se dau dou numere naturale x i y. S se calculeze ridicarea la putere (y^x). ........ 57
~ Seminar 5 ~ .................................................................................................................... 62
Problema 12 .................................................................................................................. 62
Se d un numr natural x. S se calculeze x ....................................................... 62
Rezolvarea (A) (prin ncercri) [pe 2 benzi] ............................................................ 62
(*) Rezolvarea (B) (cu sum de nr. impare) [pe 2 benzi] ......................................... 64
Problema 13 .................................................................................................................. 66
Se dau x i y nr. nat. S se calculeze cmmdc(x,y). ................................................... 66
Rezolvarea (A) (cu alg. Euclid cu resturi) [pe 3 benzi] // TO DO ................... 66
Problema 14 .................................................................................................................. 66
Se d x nr. nat. S se accepte dac este numr prim. ................................................ 66
Rezolvarea (A) (cu divizori de la 2 la x/2) [pe 2 benzi] // TO DO ................... 66
(*) Rezolvarea (B) (cu Ciurul lui Eratostene) [pe 2 benzi] // TO DO ............. 66

~ Seminar 6 ~ .................................................................................................................... 67
(Programe standard) ...................................................................................................... 67
Problema 1 : Y X .................................................................................................... 67
Problema 2 : Y X 1 + X 2 .......................................................................................... 68
Problema 3 : Y X 1 * X 2 ........................................................................................... 69
1, dac X 1 = X 2
Problema 4 : Y f = ( X 1 , X 2 ) =
................................................... 70
0, dac X 1 X 2
1, dac X par
Problema 5 : Y f2 ( X ) =
......................................................... 71
0, dac X impar
1, dac X 1 < X 2
Problema 6 : Y f < ( X 1 , X 2 ) =
.................................................... 72
0, dac X 1 X 2
1, dac X 1 X 2
Problema 7 : Y f ( X 1 , X 2 ) =
.................................................... 73
0, dac X 1 > X 2
Problema 8 : Y X 1 X 2 .......................................................................................... 74
~ Seminar 7 ~ .................................................................................................................... 76
X
Problema 9 : Y X 1 2 ................................................................................................ 76
Problema 10 : Y1 X 1 / X 2 , Y2 = X 1 % X 2 ............................................................ 77
Problema 11 : Y X ! ( factorial ) ............................................................................ 78
1, daca X = p. p.
Problema 12 : Y patrat _ perfect ( X ) =
.................................... 79
0, daca X p. p.

(*) Problema 13 : Y X ....................................................................................... 80


Problema 14 : Y al X ulea nr. din sirul Fibonacci ............................................. 81

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
1, daca X = X R
Problema 15 : Y palindrom ( X ) =
............................................. 82
R
0, daca X X
~ Seminar 8 ~ .................................................................................................................... 83
Y X , daca Y X
Problema 16 : Y Y X =
....................................................... 83
0, daca Y < X

(*) Problema 17 : Y Y + X ...................................................................................... 83


1, daca X 1 X 2
Problema 18 : Y f ( X 1 , X 2 ) =
...................................................... 84
0, daca X 1 / X 2
1, daca X = nr. prim
Problema 19 : Y nr _ prim ( X ) =
........................................ 84
0, daca X nr. prim
1, daca X = nr. perfect
Problema 20 : Y nr _ perfect ( X ) =
................................. 85
0, daca X nr. perfect
Problema 21 : Y log 2 ( X ) ...................................................................................... 86
Rezolvarea (A) (cu nmuliri cu 2) ............................................................................ 86
(*) Rezolvarea (B) (cu mpriri la 2)....................................................................... 86
Problema 22 : Y cmmmc( X 1 , X 2 ) ............................................................................ 88
~ Seminar 9 ~ .................................................................................................................... 89
(Funcii recursive) ......................................................................................................... 89
Funcii elementare ......................................................................................................... 89
succesor: s ( x) = x + 1 ................................................................................................ 89
constant: C k( n ) ( x1 , ... , xn ) = k ................................................................................... 89

proiecie: (kn ) ( x1 , ... , xn ) = xk .................................................................................. 89


Operaii ......................................................................................................................... 89
Compunere ................................................................................................................ 89
Recursivitate ............................................................................................................. 89
Minimizare nemrginit ............................................................................................ 90
Minimizare mrginit................................................................................................ 90
EXERCIII ................................................................................................................... 90
(1) f + ( x1 , x2 ) = x1 + x2 .................................................................................................. 90
(2) f * ( x1 , x2 ) = x1 * x2 ................................................................................................... 90
(3) f ^ ( x1 , x2 ) = x1 2 ........................................................................................................ 90
x

(4) f ( x) = a x , a const. ................................................................................................... 90


(5) f! ( x) = x!= 1 * 2 * 3 * ... * x ........................................................................................ 91
(6) f ( x) = 1 + 2 + 3 + ... + x ........................................................................................... 91
x 1, x > 0
(7) pred ( x) =
= x 1 ........................................................................... 91
x=0
0,

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
x x , x1 x2
(8) f ( x1 , x2 ) = 1 2
= x1 x2 ................................................................ 91
x1 < x2
0,
(9) f ( x1 , x2 ) = x1 x2 ................................................................................................. 91
x , daca x1 x2
(10) f max ( x1 , x2 ) = 1
........................................................................... 91
x2 , altfel
x , daca x1 x2
(11) f min ( x1 , x2 ) = 1
............................................................................ 91
x2 , altfel

1, daca x = par
(12) par ( x ) =
................................................................................. 92
0, daca x = impar
1, daca x = impar
(13) impar ( x ) =
............................................................................. 92
0, daca x = par
Predicate........................................................................................................................ 92
0, daca x > 0
= 1 x .................................................................................. 92
(x ) =
1, daca x = 0
1, daca x1 = x2
(14) f = ( x1 , x2 ) =
.................................................................................. 92
0, daca x1 x2
1, daca x1 x2
(15) f ( x1 , x2 ) =
.................................................................................. 92
0, daca x1 > x2
1, daca x1 x2
(16) P ( x1 , x2 ) =
este divizibil ........................................................... 94
0, daca x1 / x2
1, daca x1 | x2
(17) P| ( x1 , x2 ) =
divide ..................................................................... 94
0, daca x1 /| x2
1, daca x = nr. prim
(18) prim( x ) =
............................................................................ 94
0, daca x nr. prim
1, daca x = patrat perfect
(19) patrat _ perfect ( x ) =
............................................... 94
0, daca x patrat perfect
1, daca x = numar perfect
(20) numar _ perfect ( x ) =
.............................................. 94
0, daca x numar perfect
x
(21) f / ( x1 , x2 ) = 1 .................................................................................................... 94
x2
(22) f % ( x1 , x2 ) = x1 % x2 ................................................................................................. 94
~ Seminar 10 ~ .................................................................................................................. 95
(Recapitulare C&C) ...................................................................................................... 95
(23) f ( x) = 2 * x + 4 ..................................................................................................... 95

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
x

(24) f ( x) = (3 * k 2 ) ............................................................................................... 95
k =0

2 * x1 x2 , daca x1 x2
(25) f ( x1 , x2 ) =
.................................................................. 95
x2 + 3
>
,
x
daca
x
x
2
1
1

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 1 ~
(recapitulare LFA)

~ Seminar 2 ~
(Maini Turing)
MT = (Q, , , B, q0 , F , )
Q mulimea de stri
alfabetul de intrare
alfabetul benzii
( \ {B})
B ( \ ) " blank "
q0 Q starea iniial
F Q mulimea strilor finale
: (Q \ F ) Q ( \ {B}) {, , } funcia de tranziie (delta)

Obs: Pentru o main cu n benzi: : (Q \ F ) n Q ( \ {B}) n ({, , }) n


Funcia de tranziie are ca parametri de intrare:
- o stare de plecare, din mulimea Q \ F (adic din strile finale nu mai pleac tranziii) i
- un caracter citit de pe band, din mulimea .
Iar ca parametri de ieire:
- o stare de sosire, din mulimea Q,
- un caracter scris pe band, din mulimea \{B} (cu meniunea c avem voie s scriem B
doar peste B, adic la extremitile din stnga i dreapta ale datelor, nu peste alt
informaie existent) i
- o modalitate de deplasare pe band: un pas stnga, un pas dreapta sau staionare.

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

Problema 1
Se d un numr natural x (n baza 1). S se deplaseze cu patru poziii spre
dreapta.
Fie x = 5 (reprezentat prin 6 de 1). Iniial banda mainii Turing arat aa:
... B 1 1 1 1 1 1 B ...
La final, banda va arta astfel:
... B 0 0 0 0 1 1 1 1 1 1 B ...
Ideea de rezolvare:
Pas 1. Parcurgem tot numrul deplasndu-ne dreapta pn la B (blank).
(Adic ct timp citim 1 pe band, scriem 1 n loc i facem pas dreapta.)
(q 0 ,1) = (q 0 ,1, ) // pstrm aceeai stare pentru c vrem ca maina s poat aplica
aceast tranziie de oricte ori (pentru toi 1 din numr).
Pas 2. Cnd ajungem la B, scriem 4 de 1, fcnd de trei ori cte un pas dreapta, iar la
final unul spre stnga.
(Avem nevoie de cte o stare diferit pentru fiecare din cei 4 de 1 pe care trebuie s-i
scriem. De fiecare dat cnd ne deplasm spre dreapta vom citi de pe band B pentru c
suntem la finalul datelor de intrare i vom scrie 1 n loc.)
(q 0 , B) = (q1 ,1, )

(q1 , B) = (q 2 ,1, )
(q 2 , B) = (q3 ,1, )
(q3 , B) = (q 4 ,1, )
Pas 3. Parcurgem tot numrul (cei 4 de 1 adugai i apoi numrul iniial) deplasndu-ne
stnga pn la B.
(La fel ca la primul pas, trebuie s pstrm aceeai stare pentru a putea parcurge toi de
1 de pe band.)
(q 4 ,1) = (q 4 ,1, )
Pas 4. Cnd ajungem la B, facem un pas dreapta (pentru a ne poziiona pe primul 1), apoi
transformm primii 4 de 1 n 0 fcnd de fiecare dat cte un pas dreapta.
(Vom folosi cte o stare nou pentru fiecare din cele 4 transformri de 1 n 0.)

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(q 4 , B) = (q5 , B, )
(q5 ,1) = (q6 ,0, )
(q6 ,1) = (q7 ,0, )
(q7 ,1) = (q8 ,0, )
(q8 ,1) = (q9 ,0,)
Pas 5. Opional, mergem stnga pn la B, apoi facem un pas dreapta i ne oprim n
starea final (astfel nct capul de citire s rmn poziionat pe primul caracter diferit de
B de pe band, unde era iniial).

(q9 ,0) = (q9 ,0, )


(q9 , B ) = (q10 , B, ), F = {q10 }
OBS: Am observat c n softul JFLAP trebuie s facei asta pentru a v afia corect dac
testai cu opiunea Input Multiple Run (Transducer).
Complexitatea spaiu:
n plus fa de numrul dat adugm pe band (unde erau blank-uri) 4 caractere (la pasul
2). Rezult C.S. = x+4.
Complexitatea timp:
Pas 1: Parcurgem tot numrul iniial, deci x pai pe band.
Pas 2: Scriem cei 4 de 1, deci 4 pai.
Pas 3: Parcurgem ce am scris plus numrul iniial, deci 4+x pai.
Pas 4: Scriem cei 4 de 0, deci 4 pai.
Pas 5: Parcurgem cei 4 de 0 spre stnga, deci 4 pai.
Total: x+4+4+x+4+4 = 2x+16, rezult C.T. = O(x).
Aceeai soluie, sub form de graf:

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

Problema 2
Se dau dou numere naturale x i y. S se calculeze suma lor.
Fie x = 2, y = 3 (reprezentate prin 3, respectiv 4 de 1). Iniial banda arat aa:
... B 1 1 1 0 1 1 1 1 B ...
La final, banda va arta astfel:
... B 1 1 1 0 1 1 1 1 2 1 1 1 1 1 1 B ...
Ideea de rezolvare:
Pas 1. Marcm primul 1 din x, ne deplasm dreapta pn la 0 (unde schimbm starea ca
s tim c am ajuns pe y), marcm primul 1 din y, ne deplasm dreapta pn la B, scriem
2, pas dreapta, scriem 1, pas stnga.

(q0 ,1) = (q1 ,1' , ) // marcam din x


(q1 ,1) = (q1 ,1, ) // parcurgem tot x
(q1 ,0) = (q2 ,0, )
(q2 ,1) = (q3 ,1' , ) // marcam din y
(q3 ,1) = (q3 ,1, ) // parcurgem tot y
(q3 , B) = (q4 ,2, )
(q4 , B) = (q5 ,1, )
Pas 2. Ne deplasm stnga pn la 1 din x, apoi pas dreapta.
(Iniial parcurgem n aceeai stare 2-ul i toi de 1 din y i 1 din y, apoi pentru 0
schimbm starea ca s tim c am ajuns pe x, apoi parcurgem toi 1 din x cu aceeai
stare, iar pentru 1 din x schimbm starea i facem pas dreapta.)
(q5 ,2) = (q5 ,2, )

(q5 ,1) = (q5 ,1, ) // parcurgem y


(q5 ,1' ) = (q5 ,1' , )
(q5 ,0) = (q6 ,0, )
(q6 ,1) = (q6 ,1, ) // parcurgem x
(q6 ,1' ) = (q7 ,1' , )
Pas 3. Pentru fiecare 1 nemarcat din x, l marcm, ne deplasm dreapta pn la B, scriem
1, ne deplasm stnga pn la 1 din x, pas dreapta i relum pasul 3.
Cnd ntlnim 0 (adic toi de 1 din x sunt marcai), facem doi pai dreapta pentru a sri
0-ul i 1-ul din y.
(q7 ,1) = (q8 ,1' , ) // marcam din x

(q8 , a) = (q8 , a, ), a {1,0,1' ,2} // parcurgem tot pana la B


(q8 , B) = (q9 ,1, ) // scriem pt x
10

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(q9 , b) = (q9 , b, ), b {1,2,1' } // parcurgem tot pana la 0


(q9 ,0) = (q10 ,0, )
(q10 ,1) = (q10 ,1, ) // parcurgem x nemarcat
(q10 ,1' ) = (q7 ,1' , ) // reluam pas 3
(q7 ,0) = (q11 ,0, ) // x complet marcat
(q11 ,1' ) = (q12 ,1' , )
Pas 4. Pentru fiecare 1 nemarcat din y, l marcm, ne deplasm dreapta pn la B, scriem
1, ne deplasm stnga pn la 1 din y, pas dreapta i relum pasul 4.
Cnd ntlnim 2 (adic toi de 1 din y sunt marcai), facem un pas stnga i mergem la
pasul urmtor.

(q12 ,1) = (q13 ,1' , ) // marcam din y


(q13 , c) = (q13 , c), c {1,2} // parcurgem tot pana la B
(q13 , B) = (q14 ,1, ) // scriem pt y
(q14 , c) = (q14 , c, ) // parcurgem tot pana la 1' din y
(q14 ,1' ) = (q12 ,1' , ) // reluam pas 4
(q12 ,2) = (q15 ,2, ) // y complet marcat
Pas 5. Opional, parcurgem spre stnga toat banda: demarcm tot y-ul, l srim pe 0,
demarcm tot x-ul, apoi cnd ajungem la B facem un pas dreapta i ne oprim n starea
final.

(q15 ,1') = (q15 ,1, )


(q15 ,0) = (q15 ,0, )
(q15 , B ) = (q16 , B, ), F = {q16 }
Complexitatea spaiu:
Avem datele iniiale x i y, plus rezultatul pe care l-am scris, adic x+y.
Rezult C.S. = 2(x+y) (+2 pt. delimitatori)
Complexitatea timp:
Pas 1: Parcurgem numerele iniiale plus scriem la final 2 caractere, rezult x+1+y+2 pai.
Pas 2: Parcurgem banda napoi spre stnga pn la primul caracter, rezult aproximativ
y+x pai.
Pas 3: Se repet de x ori (pentru fiecare 1 din x) i de fiecare dat parcurgem dus-ntors
o distan egal cu aproximativ x+y, apoi doi pai la dreapta, rezult x*2(x+y)+2 pai.
Pas 4: Se repet de y ori (pentru fiecare 1 din y) i de fiecare dat parcurgem dus-ntors
o distan egal cu aproximativ y+x (x-ul copiat la pasul 3), rezult y*2(y+x) pai.
Pas 5: Parcurgem toat banda iniial, adic y+x pai.
Total: x+1+y+2+y+x+x*2(x+y)+2+y*2(y+x)+(y+x), rezult C.T. = O((x+y)2).

11

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:
(pentru marcare am folosit x n loc de 1 pentru c softul permite doar introducerea unui
singur caracter)

Obs.: Strile q9 i q10 fac exact ce fac i q5 respectiv q6, deci mai eficient ar fi fost ca
tranziia din q8 s o ducem spre q5 i s nu avem strile q9 i q10. E posibil ca la unele
grupe s fi fcut varianta mai eficient i la altele pe aceasta, nu mai tiu exact. Oricum,
putei s le testai pe amndou.

(*) Problema 2 [Rezolvare pe 2 benzi]


Enun: Se dau dou numere naturale x i y. S se calculeze suma lor.
Fie x = 2, y = 3 (reprezentate prin 3, respectiv 4 de 1). Iniial benzile arat aa:
x, y
B 1 1 1 0 1 1 1 1 B
B B B B B B B B B B
La final, benzile vor arta astfel:
x, y
B 1 1 1 0 1
x+y
B 1 1 1 1 1

1
1

1 1 B
B B B

12

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 1. Srim spre dreapta pentru primul 1 din x. Apoi ct timp citim 1 din x pe prima
band i B pe banda a doua, scriem 1 pe banda a doua i facem un pas dreapta pe ambele
benzi.
Pas 2. Cnd citim 0 pe prima band scriem 1 pe banda a doua (cel n plus de la scrierea
special n unar) i pas dreapta pe ambele benzi.
Pas 3. Srim spre dreapta pe prima band pentru primul 1 din y. Apoi ct timp citim 1 din
y pe prima band i B pe banda a doua, scriem 1 pe banda a doua i facem un pas dreapta
pe ambele benzi.
Pas 4. Cnd citim B pe ambele benzi, facem un pas stnga pe amndou.
Apoi parcurgem spre stnga ambele benzi ct timp citim 1 din y pe prima band.
Apoi, cnd dm de 0 pe prima band i de 1 sau B pe a doua band, facem un pas stnga
pe prima band i un pas dreapta pe a doua band.
Pentru c pe prima band sunt cu 2 csue mai multe ocupate dect pe a doua, vom avea
un numr egal de 1-uri de parcurs spre stnga pe ambele benzi.
Cnd ajungem la B pe ambele benzi, facem un pas dreapta i mergem n stare final.

q0 , = q1 , , // pas 1
B B

q1 , = q1 , ,
1
B

0 0
q1 , = q2 , , // pas 2
B 1
1 1

q2 , = q3 , , // pas 3
B B

q3 , = q3 , ,
1
B

q3 , = q4 , , // pas 4
B
B

1 1
q4 , = q4 , ,
1 1
0 0
q4 , = q4 , ,
1 1

q4 , = q4 , ,
B
B

B B
q4 , = q5 , , , F = {q5 }
B B

Complexitatea spaiu:
Avem datele iniiale x i y pe prima band,
plus rezultatul pe care l-am scris pe banda a
doua, adic x+y. Rezult C.S. = 2(x+y)
Complexitatea timp:
(pas1) x + (pas2) 1 + (pas3) y + (pas4)
(1+y+1+x+1) = 2*x + 2*y + 4.
Rezult. C.T. = O(x+y).
Aceeai soluie, sub form de graf:

13

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

Problema 3
Se dau dou numere naturale x i y. S se calculeze modulul diferenei lor.
Fie x = 5, y = 2 (reprezentate prin 6, respectiv 3 de 1). Iniial banda arat aa:
... B 1 1 1 1 1 1 0 1 1 1 B ...
La final, banda va arta astfel:
... B 1 1 1 1 1 1 0 1 1 1 2 1 1 1 1 B ...
Ideea de rezolvare:
Pas 1. Marcm primul 1 din x, ne deplasm dreapta pn la 0 (unde schimbm starea ca
s tim c am ajuns pe y), marcm primul 1 din y, ne deplasm dreapta pn la B, scriem
2, pas dreapta, scriem 1, pas stnga.
Pas 2. Ne deplasm stnga pn la 1 din x, apoi pas dreapta.
(Iniial parcurgem n aceeai stare 2-ul i toi de 1 din y i 1 din y, apoi pentru 0
schimbm starea ca s tim c am ajuns pe x, apoi parcurgem toi 1 din x cu aceeai
stare, iar pentru 1 din x schimbm starea i facem pas dreapta.)
// pas 1
// pas 2
(q0 ,1) = (q1 ,1' , ) // marcam din x
(q5 ,2) = (q5 ,2, )
(q1 ,1) = (q1 ,1, ) // parcurgem tot x
(q5 ,1) = (q5 ,1, ) // parcurgem y
(q1 ,0) = (q2 ,0, )
(q5 ,1' ) = (q5 ,1' , )
(q2 ,1) = (q3 ,1' , ) // marcam din y
(q5 ,0) = (q6 ,0, )
(q3 ,1) = (q3 ,1, ) // parcurgem tot y
(q6 ,1) = (q6 ,1, ) // parcurgem x
(q3 , B) = (q4 ,2, )
(q6 ,1' ) = (q7 ,1' , )
(q4 , B) = (q5 ,1, )
Pas 3. Marcm alternativ cte un 1 din x i un 1 din y ct timp este posibil.
Dac ntlnim 0 (adic toi de 1 din x sunt marcai), nseamn c avem xy, deci mergem
la pasul 4a.
Dac ntlnim 2 (adic toi de 1 din y sunt marcai), nseamn c avem y<x, deci mergem
la pasul 4b.
(q7 ,1) = (q8 ,1' , ) // marcam din x

(q8 ,1) = (q8 ,1, ) // parcurgem x nemarcat


(q8 ,0) = (q9 ,0, )
(q9 ,1' ) = (q9 ,1' , ) // parcurgem y marcat
(q9 ,1) = (q10 ,1' , ) // marcam din y
(q10 ,1' ) = (q10 ,1' , ) // parcurgem y marcat
(q10 ,0) = (q6 ,0, )
(Am definit anterior n q6 parcurgerea lui x nemarcat, iar la citirea lui 1 mutarea in q7,
deci reluarea pasului 3.)
14

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 4a. Capul de citire e poziionat pe 0 i trebuie s copiem rezultatul de la finalul lui y.
Parcurgem spre dreapta toi de 1 din y.
Apoi pentru fiecare 1 nemarcat din y, l marcm, ne deplasm dreapta pn la B, scriem
1, ne deplasm stnga pn la 1 din y, pas dreapta i relum copierea.
(q7 ,0) = (q11 ,0, ) // x complet marcat , x y

(q11 ,1' ) = (q11 ,1' , ) // parcurgem y marcat


(q11 ,1) = (q12 ,1' , ) // marcam din y x
(q12 , a) = (q12 , a, ), a {1,2} // parcurgem tot pana la B
(q12 , B) = (q13 ,1, )
(q13 , a) = (q13 , a, ) // parcurgem tot pana la 1' din y
(q13 ,1' ) = (q11 ,1' , ) // reluam copierea din y x
(q11 ,2) = (q14 ,2, ) // si y complet marcat
Pas 4b. Capul de citire e poziionat pe 2. Mergem la finalul benzii i scriem un 1 (pentru
1-ul din x pe care l marcasem deja i pentru care nu am mai gsit corespondent n y) i
trebuie s copiem rezultatul de la finalul lui x, deci ne deplasm stnga pn la 1 din x i
facem un pas dreapta.
Apoi pentru fiecare 1 nemarcat din x, l marcm, ne deplasm dreapta pn la B, scriem
1, ne deplasm stnga pn la 1 din x, pas dreapta i relum copierea.
(q9 ,2) = (q15 ,2, ) // y complet marcat , y < x

(q15 ,1) = (q15 ,1, )


(q15 , B) = (q16 ,1, ) // pt ce marcasem deja in x
(q16 , b) = (q16 , b), b {1,2,1'} // parcurgem tot pana la 0
(q16 ,0) = (q17 ,0, )
(q17 ,1) = (q17 ,1, ) // parcurgem x nemarcat
(q17 ,1' ) = (q18 ,1' , )
(q18 ,1) = (q19 ,1' , ) // marcam din x y
(q19 , c) = (q19 , c, ), c {1,0,1' ,2} // parcurgem tot pana la B
(q19 , B) = (q16 ,1, ) // reluam copierea din x y
(q18 ,0) = (q20 ,0, ) // si x complet marcat
Pas 5. (Opional) Dac am aplicat pasul 4b, mergem dreapta pn la 2, apoi un pas stnga
(dac am aplicat pasul 4a, suntem deja cu o poziie n stnga lui 2).
Apoi parcurgem toat banda spre stnga i demarcm numerele y i x.
(q14 ,1' ) = (q14 ,1, ) // demarcam y si x
(q20 ,1' ) = (q20 ,1' , )
(q14 ,0) = (q14 ,0, )
(q20 ,2) = (q14 ,2, )
(q14 , B) = (q21 , B, ), F = {q21 }

15

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Complexitatea spaiu:
Avem datele iniiale x i y, plus rezultatul pe care l-am scris, adic |x-y|.
Rezult C.S. = x+y+|x-y| = 2 * max{x, y}.
Complexitatea timp:
Pas 1: Parcurgem numerele iniiale plus scriem la final 2 caractere, rezult x+1+y+2 pai.
Pas 2: Parcurgem banda napoi spre stnga pn la primul caracter, rezult y+x pai.
Pas 3: Se repet de min{x,y} ori (pn ce este complet marcat unul dintre numere, adic
cel mai mic dintre ele) i de fiecare dat parcurgem dus-ntors distana x, rezult
aproximativ min{x,y} * x pai.
Pas 4a: Parcurgem min{x,y} (pentru ca suntem pe 0 i parcurgem toat partea marcat
din y). Apoi de |x-y| ori parcurgem dus-ntors distana de |x-y| (pentru a copia diferena
aflat la finalul lui y la finalul benzii). Rezult min{x,y} + |x-y| * |x-y| pai.
Pas 4b: Parcurgem y+|x-y|=max{x,y} (de la finalul benzii pn la 1 din x). Apoi de |x-y|
ori parcurgem dus-ntors distana y+|x-y|=max{x,y}. Rezult max{x,y} + |x-y| *
max{x,y} pai.
Pas 5: Parcurgem maxim y+x pai.
Total: pas1+pas2+pas3+max{pas4a,pas4b}+pas5 (max{x,y})2 => C.T. = (max{x,y})2.
Aceeai soluie, sub form de graf:

16

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(*) Problema 3 [Rezolvare pe 3 benzi]


Enun: Se dau dou numere naturale x i y. S se calculeze modulul diferenei lor.
Fie x = 5, y = 2 (reprezentate prin 6, respectiv 3 de 1). Iniial benzile arat aa:
x, y
B 1 1 1 1 1 1 0 1 1 1 B
B B B B B B B B B B B B
B B B B B B B B B B B B
La final, benzile vor arta astfel:
x, y
B 1 1 1 1 1 1 0 1 1 1 B
|x y|
B 1 1 1 1 B B B B B B B
x
B 1 1 1 1 1 1 B B B B B
Pas 1. Copiem numrul x de pe prima band pe a treia (ne asigurm c numrul x conine
cel puin un 1, de aceea schimbm starea pentru primul 1; apoi ct timp citim 1 pe prima
band scriem 1 pe a treia band i facem simultan un pas dreapta pe acele dou benzi).
Cnd ajungem pe 0, pe prima band facem un pas dreapta, iar pe a treia band facem un
pas stnga (astfel ne vom poziiona pe primul 1 din y pe prima band i pe ultimul 1 din
copia lui x pe a treia band).
Pas 2. Comparm x i y (ne asigurm c numrul y conine cel puin un 1, de aceea
schimbm starea pentru primul 1; apoi ct timp citim 1 din y pe prima band facem un
pas dreapta, n timp ce pe banda a treia citim 1 din copia lui x i facem un pas stnga).
// Pas 1
1 1

q 0 , B = q1 , B ,
// Pas 2
B 1

1 1

1 1

q 2 , B = q3 , B ,
q1 , B = q1 , B , // copiem x

1 1

B 1

1 1

0
0

q3 , B = q3 , B , // comparam y cu copia lui x


q1 , B = q 2 , B ,

1 1
B B

Pas 3. (a) Dac x > y, pe prima band citim B i stm pe loc, pe a treia band citim 1 i
facem un pas stnga, iar pe banda a doua nlocuim un B cu 1 i facem un pas stnga.
Apoi ct timp citim 1 pe banda a treia, scriem 1 pe banda a doua i facem un pas stnga
pe aceste dou benzi. Cnd ajungem la B pe a treia band stm pe loc, iar pe banda a
doua adugm un ultim 1 (pentru scrierea special n unar) i facem un pas stnga.
17

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 3. (b) Dac x = y, pe prima band citim B i facem un pas stnga, pe a treia band
citim tot B i stm pe loc, iar pe a doua band adugm un 1 (cel n plus de la scrierea n
unar, reprezentnd rezultatul zero) i facem un pas stnga.
Pas 3. (c) Dac x < y, pe a treia band citim B i stm pe loc, pe prima band citim 1 i
facem un pas dreapta, iar pe banda a doua nlocuim B cu 1 i facem un pas stnga. Apoi
ct timp citim 1 pe prima band mergem spre dreapta, iar pe a doua band adugm cte
un 1 i mergem spre stnga. Cnd ajungem la B pe prima band facem un pas stnga, iar
pe banda a doua adugm 1-ul n plus pentru scrierea n unar i facem un pas stnga.
// Pas 3 (a )

// Pas 3 (c)

B B

q3 , B = q 4 , 1 ,
1
1


// copiem rezultatul

1
1

q3 , B = q6 , 1 ,
B B

// copiem rezultatul

B B

q4 , B = q4 , 1 ,

1
1

// scriem 1 ul in plus
B B

q 4 , B = q5 , 1 ,
B B

// Pas 3 (b)
// scriem 1 ul in plus
B B

q3 , B = q5 , 1 ,
B B

1
1

q6 , B = q6 , 1 ,

B B
// scriem 1 ul in plus
B B

q6 , B = q5 , 1 ,

B B

Pas 4. Parcurgem spre stnga prima band pn ajungem la B (pe a doua i a treia band
deja eram pe B-ul de la nceput). Apoi facem un pas dreapta pe toate cele trei benzi
pentru a ne poziiona pe primele caractere i mergem n stare final.
// Pas 4
1 1

q5 , B = q5 , B ,
B B

0 0

q5 , B = q5 , B ,
B B

B B

q5 , B = q7 , B , , F = {q7 }
B B

18

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Complexitatea spaiu:
Pe prima band avem x+y, pe a treia avem copia lui x, iar pe a doua avem |x-y|.
Rezult C.S. = 2*x + y + |x-y|.
Complexitatea timp:
Pas 1: Parcurgem simultan benzile 1 i 3 pentru copierea lui x, adic x pai.
Pas 2: Parcurgem simultan benzile 1 i 3 pn cnd y sau copia lui x se termin, rezult
min{x,y} pai.
Pas 3: Copiem din banda 1 sau 3 pe banda 2 rezultatul, adic |x-y| pai.
Pas 4: Parcurgem toata banda 1, adic x+y pai.
Total: x + min{x,y} + |x-y| + (x+y) = x + max{x,y} + x+y. Rezult C.T. = O(max{x,y}).
Aceeai soluie, sub form de graf:

19

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 3 ~
(*) Problema 4
S se accepte cuvintele din limbajul L = {a 2 n b n | n 1} .
Fie n = 2. Iniial banda mainii Turing arat aa:
... B a a a a b b B ...
La final, banda va arta astfel:
... B a a a a b b B ...
Ideea de rezolvare:
Pas 1. Marcm doi de a, ne deplasm dreapta (srind a-urile nemarcate i b-urile marcate)
pn la b, marcm un b, ne deplasm stnga (srind b-urile marcate i a-urile nemarcate)
pn la a, pas dreapta i relum acest pas.

(q0 , a) = (q1 , a' , ) // marcam primul a


(q1 , a) = (q2 , a' , ) // marcam al doilea a
(q2 , a) = (q2 , a, ) // parcurgem a urile nemarcate
(q2 , b' ) = (q2 , b' , ) // parcurgem b urile marcate
(q2 , b) = (q3 , b' , ) // marcam un b
(q3 , b' ) = (q3 , b' , ) // parcurgem b urile marcate
(q3 , a) = (q3 , a, ) // parcurgem a urile nemarcate
(q3 , a' ) = (q0 , a' , ) // reluam pasul 1
Pas 2. Cnd toi de a sunt marcai, verificm ca toi de b s fie marcai. Dac da,
acceptm intrarea.

(q0 , b' ) = (q4 , b' , ) // toate a urile sunt marcate


(q4 , b' ) = (q4 , b' , ) // parcurgem b urile marcate
(q4 , B) = (q5 , B, ) // toate b urile sunt marcate
Pas 3. (Opional) Parcurgem toat banda spre stnga i demarcm toi b i a.

(q5 , b' ) = (q5 , b, )


(q5 , a' ) = (q5 , a, )
(q5 , B) = (q6 , B, ), F = {q6 }
Complexitatea spaiu:
Avem cuvntul iniial i nu scriem nimic n plus. Rezult C.S. = |w| a +|w| b = |w|.

20

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Complexitatea timp:
Pas 1: Se repet pn terminm de marcat toate a-urile (marcnd cte dou la fiecare pas)
sau toate b-urile (marcnd cte unul la fiecare pas), deci de min{|w| a :2, |w| b } ori. Iar
distana parcurs dus-ntors de fiecare dat (pentru a marca doi de a i un b) scade cu cte
o unitate la fiecare aplicare a pasului (captul din stnga se deplaseaz spre dreapta cu
dou poziii pentru c marcm dou a-uri, dar captul din dreapta se deplaseaz spre
dreapta doar cu o poziie pentru c marcm un singur b), deci cea mai mare distan
parcurs este la prima aplicare a pasului i este de |w| a csue (distana de la primul a la
primul b). Rezult min{|w| a :2, |w| b } * 2 * |w| a .
Pas 2: Pentru a verifica dac intrarea trebuie acceptat, parcurgem toate b-urile marcate,
adic |w| a :2 (= |w| b dac intrarea era corect).
Pas 3: Parcurgem toat banda iniial, adic |w| pai.
Rezult C.T. = min{|w| a : 2, |w| b } * 2 * |w| a + |w| a : 2 + |w| => O(|w|2).
Aceeai soluie, sub form de graf:
(pentru marcarea a-urilor am folosit x, iar pentru marcarea b-urilor am folosit y)

(*) Problema 4 [Rezolvare pe 2 benzi]


Enun: S se accepte cuvintele din limbajul L = {a 2 n b n | n 1} .
Fie n = 2. Iniial benzile mainii Turing arat aa:
B a a a a b b B
B B B B B B B B
La final, benzile vor arta astfel:
B a a a a b b B
B a a B B B B B
Pas 1. Parcurgem spre dreapta toi de a de pe prima band, iar pentru fiecare al doilea
a de pe prima band adugm un a pe a doua band i facem pas dreapta.
Pas 2. Cnd dm de b pe prima band stm pe loc, iar pe a doua band facem un pas
stnga. Apoi parcurgem simultan prima band spre dreapta citind b-uri i a doua band

21

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
spre stnga citind a-uri. Dac dm de B simultan pe ambele benzi (cuvntul este
corect), pe prima band facem un pas stnga, iar pe a doua band stm pe loc.
Pas 3. (Opional) Parcurgem spre stnga prima band pn la B, apoi facem un pas
dreapta pe ambele benzi pentru a ne poziiona la nceputul lor.

q0 , = q1 , , // pas 1
B B
q1 , = q0 , ,
B
a

q0 , = q2 , , // pas 2
B
B
q2 , = q2 , ,
a
a

q2 , = q3 , , // cuvant corect
B B
q3 , = q3 , , // pas 3
B B
q3 , = q3 , ,
B B
q3 , = q4 , , , F = {q4 }
B
B

Complexitatea spaiu:
Avem cuvntul iniial i scriem n plus |w| a :2. Rezult C.S. = |w| + |w| a :2.
Complexitatea timp:
Pas 1: Parcurgem toi de a din cuvnt, adic |w| a pai.
Pas 2. Parcurgem simultan |w| b i |w| a :2 pan ajungem la B, adic min{|w| b , |w| a :2} pai.
Pas 3. Parcurgem tot cuvntul, adic |w| pai.
Total: |w| a + min{|w| b , |w| a :2} + |w|. Rezult C.T. = O(|w|).
Aceeai soluie, sub form de graf:

Problema 5
S se accepte cuvintele din limbajul L = {a n b m c 2 n | n > m 1} .
Fie n = 3, m = 2. Iniial banda mainii Turing arat aa:
... B a a a b b c c c c c c B ...
La final, banda va arta astfel:
... B a a a b b c c c c c c B ...

22

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Ideea de rezolvare:
Pas 1. Marcm un a, ne deplasm dreapta (srind a-urile nemarcate i b-urile marcate)
pn la b, marcm un b, ne deplasm dreapta (srind b-urile nemarcate i c-urile marcate)
pn la c, marcm doi de c, ne deplasm stnga (srind c-urile marcate, b-urile
nemarcate, b-urile marcate i a-urile nemarcate) pn la a, pas dreapta i relum acest
pas.

(q0 , a) = (q1 , a' , ) // marcam un a


(q1 , a) = (q1 , a, ) // parcurgem a urile nemarcate
(q1 , b' ) = (q1 , b' , ) // parcurgem b urile marcate
(q1 , b) = (q2 , b' , ) // marcam un b
(q2 , b) = (q2 , b, ) // parcurgem b urile nemarcate
(q2 , c' ) = (q2 , c' , ) // parcurgem c urile marcate
(q2 , c) = (q3 , c' , ) // marcam primul c
(q3 , c) = (q4 , c' , ) // marcam al doilea c
(q4 , c' ) = (q4 , c' , ) // parcurgem c urile marcate
(q4 , b) = (q4 , b, ) // parcurgem b urile nemarcate
(q4 , b' ) = (q4 , b' , ) // parcurgem b urile marcate
(q4 , a) = (q4 , a, ) // parcurgem a urile nemarcate
(q4 , a' ) = (q0 , a' , ) // reluam pasul 1
Pas 2. Cnd toate b-urile sunt marcate, trebuie s marcm dou c-uri (corespunztoare aului marcat deja nainte de a nu mai gsi un b pe care s-l marcm). Deci suntem pe
primul c de pe band (la finalul b-urilor marcate complet), parcurgem spre dreapta toate
c-urile marcate, pn ajungem la c, apoi marcm dou c-uri, ne deplasm stnga (srind
c-urile marcate, b-urile marcate i a-urile nemarcate) pn la a i facem un pas dreapta.

(q1 , c' ) = (q5 , c' , ) // toate b urile sunt marcate


(q5 , c' ) = (q5 , c' , ) // parcurgem c urile marcate
(q5 , c) = (q6 , c' , ) // marcam un c
(q6 , c) = (q7 , c' , ) // marcam al doilea c
(q7 , c' ) = (q7 , c' , ) // parcurgem c urile marcate
(q7 , b' ) = (q7 , b' , ) // parcurgem b urile marcate
(q7 , a) = (q7 , a, ) // parcurgem a urile nemarcate
(q7 , a' ) = (q8 , a' , )
Pas 3. Marcm un a, ne deplasm dreapta (srind a-urile nemarcate, b-urile marcate i curile marcate) pn la c, marcm doi de c, ne deplasm stnga (srind c-urile marcate, burile marcate i a-urile nemarcate) pn la a, facem un pas dreapta i relum acest pas.

23

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(q8 , a) = (q9 , a' , ) // marcam un a


(q9 , a) = (q9 , a, ) // parcurgem a urile nemarcate
(q9 , b' ) = (q9 , b' , ) // parcurgem b urile marcate
(q9 , c' ) = (q9 , c' , ) // parcurgem c urile marcate
(q9 , c) = (q10 , c' , ) // marcam un c
(q10 , c) = (q11 , c' , ) // marcam al doilea c
(q11 , c' ) = (q11 , c' , ) // parcurgem c urile marcate
(q11 , b' ) = (q11 , b' , ) // parcurgem b urile marcate
(q11 , a) = (q11 , a, ) // parcurgem a urile nemarcate
(q11 , a' ) = (q8 , a' , ) // reluam pasul 3
Pas 4. Cnd toate a-urile sunt marcate, verificm ca toate c-urile s fie marcate. Dac da,
acceptm intrarea. Deci suntem pe primul b de pe band (la finalul a-urilor complet
marcate), parcurgem spre dreapta toate b-urile marcate i c-urile marcate, iar apoi trebuie
s ntlnim B i s mergem n starea final.
(q8 , b' ) = (q12 , b' , ) // toate a urile sunt marcate

(q12 , b' ) = (q12 , b' , ) // parcurgem b urile marcate


(q12 , c' ) = (q12 , c' , ) // parcurgem c urile marcate
(q12 , B) = (q13 , B, ) // toate c urile sunt marcate, cuvant corect
Pas 5. (Opional) Parcurgem spre stnga demarcnd toat banda, iar la B facem dreapta.
(q13 , c' ) = (q13 , c, )

(q13 , b' ) = (q13 , b, )


(q13 , a ' ) = (q13 , a, )
(q13 , B ) = (q14 , B, ), F = {q14 }
Obs: Pasul 2 testeaz condiia n > m (s avem mai multe a-uri dect b-uri), iar pasul 4
verific s avem de dou ori mai multe c-uri dect a-uri.
Complexitatea spaiu:
Avem cuvntul iniial i nu scriem nimic n plus. Rezult C.S. = |w| a +|w| b +|w| c = |w|.
Complexitatea timp:
Pas 1: Se repet de maxim |w| b ori. Iar pentru a marca un a, un b i doi de c parcurgem
dus-ntors o distana mai mic dect lungimea benzii (Deplasarea cea mai mare este la
ultima aplicare a pasului, pentru c la fiecare aplicare distana crete cu o unitate. La
ultima aplicare se parcurg a-urile nemarcate, adic |w| a -|w| b , b-urile marcate, adic |w| b , i
c-urile marcate, adic 2*|w| b , deci n total aproximativ |w| a +2*|w| b ). Rezult |w| b * 2 *
(|w| a +2*|w| b ).
Pas 2: Se execut o singur dat. Parcurgem spre dreapta toate c-urile marcate i marcm
nc dou, adic 2*|w| b +2, apoi parcurgem spre stnga pn la a marcat, adic c-urile
24

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
marcate (2*|w| b ), b-urile marcate (|w| b ) i a-urile nemarcate (|w| a -|w| b ). Rezult
aproximativ |w| a +4*|w| b .
Pas 3: Se repet de |w| a -|w| b ori. La fel ca la pasul 1, distana crete cu cte o unitate de
fiecare dat i este aceeai ca la pasul 1 (de la primul a nemarcat pn la primul c
nemarcat). Rezult (|w| a -|w| b ) * 2 * (|w| a +2*|w| b ).
Pas 4: Se execut o singur dat. Suntem la finalul a-urilor marcate i parcurgem banda
pentru b-urile marcate (|w| b ) i c-urile marcate (2*|w| a ). Rezult |w| b +2*|w| a .
Pas 5: Parcurgem tot cuvntul, adic |w|.
Total: |w| b *2*(|w| a +2*|w| b ) + (|w| a +4*|w| b ) + (|w| a -|w| b )*2*(|w| a +2*|w| b ) + (|w| b +2*|w| a )
+ |w| |w|2 => C.T. = O(|w|2).
Aceeai soluie, sub form de graf:
(pentru marcarea a-urilor am folosit x, pentru marcarea b-urilor am folosit y, iar pentru
marcarea c-urilor am folosit z)

(*) Problema 5 [Rezolvare pe 2 benzi]


Enun: S se accepte cuvintele din limbajul L = {a n b m c 2 n | n > m 1} .
Fie n = 3, m = 2. Iniial benzile mainii Turing arat aa:
B a a a b b c c c c c c B
B B B B B B B B B B B B B
La final, benzile vor arta astfel:
B a a a b b c c c c c c B
B a a a B B B B B B B B B

25

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 1. Ct timp citim a pe prima band mergem spre dreapta, iar pe banda a doua
scriem a i mergem spre stnga. Apoi facem un pas dreapta pe banda a doua.
Pas 2. Parcurgem simultan spre dreapta b-urile de pe prima band i a-urile de pe a
doua band. Cnd dm de c pe prima band i nc avem a pe a doua band (pentru
c |w| a = n > m = |w| b ), pe prima band stm pe loc, iar pe a doua mergem n continuare
spre dreapta pn la B, apoi facem un pas stnga.
Pas 3. Parcurgem prima band spre dreapta i pentru fiecare al doilea c parcurgem spre
stnga cte un a de pe banda a doua. Dac dm de B simultan pe ambele benzi,
cuvntul trebuie acceptat (adic |w| c = 2* |w| a ).
Pas 4. (Opional) Parcurgem prima band spre stnga, iar cnd ajungem la B facem un
pas dreapta pe ambele benzi.

q0 , = q1 , , // pas 1
a
B

a a
q1 , = q1 , ,
B a
b b
q1 , = q2 , ,
B B

q2 , = q2 , , // pas 2
a
a

c c
q2 , = q3 , ,
a a
c c
q3 , = q3 , ,
a a

q3 , = q4 , ,
B
B

q4 , = q5 , , // pas 3
a a
q5 , = q4 , ,
a
a

B B
q4 , = q6 , ,
B B

q6 , = q6 , , // pas 4
B B
q6 , = q6 , ,
B B
q6 , = q6 , ,
B B
q6 , = q7 , , , F = {q7 }
B
B

Complexitatea spaiu:
Avem cuvntul iniial i scriem n plus |w| a . Rezult C.S. = |w| + |w| a .
Complexitatea timp:
(Pas 1) |w| a + (Pas 2) |w| a + (Pas 3) |w| c + (Pas 4) |w|. Rezult C.T. = O(|w|).
Aceeai soluie, sub form de graf:

26

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

Problema 6
Se dau dou numere naturale x i y. S se calculeze produsul lor (x*y).
Fie x = 2, y = 3 (reprezentate prin 3, respectiv 4 de 1). Iniial banda arat aa:
... B 1 1 1 0 1 1 1 1 B ...
La final, banda va arta astfel:
... B 1 1 1 0 1 1 1 1 2 1 1 1 1 1 1 1 B ...
Ideea de rezolvare:
Pas 1. Marcm primul 1 din x cu 1, ne deplasm dreapta (srind toi de 1 nemarcai din x
i delimitatorul 0), marcm primul 1 din y cu 1, ne deplasm dreapta (srind toi de 1
nemarcai din y) pan la B, scriem 2, facem un pas dreapta, scriem 1 (cel n plus pentru
rezultat), facem un pas stnga.
Ne deplasm stnga (srind 1-urile din rezultat, delimitatorul 2, 1-urile nemarcate din y,
1 din y, iar pentru 0 schimbm starea ca s tim c am ajuns pe x, apoi srim i 1-urile
nemarcate din x) pn la 1 din x, facem un pas dreapta.

(q0 ,1) = (q1 ,1' , ) // marcam 1 ul in plus din x


(q1 ,1) = (q1 ,1, ) // parcurgem x nemarcat
(q1 ,0) = (q2 ,0, )
(q2 ,1) = (q3 ,1' ' , ) // marcam 1 ul in plus din y
(q3 ,1) = (q3 ,1, ) // parcurgem y nemarcat
(q3 , B) = (q4 ,2, )
(q4 , B) = (q5 ,1, ) // scriem 1 ul in plus pt rezultat
(q5 ,2) = (q5 ,2, )
(q5 ,1) = (q5 ,1, ) // parcurgem y nemarcat
(q5 ,1' ' ) = (q5 ,1' ' , )
(q5 ,0) = (q6 ,0, )
(q6 ,1) = (q6 ,1, ) // parcurgem x nemarcat
(q6 ,1' ) = (q7 ,1' , )
Pas 2. (a) Pentru fiecare 1 nemarcat din x, l marcm cu 1, ne deplasm dreapta (srind
1-urile nemarcate din x, delimitatorul 0 i 1 din y) pn la 1 nemarcat din y i mergem
la pasul 3(i) (unde l copiem pe y, n afar de 1, la finalul benzii).

(q7 ,1) = (q8 ,1' , ) // marcam din x


(q8 ,1) = (q8 ,1, ) // parcurgem x nemarcat
(q8 ,0) = (q9 ,0, )
(q9 ,1' ' ) = (q10 ,1' ' , )

27

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 3. (i) Pentru fiecare 1 nemarcat din y, l marcm cu 1, ne deplasm dreapta (srind
1-urile nemarcate din y, delimitatorul 2 i 1-urile din rezultat) pn la B, scriem 1, ne
deplasm stnga (srind 1-urile din rezultat, delimitatorul 2 i 1-urile nemarcate din y)
pn la 1 din y, facem un pas dreapta i relum pasul 3(i).

(q10 ,1) = (q11 ,1' , ) // marcam din y


(q11 ,1) = (q11 ,1, ) // parcurgem y nemarcat si rezultatul
(q11 ,2) = (q11 ,2, )
(q11 , B) = (q12 ,1, ) // scriem pt rezultat
(q12 ,1) = (q12 ,1, ) // parcurgem rezultatul si y nemarcat
(q12 ,2) = (q12 ,2, )
(q12 ,1' ) = (q10 ,1' , ) // reluam pasul 3(i )
Pas 3. (ii) Cnd toi de 1 din y sunt marcai (am ajuns pe delimitatorul 2), ne deplasm
stnga i demarcm y, transformnd toi de 1 n 1 (1 rmne marcat). Apoi ne
deplasm stnga (srind 1 din y, schimbm starea pentru delimitatorul 0, apoi srin 1urile nemarcate din x) pn la 1 din x, facem pas dreapta i relum pasul 2(a).

(q10 ,2) = (q13 ,2, ) // y complet marcat , deci copiat


(q13 ,1' ) = (q13 ,1, ) // demarcam y ( fara 1' 'ul initial )
(q13 ,1' ' ) = (q14 ,1' ' , )
(q14 ,0) = (q6 ,0, ) // parcurgem in q6 x ul nemarcat apoi reluam pasul 2(a)
Pas 2. (b) Cnd toi de 1 din x sunt marcai, eventual demarcm tot ce e marcat pe band
(pentru ca ntr-adevr banda s rmn ca n desen, fr marcaje), apoi mergem n
starea final.

(q7 ,0) = (q15 ,0, ) // x complet marcat


(q15 ,1' ' ) = (q16 ,1, ) // demarcam 1' 'ul din y (restul din y e deja demarcat )
(q16 ,0) = (q17 ,0, )
(q17 ,1' ) = (q17 ,1, ) // demarcam tot x ul
(q17 , B) = (q18 , B, ), F = {q18 }
Complexitatea spaiu:
Avem numerele iniiale, doi delimitatori i rezultatul. Rezult C.S. = x+y+2 + x*y.
Complexitatea timp:
Pas 1: Se execut o singur dat. Parcurgem dus-ntors toat banda iniial i cele dou
caractere pe care le adugm. Rezult aproximativ 2*(x+y+3).
Pas 2(a): Se repet de x ori. Parcurgem maxim x csue i aplicm pasul 3. Rezult x * (x
+ pasul_3i + pasul_3ii).
28

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 3(i): Se repet de y ori (dar pentru fiecare 1 din x). Cea mai mare distan parcurs
este la ultima copiere a lui y, cnd trebuie s parcurgem dus-ntors tot rezultatul final,
adic x*y. Rezult y * 2 * x*y.
Pas 3(ii): Se execut o singur dat (dar pentru fiecare 1 din x). Parcurgem maxim y+x.
Pas 2(b): Se execut o singur dat. Parcurgem aproximativ x+3 csue.
Total: 2*(x+y+3) + x * [x + (y * 2 * x*y) + (y+x)] + x+3 => C.T. = O(x2y2).
Aceeai soluie, sub form de graf:
(pentru marcarea cu 1 am folosit a, iar pentru marcarea cu 1 am folosit b)

(*) Problema 6 [Rezolvare pe 3 benzi]


Enun: Se dau dou numere naturale x i y. S se calculeze produsul lor (x*y).
Fie x = 2, y = 3 (reprezentate prin 3, respectiv 4 de 1). Iniial benzile arat aa:
x, y B 1 1 1 0 1 1 1 1 B
B B B B B B B B B B
B B B B B B B B B B
La final, benzile vor arta astfel:
x, y B 1 1 1 0 1 1 1 1 B
x*y B 1 1 1 1 1 1 1 B B
x
B 1 1 B B B B B B B

29

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 1. Copiem numrul x (fr 1-ul n plus de la scrierea n unar) de pe prima band pe a
treia (ne asigurm c numrul x conine cel puin un 1, de aceea schimbm starea pentru
primul 1; (a) Apoi ct timp citim 1 i mergem spre dreapta pe prima band, scriem 1 i
mergem spre stnga pe a treia. (b) Dar dac dup primul 1 am avut 0, adic nu am avut ce
copia, atunci adugm un 1 pe banda a doua (x * y = 0) i parcurgem prima band spre
stnga pn la B apoi un pas dreapta i mergem n stare final).
Cnd ajungem pe 0, pe prima i a treia band facem un pas dreapta. Astfel ne vom
poziiona pe primul 1 din y pe prima band i pe primul 1 din copia lui x pe a treia band
(dac acesta exist; dac nu, nseamn c x = 0 i suntem la pasul 1b).
Pas 2. Verificm s avem cel puin un 1 n y (pentru primul 1 din y schimbm starea i ne
deplasm un pas dreapta pe prima band), iar pe a doua band adugm un 1 (cel n plus
de la rezultat) i facem un pas stnga.
(i) Apoi pentru fiecare 1 din y-ul de pe prima band, n afar de primul 1 (cel n plus
pentru scrierea special n unar):
(a) copiem integral toi de 1 de pe banda a treia (din copia lui x) n banda a doua,
mergnd spre stnga pe banda a doua i dreapta pe banda a treia;
(b) cnd ajungem la B pe banda a treia, o parcurgem integral spre stnga pn la B,
apoi facem un pas dreapta pe banda a treia i un pas dreapta pe prima band, relum (2i).
(ii) Cnd ajungem la B pe prima band, parcurgem integral prima band spre stnga pn
la B, apoi facem un pas dreapta. (Rezultatul este corect inclusiv pentru y = 0.)
1 1


q0 , B = q1 , B , // pas 1
B B


1 1

q1 , B = q1 , B , // pas 1 (a )
B 1

0
0

q1 , B = q2 , B ,
B B

1 1

q2 , B = q3 ,1, // pas 2

1 1

1
1

q3 , B = q4 , B , // pas 2 (i )
1
1


1 1

q4 , B = q4 , 1 , // pas 2 (a )

1 1

1 1

q4 , B = q5 , B , // pas 2 (b)
B B

1 1

q5 , B = q5 , B ,
1 1

1 1

q5 , B = q3 , B , // reluam 2 (i )
B B

30

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
B B

q3 , B = q6 , B , // pas 2 (ii )
1 1

1 1

q6 , B = q6 , B ,
1 1

1 1

q2 , B = q8 , 1 , // pas 1 (b)
B B

1 1

q8 , 1 = q8 , 1 ,
B B

0
0

q6 , B = q6 , B ,
1 1

0 0

q8 , 1 = q8 , 1 ,
B B

B B

q6 , B = q7 , B , , F = {q7 }
1
1

B B

q8 , 1 = q7 , 1 ,
B B

Complexitatea spaiu:
Avem numerele iniiale, copia lui x i rezultatul. Rezult C.S. = x+y + x*y + x.
Complexitatea timp:
x + y*(
x +
x ) + ( y + x) => C.T. = O(x*y).

pas 1
a
b
pas 2 ii
pas
2
pas
2
pas 2 i

Aceeai soluie, sub form de graf:

31

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

Problema 7
Se dau dou numere naturale x i y. S se calculeze ctul (x/y) i restul (x%y).
Fie x = 5, y = 2 (reprezentate prin 6, respectiv 3 de 1). Iniial banda arat aa:
... B 1 1 1 1 1 1 0 1 1 1 B ...
La final, banda va arta astfel:
... B 1 1 1 1 1 1 0 1 1 1 2 1 1 1 3 1 1 B ...
Ideea de rezolvare:
Pas 1. Marcm primul 1 din x cu 1, ne deplasm dreapta (srind toi de 1 nemarcai din x
i delimitatorul 0), marcm primul 1 din y cu 1, ne deplasm dreapta (srind toi de 1
nemarcai din y) pan la B, scriem 2, facem un pas dreapta, scriem 1 (cel n plus pentru
ctul x/y), stm pe loc.
Ne deplasm stnga (srind 1-urile din ct, delimitatorul 2, 1-urile nemarcate din y, apoi
ajungem la 1 din y i facem un pas dreapta.
Pas 2. (a) Ct timp e posibil, marcm cu 1 alternativ cte un 1 din y apoi din x (marcm
un 1 din y, mergem stnga srind toi 1 din y i pe 1, pentru 0 schimbm starea ca s
tim c am ajuns pe x, apoi srim toi 1 din x pn la 1, pas dreapta i marcm un 1 din
x, mergem dreapta srind toi 1 din x, schimbm iar starea pentru 0, srim 1 i toi 1
din y i relum).
(b) Dac y este complet marcat (y s-a cuprins nc o dat integral n x), suntem pe 2 i
mergem dreapta srind 2 i toi de 1 din ct pn la finalul benzii i adugm un 1 la ct.
Apoi mergem stnga (srind toi de 1 din ct) pn la 2, apoi demarcm toi de 1 din y,
pas dreapta i relum pasul 2(a).
(c) Dac x este complet marcat (y nu a putut fi cuprins integral n x, deci y e posibil s fie
marcat parial, iar aceast parte marcat a lui y, care a fost marcat simultan cu ultima
parte din x, reprezint restul x%y inclusiv cu 1-ul n plus de la scrierea special n unar,
deoarece marcarea s-a fcut nti n y i abia apoi nu s-a gsit 1-ul corespunztor din x),
suntem pe 0, mergem dreapta pn la finalul benzii i scriem 3 apoi mergem la pasul 3(a).
Pas 3. (a) De la finalul benzii mergem stnga pn la 1 din y, l demarcm, mergem
dreapta pn la finalul benzii i adugm 1 la rest, apoi relum pasul 3(a).
(b) Cnd ajungem la 1 din y (am terminat de copiat restul), l demarcm i mergem
stnga demarcnd tot x pn la B, apoi pas dreapta.
// Pas 1
(q0 ,1) = (q1 ,1' , ) // din x

(q1 ,1) = (q1 ,1, )


(q1 ,0) = (q2 ,0, )
(q2 ,1) = (q3 ,1' ' , ) // din y
(q3 ,1) = (q3 ,1, )

(q3 , B) = (q4 ,2, )


(q4 , B) = (q5 ,1,)
(q5 ,2) = (q5 ,2, )
(q5 ,1) = (q5 ,1, )
(q5 ,1' ' ) = (q6 ,1' ' , )

32

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
// Pas 2 (a )
(q6 ,1) = (q7 ,1' , ) // din y

// Pas 2 (c)
(q9 ,0) = (q14 ,0, ) // x complet marcat

(q7 ,1' ) = (q7 ,1' , )


(q7 ,1' ' ) = (q7 ,1' ' , )
(q7 ,0) = (q8 ,0, )
(q8 ,1) = (q8 ,1, )
(q8 ,1' ) = (q9 ,1' , )
(q9 ,1) = (q10 ,1' , ) // din x
(q10 ,1) = (q10 ,1, )
(q10 ,0) = (q11 ,0, )
(q11 ,1' ' ) = (q11 ,1' ' , )
(q11 ,1' ) = (q11 ,1' , )
(q11 ,1) = (q7 ,1' , ) // din y, reluam pas 2(a)

(q14 ,1' ' ) = (q14 ,1' ' , )


(q14 ,1' ) = (q14 ,1' , )
(q14 ,1) = (q14 ,1, )
(q14 ,2) = (q14 ,2, )
(q14 , B) = (q15 ,3,)

// Pas 2 (b)
(q11 ,2) = (q12 ,2, ) // y complet marcat

(q12 ,1) = (q12 ,1, )


(q12 , B) = (q13 ,1,) // pentru cat
(q13 ,1) = (q13 ,1, )
(q13 ,2) = (q13 ,2, )
(q13 ,1' ) = (q13 ,1, ) // demarcam y
(q13 ,1' ' ) = (q6 ,1' ' , ) // reluam pas 2(a)

// Pas 3 (a )
(q15 ,3) = (q15 ,3, )

(q15 ,1) = (q15 ,1, )


(q15 ,2) = (q15 ,2, )
(q15 ,1' ) = (q16 ,1, ) // din y
(q16 ,3) = (q16 ,3, )
(q16 ,2) = (q16 ,2, )
(q16 ,1) = (q16 ,1, )
(q16 , B) = (q15 ,1,) // pentru rest
// Pas 3 (b)
(q15 ,1' ' ) = (q17 ,1, )

(q17 ,0) = (q17 ,0, )


(q17 ,1' ) = (q17 ,1, ) // demarcam x
(q17 , B) = (q18 , B, ) , F = {q18 }

Obs: Dac x = 0, se calculeaz corect x/y = 0 i x%y = 0.


Dar dac y = 0, maina se blocheaz n starea q 6 cnd ntlnete 2 n loc de 1 din y.
Complexitatea spaiu:
Avem numerele iniiale i cele dou rezultate. Rezult C.S. = x+y + x/y + x%y.
Complexitatea timp:
Pas 1: Parcurgem spre dreapta toat banda iniial (x+y pai), apoi spre stnga pn la
nceputul lui y (y pai).
Pas 2 (a, b): Pentru o aplicare a pasului 2(a), de maxim y ori ne deplasm x poziii dusntors pentru marcarea alternativ (2*y*x pai). Apoi aplicm pasul 2(b), unde parcurgem
maxim x/y dus-ntors, apoi demarcm y-ul spre stnga (2*x/y + y pai). Relum paii 2(a)
i 2(b) de x/y ori, adic facem x/y * (2*y*x + 2*x/y + y) pai.
Pas 2 (c): Parcurgem dus-ntors maxim y + x/y (2*y +2*x/y pai).
Pas 3 (a): De x%y ori parcurgem dus-ntors maxim y+x/y+x%y pai.
Pas 3 (b): Parcurgem spre stnga x pentru demarcare (x pai).

33

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Total:

x
x
x
x
x
x + 2 * y + * y * 2 * x + 2 * + y + 2 * y + + ( x% y ) * 2 * y + + x% y +

y
y
y

3 (b )
pas
2
(
)
pas 1
pas
a

pas 2 ( b )
pas 3 ( a )
pas 2 ( c )

pas 3

pas 2

Pasul 2(a) este cel dominant, rezult C.T. = O(x2).


Aceeai soluie, sub form de graf:
(pentru marcarea cu 1 am folosit a, iar pentru marcarea cu 1 am folosit b)

(*) Problema 7 [Rezolvare pe 3 benzi]


Enun: Se dau dou numere naturale x i y. S se calculeze ctul (x/y) i restul (x%y).
Fie x = 5, y = 2 (reprezentate prin 6, respectiv 3 de 1). Iniial benzile arat aa:
x, y
B 1 1 1 1 1 1 0 1 1 1 B
B B B B B B B B B B B B
B B B B B B B B B B B B
La final, benzile vor arta astfel:
x, y
B 1 1 1 1 1 1 0 1 1 1 B
x/y, x%y B 1 1 1 3 1 1 B B B B B
y
B 1 1 B B B B B B B B B

34

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 1. Parcurgem spre dreapta pe prima band x-ul, 0-ul i primul 1 din y (cel n plus de
la scrierea special n unar). Apoi ct timp citim 1 pe prima band scriem 1 pe a treia
band i facem un pas dreapta pe aceste dou benzi (copiem y-ul). Apoi pe prima band
mergem spre stnga pn la 0, avnd grij s respectm condiia ca banda a treia s
conin cel puin un 1 (adic y-ul s fie minim 1, iar dac este 0 maina s se blocheze
pentru a nu face mprirea la 0). Cnd srim ultimul 1 din x (cel n plus de la scrierea n
unar) mergem stnga pe prima band, adugm un 1 pe banda a doua (cel n plus la
scrierea ctului) i facem un pas dreapta.
Pas 2. Parcurgem simultan spre stnga prima i a treia band.
Pas 3. (a) Dac dm de B doar pe a treia band, adugm un 1 pe banda a doua (la ct) i
facem un pas dreapta. Apoi parcurgem integral spre dreapta banda a treia pn la B,
facem un pas stnga i relum pasul 2.
(b) Dac dm de B doar pe prima band (am terminat de calculat ctul), adugm
delimitatorul 3 pe banda a doua i facem un pas dreapta pe a doua i a treia band. Apoi
ct timp citim 1 pe banda a treia scriem 1 pe banda a doua i facem un pas dreapta pe
ambele benzi. Mai adugm un 1 pe banda a doua (cel n plus la scrierea restului), apoi
parcurgem integral spre stnga banda a treia, mergem la pasul 4.
(c) Dac dm de B simultan pe prima i a treia band (nseamn c x este multiplu de y,
deci restul va fi 0), adugm pe banda a doua un 1 (la ct), apoi delimitatorul 3 i un 1
(cel n plus de la scrierea restului 0), mergem la pasul 4.
Pas 4. Parcurgem integral spre stnga banda a doua, apoi pas dreapta pe toate cele trei
benzi i mergem n starea final.
1 1

q0 , B = q1 , B , // Pas 1, x 0
B B

1 1


q1 , B = q1 , B ,
B B


0 0

q1 , B = q2 , B ,
B B

1 1

q2 , B = q3 , B , // y 0
B B

1 1

q3 , B = q3 , B , // copiem y
B 1

B B


q3 , B = q4 , B ,


B B
1 1


q4 , B = q4 , B , // verificam y 1
1 1


0 0


q4 , B = q5 , B ,
1 1


1 1

q5 , B = q6 ,1, // 1 in plus la cat


1 1

1 1

q6 , B = q6 , B , // Pas 2

1 1

35

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

B
B


q9 , B = q10 , B ,
B
B


B
B

q6 , B = q11 , 1 , // Pas 3 (c), 1 pt. cat


B
B

1 1

q6 , B = q7 , 1 , // Pas 3 (a), 1 pt. cat


B B

1 1

q7 , B = q7 , B ,
1 1

1 1

q7 , B = q6 , B , // reluam pas 2
B B

B
B

q11 , B = q12 , 3 ,

B
B

B B

q6 , B = q8 , 3 , // Pas 3 (b)
1 1

B B

q8 , B = q8 , 1 , // 1 pt. rest
1 1

B B

q8 , B = q9 , 1 , // 1 in plus la rest
B B

B
B

q12 , B = q10 , 1 , // rest = 0

B
B

B
B

q10 , 1 = q10 , 1 , // Pas 4

B
B

B
B

q10 , 3 = q10 , 3 ,

B
B

B B

q9 , B = q9 , B ,
1 1

B
B

q10 , B = q13 , B , , F = {q13 }

B
B

Complexitatea spaiu:
Avem numerele iniiale, cele dou rezultate i copia lui y.
Rezult C.S. = x+2*y + x/y + x%y.
Complexitatea timp:

x
x
Total: x + 2 * y + *
y +
y + x% y + y +
3 + x% y +


y
pas 3( c )
pas 1
pas 3( b )

pas 2 pas 3( a )
pas 4

Ctul i restul sunt numere mai mici sau egale dect x, rezult C.T. = O(x+y).
Obs: Pentru y = 0, maina se blocheaz n starea q 4 pentru c gsete B n loc de 1 pe
banda a treia.
Pentru x < y, maina funcioneaz corect i calculeaz ctul x/y = 0 i restul x%y = x
(inclusiv pentru x = 0).

36

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:

37

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 4 ~
Problema 8
S se accepte cuvintele din limbajul L = {w {a, b, c}* , | w |a =| w |b =| w |c > 0} .
Rezolvarea (A)
De exemplu iniial banda mainii Turing arat aa:
... B a c b c c a b a b B ...
La final, banda va arta astfel:
... B a c b c c a b a b B ...
Ideea de rezolvare:
Ct timp este posibil, cutm n aceast ordine un a, un b i un c pe care s-i marcm, iar
dac atunci cnd toi de a sunt marcai i toi de b i toi de c sunt marcai, acceptm
intrarea.
Pas 1. Ne deplasm dreapta (srind a, b, b, c i c) pn la primul a, l marcm cu a, ne
deplasm stnga (srind a, b, c i c) pn la b sau B, pas dreapta.

(q0 , x) = (q0 , x, ), x {a' , b' , b, c' , c} // sarim orice in afara de a


(q0 , a) = (q1 , a' , ) // marcam un a
(q1 , y ) = (q1 , y, ), y {a' , b, c, c' } // sarim orice in afara de a si de b'
(q1 , b' ) = (q2 , b' , ) ; (q1 , B) = (q2 , B, )
Pas 2. Ne deplasm dreapta (srind a, a, b, c i c) pn la primul b, l marcm cu b, ne
deplasm stnga (srind a, a, b i c) pn la c sau B, pas dreapta.

(q2 , z ) = (q2 , z , ), z {a' , a, b' , c' , c} // sarim orice in afara de b


(q2 , b) = (q3 , b' , ) // marcam un b
(q3 , t ) = (q3 , t , ), t {a' , a, b' , c} // sarim orice in afara de b si de c'
(q3 , c' ) = (q4 , c' , ) ; (q3 , B) = (q4 , B, )
Pas 3. Ne deplasm dreapta (srind a, a, b, b i c) pn la primul c, l marcm cu c, ne
deplasm stnga (srind a, b, b i c) pn la a sau B, pas dreapta i relum pasul 1.

(q4 , p) = (q4 , p, ), p {a' , a, b' , b, c'} // sarim orice in afara de c


(q4 , c) = (q5 , c' , ) // marcam un c
(q5 , r ) = (q5 , r , ), r {a, b' , b, c'} // sarim orice in afara de c si de a'
(q5 , a' ) = (q6 , a' , ) ; (q5 , B) = (q6 , B, )

38

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(q6 , x) = (q6 , x, ) // exact ce faceam si in q0 , reluam pasul 1


(q6 , a) = (q1 , a' , ) // marcam un a
Pas 4. Dac toi de a sunt marcai (adic suntem la pasul 1, cutm a, dar nu gsim i
ajungem pe B-ul din dreapta cuvntului), atunci parcurgem toat banda spre stnga. Dac
ntlnim doar caractere marcate (a, b i c) iar apoi dm de B-ul din stnga cuvntului,
atunci acceptm intrarea.

(q6 , B) = (q7 , B, ) // toate a urile sunt marcate


(q7 , s ' ) = (q7 , s, ), s ' {a' , b' , c' }, s {a, b, c} // demarcam tot ce este marcat
(q7 , B) = (q8 , B, ), F = {q8 } // toate b urile si c urile erau marcate, acceptam cuvantul
Obs.: - Avnd n vedere poziionarea aleatoare a literelor n cuvnt, la parcurgerile spre
dreapta avem 5 caractere pe care le putem ntlni i pe care trebuie s le srim, toate n
afar de cel nemarcat pe care l cutm pentru a-l marca.
- La parcurgerile spre stnga avem 4 caractere pe care le putem ntlni i pe care trebuie
s le srim. l excludem pe cel marcat n perechea anterioar de acelai tip cu cel pe care
urmeaz s-l marcm la pasul urmtor (de exemplu la pasul 2 urmeaz s marcm un b,
deci la parcurgerea spre stnga din cadrul pasului 1 l excludem pe b, pentru c vrem s
ncepem cutarea lui b din dreapta ultimului b marcat, deci vrem s schimbm starea i
sensul de parcurgere atunci cnd l ntlnim). De asemenea, excludem i caracterul
nemarcat de acelai tip cu cel pe care tocmai l-am marcat n acel pas (de exemplu la pasul
1 am marcat un a i apoi mergnd spre stnga vom ntlni doar a-uri marcate pentru c
cele nemarcate vor fi la dreapta fa de locul de unde am plecat, avnd n vedere c
marcrile unei litere se fac la rnd, adic primul a, apoi al doilea a, apoi al treilea, etc.)
Obs.: La seminar, dac am spus c din q 5 atunci cnd ntlnim a sau B mergem n q 0
(pentru a relua pasul 1), iar din q 0 cu B mergem n q 6 (avem toi de a marcai), apoi avem
din q 6 cu B mergem n stare final (pentru c bucla din q 6 poate s nu o aplice niciodat),
nseamn c se accept i cuvntul vid, ceea ce contrazice condiia din enun (c numrul
de apariii ale fiecrei litere trebuie s fie strict pozitiv).
Soluia prezentat aici mai sus respect condiia, cuvntul minim acceptat este de
lungime 3 i conine un a, un b i un c.
Complexitatea spaiu:
Avem cuvntul iniial i nu scriem nimic n plus. Rezult C.S. = |w| a +|w| b +|w| c = |w|.
Complexitatea timp:
Pas1 + Pas2 + Pas3: Se revine la pasul 1 de min{|w| a , |w| b , |w| c } ori, iar pentru a aplica o
dat fiecare dintre cei trei pai (pentru a marca un a, un b i un c) ne deplasm lungimea
benzii nmulit cu o constant. Rezult min{|w| a , |w| b , |w| c } * const. * |w|.
Pas 4: Parcurgem maxim ntreaga band de la dreapta spre stnga. Rezult maxim |w|.
Total: min{|w| a , |w| b , |w| c } * const. * |w| + |w| => C.T. = O(|w|2).

39

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:
(pentru marcarea a-urilor am folosit x, pentru marcarea b-urilor am folosit y, iar pentru
marcarea c-urilor am folosit z)

Rezolvarea (B)
Enun: S se accepte cuvintele din limbajul L = {w {a, b, c}* , | w |a =| w |b =| w |c > 0} .
Ideea de rezolvare:
Pas 1. Ct timp este posibil, ncercm s formm perechi de cte un a, un b i un c,
indiferent de ordinea n care i gsim nemarcai pe band. Folosim la stri indici formai
din literele din pereche care nu au fost gsite i marcate nc. Deci starea iniial va fi
q abc , iar pe msur ce gsim cte o liter, aceasta va disprea de la indice. Dac n q abc nu
mai gsim nicio liter nemarcat (dm de B-ul) din dreapta benzii, mergem la pasul 3.
Pas 2. Cnd am gsit i marcat toate 3 literele dintr-o pereche, trecem n starea q st i
parcurgem toat banda spre stnga pn la B, apoi pas dreapta i revenim la pasul 1 i n
q abc pentru a forma o nou pereche.
Pas 3. Parcurgem toat banda spre stnga demarcnd-o i de asemenea verificm ca ea s
nu fie vid (pentru a nu accepta cuvntul vid).
(qabc , d ) = (qabc , d , ), d {a' , b' , c'}// Pas 1
(qab , g ) = (qab , g , ), g {a' , b' , c' , c}
(qabc , a ) = (qbc , a' , )
(qab , a ) = (qb , a' , )
(qabc , b ) = (qac , b' , )
(qab , b ) = (qa , b' , )
(qabc , c ) = (qab , c' , )
(qc , h ) = (qc , h, ), h {a' , b' , c' , a, b}
(qbc , e ) = (qbc , e, ), e {a' , b' , c' , a}
(qc , c ) = (qst , c' ,)
(qbc , b ) = (qc , b' , )
(qb , i ) = (qb , i, ), i {a' , b' , c' , a, c}
(qbc , c ) = (qb , c' , )
(qb , b ) = (qst , b' ,)
(qac , f ) = (qac , f , ), f {a' , b' , c' , b}
(qa , j ) = (qa , j , ), j {a' , b' , c' , b, c}
(qac , a ) = (qc , a' , )
(qa , a ) = (qst , a' ,)
(qac , c ) = (qa , c' , )

40

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(qst , k ) = (qst , k , ), k {a' , b' , c' , a, b, c}// Pas 2


(qst , B ) = (qabc , B, ) // reluam pas 1
(qabc , B ) = (q9 , B, ) // Pas 3
(q9 , d ) = (q10 , d ,), d {a' , b' , c'}// avem banda nevida

(q10 , a') = (q10 , a, )


(q10 , b') = (q10 , b, )
(q10 , c') = (q10 , c, )
(q10 , B ) = (q11 , B, ), F = {q11}

Complexitatea spaiu:
Avem cuvntul iniial i nu scriem nimic n plus. Rezult C.S. = |w| a +|w| b +|w| c = |w|.
Complexitatea timp:
Pas1 + Pas2: Se revine la pasul 1 de min{|w| a , |w| b , |w| c } ori, iar pentru a marca un a, un
b i un c ne deplasm maxim lungimea benzii dus-ntors: min{|w| a , |w| b , |w| c } * 2 * |w|.
Pas 3: Parcurgem maxim ntreaga band de la dreapta spre stnga. Rezult maxim |w|.
Total: min{|w| a , |w| b , |w| c } * 2 * |w| + |w| => C.T. = O(|w|2).
Aceeai soluie, sub form de graf:
(pentru marcarea a-urilor am folosit x, pentru marcarea b-urilor am folosit y, iar pentru
marcarea c-urilor am folosit z)

(*) Problema 8 [Rezolvare pe 4 benzi]


Enun: S se accepte cuvintele din limbajul L = {w {a, b, c}* , | w |a =| w |b =| w |c > 0} .

41

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Ideea de rezolvare:
Pas 1. Parcurgem integral spre dreapta prima band, iar de pentru fiecare a, b sau c
gsit pe prima band adugm un a pe a doua band, un b pe a treia band, respectiv
un c pe a patra band (pentru primul caracter schimbm sarea pentru a nu accepta
cuvntul vid).
Pas 2. Parcurgem simultan spre stnga benzile 2 4 i trebuie s ajungem simultan la B.
Pas 3. Parcurgem integral spre stnga prima band, apoi un pas dreapta pe toate patru
benzile.
c c
a a
b b

B a
B B
B B
q0 , = q1 , , , q0 , = q1 , , , q0 , = q1 , ,
B
B
B
b
B
B

B B
B B
B c

a a
b b
c c

B a
B B
B B
q1 , = q1 , , , q1 , = q1 , , , q1 , = q1 , ,
B
B
B
b
B
B

B B
B B
B c

B B
B B
B B


a
a
B B

B B
q1 , = q2 , , , q2 , = q2 , , , q2 , = q3 , ,
B
b
b
B
B
B

B B
c
c
B B


c c
b b
a a


B B
B B
B B
q3 , = q3 , , , q3 , = q3 , , , q3 , = q3 , ,
B
B
B
B
B
B


B B
B B
B B


B B

B B
q3 , = q4 , , , F = {q4 }
B
B

B B

// Pas 1

// Pas 2

// Pas 3

Complexitatea spaiu:
Avem cuvntul iniial i copia lui. Rezult C.S. = |w| + |w| a +|w| b +|w| c = 2*|w|.
Complexitatea timp:
(Pas1) |w| + (Pas2) min{|w| a , |w| b , |w| c } + (Pas3) |w| => C.T. = O(|w|).

42

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:

Problema 9
S se accepte numerele x de forma 2k, k numr natural.
Rezolvarea (A) (cu mpriri)
Fie x = 8 (reprezentat prin 9 de 1). Iniial banda mainii Turing arat aa:
... B 1 1 1 1 1 1 1 1 1 B ...
La final, banda va arta astfel:
... B 1 1 1 1 1 1 1 1 1 B ...
Ideea de rezolvare:
Exceptnd 1-ul n plus, la fiecare pas vom marca jumtate din numr, deci practic vom
face mprire repetat la 2, partea nemarcat rmas fiind ctul mpririi. Dac la fiecare
pas avem un numr par (deci putem s continum mprirea exact la 2), iar la final
avem ctul 1, atunci numrul este acceptat.
Pas 1. Marcm primul 1 din numr (cel n plus) i facem un pas dreapta.
(q0 ,1) = (11 ,1' , )
Pas 2. Parcurgem toat banda de la stnga la dreapta (srind 1-urile deja marcate), iar
pentru fiecare doi de 1 nemarcai, pe primul l marcm pe al doilea l srim.
(q1 ,1' ) = (q1 ,1' , ) // sarim ce era marcat

(q1 ,1) = (q2 ,1' , ) // marcam primul 1


(q2 ,1' ) = (q2 ,1' , ) // sarim ce era marcat
(q2 ,1) = (q1 ,1, ) // sarim al doilea 1 si reluam
- Dac la aplicrile intermediare (toate n afar de ultima) ale pasului 2 ntlnim B n
starea n care trebuia s marcm un 1 este bine (numrul curent este par) i trecem la
pasul 3.
(q1 , B) = (q3 , B, ) // ok , nr curent par

43

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
- La ultima aplicare a pasului 2, dac ntlnim B n starea n care trebuia s srim un 1
este bine (nseamn c aveam numrul 20=1), dar trebuie s verificm dac tot numrul
este complet marcat i doar dac da, atunci acceptm intrarea (altfel nseamn c am
ajuns la un numr curent care este impar dar diferit de 1, deci nu respect condiia).
(q2 , B) = (q4 , B, ) // nr curent impar

(q4 ,1' ) = (q4 ,1, ) // demarcam


(q4 , B) = (q5 , B, ), F = {q5 } // ok , tot nr era marcat , acceptam
Pas 3. Parcurgem toat banda spre stnga (srim 1-urile i 1-urile fr s modificm
nimic) pn la B, facem un pas dreapta i relum pasul 2.
(q3 ,1) = (q3 ,1, )

(q3 ,1' ) = (q3 ,1' , )


(q3 , B) = (q1 , B, ) // reluam pasul 2
Complexitatea spaiu:
Avem numrul iniial i nu scriem nimic n plus. Rezult C.S. = x.
Complexitatea timp:
Pas 1: Ne mutm cu o poziie.
Pas 2 + Pas 3: La fiecare aplicare a pasului 2 facem o mprire a numrului curent la 2,
deci numrul de reveniri la pasul 2 este maxim k, adic log 2 x. Pasul 2 face o parcurgere
complet a benzii de la stnga la dreapta, iar pasul 3 parcurge total banda de la dreapta
spre stnga. Rezult log 2 x * (2*x).
Total: 1 + log 2 x * (2*x) => C.T. = O(x * log x).
Aceeai soluie, sub form de graf: (pentru marcare am folosit x)

(*) Rezolvarea (B) (cu nmuliri)


Enun: S se accepte numerele x de forma 2k, k numr natural.
Ideea de rezolvare:
Pas 1. Transformm 1-ul n plus (de la scrierea special n unar) n 0, apoi la fiecare pas 2
dublm partea marcat din numr. Iniial marcm cu 1 un singur 1 din numr (20 = 1) i
facem un pas dreapta.

44

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
(a) Dac dm de B, nseamn c am avut x = 1 = 20, parcurgem toat banda spre stnga
transformnd 1 i 0 la loc n 1 i apoi acceptm numrul.
(b) Dac dm de 1, ne ntoarcem stnga pn la 0, pas dreapta, mergem la pasul 2.
Pas 2. (Dublm numrul marcat curent) Pentru fiecare 1 gsit l transformm n 1,
mergem dreapta (srind toi 1 i toi 1) i transformm primul 1 gsit n 1 (dac dm
de B, maina se blocheaz pentru c nseamn c nu putem face integral nmulirea
curent cu 2, deci numrul nu este acceptat). Apoi srim spre stnga toi 1.
Pas 3. (a) Dac dm de 1 (nc nu am terminat nmulirea cu 2) i srim pe toi spre
stnga, iar cnd ajungem la 1 facem un pas dreapta i relum pasul 2.
(b) Dac dm de 0 (am terminat nmulirea cu 2), atunci transformm toi 1 n 1
mergnd spre dreapta. Mergem la pasul 4.
Pas 4. (a) Dac dm de B, nseamn c am avut x = 2k, relum pasul 1(a) (adic
parcurgem toat banda spre stnga transformnd toi de 1 i 0-ul la loc n 1, apoi
acceptm numrul).
(b) Dac dm de 1, mergem la pasul 1(b) (adic ne ntoarcem stnga pn la 0, pas
dreapta i apoi relum pasul 2).

(q0 ,1) = (q1 ,0, ) // Pas 1

(q1 ,1) = (q2 ,1' ' , ) // 2


(q2 , B ) = (q3 , B, ) // Pas 1 (a)
(q3 ,1' ') = (q3 ,1, )
(q3 ,0) = (q4 ,1,), F = {q4 }
(q2 ,1) = (q5 ,1, ) // Pas 1 (b)
(q5 ,1' ') = (q5 ,1' ' , )
(q5 ,0) = (q6 ,0, )
(q6 ,1' ') = (q7 ,1' , ) // Pas 2
(q7 ,1' ') = (q7 ,1' ' , )
0

(q7 ,1') = (q7 ,1' , )


(q7 ,1) = (q8 ,1' ,)
(q8 ,1') = (q8 ,1' , )
(q8 ,1' ') = (q9 ,1' ' , ) // Pas 3 (a)
(q9 ,1' ') = (q9 ,1' ' , )
(q9 ,1') = (q6 ,1' , ) // reluam pas 2
(q8 ,0) = (q10 ,0, ) // Pas 3 (b)
(q10 ,1') = (q10 ,1' ' , )
(q10 , B ) = (q3 , B, ) // Pas 4 (a), reluam pas 1(a)
(q10 ,1) = (q5 ,1, ) // Pas 4 (b), reluam pas 1(b)

Complexitatea spaiu:
Avem numrul iniial i nu scriem nimic n plus. Rezult C.S. = x.
Complexitatea timp:
Pas 1(b): Facem 5 pai (2 dreapta, 2 stnga, 1 dreapta).
Pas 2, 3(a): Revenim la pasul 2 de cte ori putem dubla numrul curent fr s-l depim
pe x, adic de log 2 x ori. Pentru a dubla un numr curent k, pentru fiecare unitate din k ne
deplasm dus-ntors k csue pe band; rezult complexitatea dublrii lui k este 2*k2, iar
n cel mai ru caz k = x/2, adic ultima dublare are 2*(x/2)2 pai.
Pas 3(b): Parcurgem spre dreapta tot numrul dublat anterior, adic n cel mai ru caz
aproximativ x pai.
Pas 4(b): Parcurgem spre stnga tot numrul dublat anterior, adic tot x pai.

45

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 4(a): Pentru demarcri parcurgem tot numrul, adic x pai.

x +
x +
x => C.T. = O(x2 * log x).
5 + log 2 x * 2 * +
Total:

pas 1

pas 3(b ) pas 4 (b ) pas 4 ( a )

pas 2, 3( a )

Aceeai soluie, sub form de graf:


(pentru marcare cu 1 am folosit x, iar pentru 1 am folosit y)

(*) Rezolvarea (B) (cu nmuliri) [pe 2 benzi]


Enun: S se accepte numerele x de forma 2k, k numr natural.
Fie x = 8 (reprezentat prin 9 de 1). Iniial benzile mainii Turing arat aa:
x
B 1 1 1 1 1 1 1 1 1 B
B B B B B B B B B B B
La final, benzile vor arta astfel:
x
B 1 1 1 1 1 1 1 1 1 B
k
k
k+1
2 (a.. 2 < x 2 ) B 1 1 1 1 B B B B B B
Ideea de rezolvare:
Pas 1. Pe prima band transformm primul 1 n 0, pas dreapta, apoi marcm un 1 cu 1 i
facem un pas dreapta.
(a) Dac dm de B, nseamn c am avut x = 1 = 20, parcurgem toat banda spre stnga
transformnd 1 i 0 la loc n 1 i apoi acceptm numrul.
(b) Dac dm de 1 facem un pas stnga pe prima band i mergem la pasul 2.
Pas 2. (Dublm numrul de 1-uri de pe banda a doua egalizndu-l cu numrul de 1-uri
de pe prima band) (a) Ct timp citim 1 pe prima band i 1 pe a doua band, parcurgem
benzile simultan spre stnga.

46

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
(b) Apoi ct timp citim 1 pe prima band i B pe a doua band, scriem 1 pe a doua band
i parcurgem benzile simultan spre stnga. Cnd ajungem la 0 pe prima band, facem un
pas dreapta pe ambele benzi.
Pas 3. (Dublm numrul de 1-uri de pe prima band, prin marcarea pe prima band a
nc atia de 1 ci sunt pe a doua band) (a) Ct timp citim 1 pe prima band facem
un pas dreapta (n timp ce pe a doua band staionm pe primul 1).
(b) Apoi ct timp citim 1 pe ambele benzi, scriem 1 pe prima band i facem simultan un
pas dreapta pe ambele benzi.
Pas 4. (a) Dac dm de B simultan pe ambele benzi nseamn c numrul x trebuie
acceptat. Parcurgem integral spre stnga banda a doua pentru a ne poziiona la nceputul
ei. Apoi (analog cu pasul 1a) parcurgem integral prima band spre stnga transformnd 1
i 0 la loc n 1 i apoi acceptm numrul.
(b) Dac dm de B doar pe a doua band i avem 1 pe prima band, facem simultan un
pas stnga i relum pasul 2. (Obs: Dac dm de B doar pe prima band, nseamn c
numrul x trebuie respins, deci nu definim funcia de tranziie, iar maina de va bloca.)

q0 , = q1 , , // Pas 1
B B

q5 , = q6 , ,
B
B

1'

1'

1' 1'
q6 , = q6 , , // Pas 3 (a)
1 1
1 1'
q6 , = q6 , , // Pas 3 (b)
1 1

q6 , = q7 , , // Pas 4 (a)
B
B

q1 , = q 2 , ,
B B
q 2 , = q3 , , // Pas 1 (a)
B B
q3 , = q3 , ,
B B

q3 , = q 4 , , , F = {q 4 }
B
B

1 1
q 2 , = q5 , , // Pas 1 (b)
B B
1' 1'
q5 , = q5 , , // Pas 2 (a)
1 1

1'

1'

q5 , = q5 , , // Pas 2 (b)
B
1

B B
q7 , = q7 , ,
1 1

q7 , = q3 , ,
B B
q6 , = q5 , , // Pas 4 (b), reluam pas 2
B
B

Complexitatea spaiu:
Avem numrul iniial i scriem n plus 2k care este maxim x-1. Rezult C.S. = 2*x.
Complexitatea timp:
Pas 1(b): Facem 3 pai (2 dreapta, 1 stnga).

47

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 2, 3, 4(b): Revenim la pasul 2 de cte ori putem dubla numrul curent fr s-l
depim pe x, adic de log 2 x ori. Dac aveam deja n de 1 pe a doua band, la pasul 2
facem 2*n pai, apoi la pasul 3 facem 2*(2*n) pai, deci n total 6*n pai. Iar n poate fi
maxim (x1)/2, rezult 6*(x1)/2 = 3*(x1) pai la ultima aplicare.
Pas 4(a): Parcurgem integral benzile, adic maxim (x1) pentru banda a doua i x pentru
prima, rezult maxim 2*x1 pai.

x 1
x 1
Total:
+ 4*
+
3 + log 2 x * 2 *
1 + ( x 1) + x => C.T. = O(x*log x).

2
2

pas 4 (b )
pas 1
pas 4 ( a )

pas 3
pas 2

Aceeai soluie, sub form de graf: (pentru marcare cu 1 am folosit x)

Problema 10
Se d un numr n baza 1. S se transforme n baza 2.
Rezolvarea (A) (cu resturi)
Fie x = 10 (10) = 1010 (2) . Iniial banda mainii Turing conine numrul x n baza 1 (10
reprezentat prin 11 de 1), apoi vom aduga la dreapta delimitatorul 2 i scrierea
numrului x n binar.
... B 1 1 1 1 1 1 1 1 1 1 1 B ...
nainte de pasul 4, banda va arta astfel:
... B 1 1 1 1 1 1 1 1 1 1 1 2 z u z u B ...
La final, banda va arta astfel:
... B 1 1 1 1 1 1 1 1 1 1 1 2 1 0 1 0 B ...
Pas 1. (a) Marcm primul 1 din x cu 1.
(b) Srind toi 1, parcurgem integral spre dreapta x-ul, iar pentru fiecare doi de 1, pe
primul l marcm cu 1, iar pe al doilea l srim, folosind dou stri. Dac avem deja 2-ul
pe band, l srim (iar dac dm de B, scriem 2).
Pas 2. (a) Dac am ajuns la 2 (sau B-ul unde am scris apoi 2) n starea n care trebuia s
marcm primul 1 din pereche (nseamn c numrul curent este par, deci restul mpririi
la 2 este 0), mergem dreapta pn la B (srind toi de z i u), scriem pe band z
(reprezentnd restul 0), apoi mergem la pasul 3.

48

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
(b) Dac am ajuns la 2 (sau B-ul unde am scris apoi 2) n starea n care trebuia s srim al
doilea 1 din pereche (nseamn c numrul curent este impar, deci restul mpririi la 2
este 1), mergem dreapta pn la B (srind toi de z i u), scriem pe band u
(reprezentnd restul 1), apoi mergem la pasul 3.
Pas 3. Parcurgem spre stnga banda srind toi de z i u, apoi cnd ajungem la 2
schimbm starea i parcurgem spre stnga tot numrul x pn la 1. (a) Dac am ntlnit
1 nemarcat pe parcurs, vom relua pasul 1(b) pentru a afla i celelalte resturi. (b) Dac tot
x-ul era marcat, atunci l demarcm complet mergnd spre dreapta, iar cnd ajungem la 2,
facem un pas dreapta i trecem la pasul 4.
(Exact n locul cuvntului format din literele z i u vrem s obinem oglinditul lui,
dar scris cu cifrele 0 i 1, pentru c tim c primul rest obinut ar trebui s fie de fapt
ultima cifr a scrierii n baza 2.)
Pas 4. (a) Dac citim z scriem 0 (pentru a ti c valoarea de la aceast poziie din
cuvnt urmeaz s fie interschimbat cu valoarea aflat pe poziia simetric ei fa de
mijlocul cuvntului) i mergem ntr-o anumit stare n care tim c valoarea din stnga
perechii ce va fi interschimbat este 0. Apoi parcurgem banda spre dreapta (srind toi de
z i u, adic partea din cuvnt ne-oglindit nc), iar cnd ajungem la B sau la o cifr
(0 sau 1) facem un pas stnga i mergem la pasul 5.
(b) Analog, dac citim u scriem 1 i mergem ntr-o anumit stare n care tim c
valoarea din stnga perechii ce va fi interschimbat este 1. Apoi parcurgem banda spre
dreapta (srind toi de z i u, adic partea din cuvnt ne-oglindit nc), iar cnd
ajungem la B sau la o cifr (0 sau 1) facem un pas stnga i mergem la pasul 5.
(c) Dac citim o cifr (0 sau 1) (nseamn c am obinut deja oglinditul ntregului cuvnt,
acesta avnd lungime par), parcurgem toat banda spre stnga pn la B apoi facem un
pas dreapta i mergem n starea final.
Pas 5. (a) Dac citim z scriem n loc cifra adus din stnga (0 dac am ajuns aici
dup aplicarea pasului 4(a), respectiv 1 dac am ajuns aici dup aplicarea pasului 4(b)),
apoi trecem ntr-o stare n care tim c cifra 0 trebuie dus napoi spre stnga.
Parcurgem banda spre stnga srind toi de z i u, apoi cnd citim o cifr (indifferent
dac este 0 sau 1) scriem 0, facem un pas dreapta i relum pasul 4.
(b) Analog, dac citim u scriem n loc cifra adus din stnga (0 dac am ajuns aici
dup aplicarea pasului 4(a), respectiv 1 dac am ajuns aici dup aplicarea pasului 4(b)),
apoi trecem ntr-o stare n care tim c cifra 1 trebuie dus napoi spre stnga.
Parcurgem banda spre stnga srind toi de z i u, apoi cnd citim o cifr (indifferent
dac este 0 sau 1) scriem 1, facem un pas dreapta i relum pasul 4.
(c) Dac citim o cifr (0 dac am ajuns aici dup aplicarea pasului 4(a), respectiv 1 dac
am ajuns aici dup aplicarea pasului 4(b)) (nseamn c am obinut deja oglinditul
ntregului cuvnt, acesta avnd lungime impar), parcurgem toat banda spre stnga pn
la B apoi facem un pas dreapta i mergem n starea final.

49

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(q 0 ,1) = (q1 ,1' ' , ) // Pas 1 (a)


(q1 ,1') = (q1 ,1' , ) // Pas 1 (b)
(q1 ,1) = (q 2 ,1' , ) // marcam
(q 2 ,1') = (q 2 ,1' , )
(q 2 ,1) = (q1 ,1, ) // sarim

(q9 , z ) = (q10 ,0, ) // Pas 4 (a )


(q10 , m ) = (q10 , m, ), m {z , u}
(q10 , B ) = (q11 , B, )
(q10 ,0) = (q11 ,0, )
(q10 ,1) = (q11 ,1, )

(q1 , B ) = (q 3 ,2, ) // Pas 2 (a)


(q1 ,2) = (q 3 ,2, )
(q 3 , m ) = (q 3 , m, ), m {z , u}
(q 3 , B ) = (q 4 , z ,)

(q9 , u ) = (q12 ,1, ) // Pas 4 (b)


(q12 , m ) = (q12 , m, ), m {z , u}
(q12 , B ) = (q13 , B, )
(q12 ,0) = (q13 ,0, )
(q12 ,1) = (q13 ,1, )

(q 2 , B ) = (q 5 ,2, ) // Pas 2 (b)


(q 2 ,2) = (q 5 ,2, )
(q 5 , m ) = (q 5 , m, ), m {z , u}
(q 5 , B ) = (q 4 , u ,)
(q 4 , m ) = (q 4 , m, ), m {z , u} // Pas 3
(q 4 ,2) = (q 6 ,2, )
(q 6 ,1') = (q 6 ,1' , )
(q 6 ,1) = (q 7 ,1, ) // Pas 3 (a)
(q 7 , n ) = (q 7 , n, ), n {1' ,1}
(q 7 ,1' ') = (q1 ,1' ' , ) // reluam pas 1(b)
(q 6 ,1' ') = (q8 ,1, ) // Pas 3 (b)
(q8 ,1') = (q8 ,1, ) // demarcam x
(q8 ,2) = (q 9 ,2, )

(q9 ,0) = (q16 ,0,) // Pas 4 (c)


(q9 ,1) = (q16 ,1,)
(q16 , r ) = (q16 , r , ), r {0,1,2}
(q16 , B ) = (q17 , B, ) , F = {q17 }
(q11 , z ) = (q14 ,0, ) // Pas 5 (a )
(q13 , z ) = (q14 ,1, )
(q14 , m ) = (q14 , m, ), m {z , u}
(q14 , s ) = (q9 ,0, ), s {0,1}// reluam pas 4
(q11 , u ) = (q15 ,0, ) // Pas 5 (b)
(q13 , u ) = (q15 ,1, )
(q15 , m ) = (q15 , m, ), m {z , u}
(q15 , s ) = (q9 ,1, ), s {0,1}// reluam pas 4
(q11 ,0) = (q16 ,0,) // Pas 5 (c)
(q13 ,1) = (q16 ,1,) // ca la pas 4(c)

Complexitatea spaiu:
Avem numrul iniial i pentru scrierea lui n baza 2 avem nevoie de maxim log 2 x csue.
Rezult C.S. = x + log x.
Complexitatea timp:
Revenim la pasul 1(b) pentru fiecare rest care trebuie calculat (adic de maxim log 2 x ori),
iar la fiecare aplicare a lui parcurgem integral numrul x.
La o aplicare a pasului 2(a) sau 2(b) parcurgem maxim log 2 x csue pe band.

50

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
La o aplicare a pasului 3 parcurgem maxim (log 2 x + x) csue pe band, apoi relum
pasul 1(b) sau trecem la pasul 4.
Pentru a oglindi rezultatul, repetm paii 4+5 de (log 2 x)/2 ori, iar de fiecare dat
parcurgem dus-ntors maxim log 2 x csue pe band.
Total:

log ( x )

log 2 ( x )

2
+ x
x + log 2 ( x ) + (log 2 ( x ) + x ) +
log 2 ( x ) *
* 2 * log 2 ( x ) +

2
2
pas 1(b ) pas 2 ( a ) sau (b )

pas 4 ( a ) sau (b )

pas 3

si pas 5 ( a ) sau (b )
pas 4 ( c ) sau 5 ( c )
Rezult C.T. = O(x * log x).
Aceeai soluie, sub form de graf:
(pentru marcare cu 1 am folosit x, iar pentru 1 am folosit y)

(*) Rezolvarea (A) (cu resturi) [pe 2 benzi]


Enun: Se d un numr n baza 1. S se transforme n baza 2.
Fie x = 10 (10) = 1010 (2) . Iniial prima band a mainii Turing conine numrul x n baza 1
(10 reprezentat prin 11 de 1), iar a doua band este vid (are doar blank-uri):
x (1) ... B 1 1 1 1 1 1 1 1 1 1 1 B ...
... B B B B B B B B B B B B B ...
La final, benzile vor arta astfel:
x (1) ... B 1 1 1 1 1 1 1 1 1 1 1 B ...
x (2) ... B 1 0 1 0 B B B B B B B B ...
Ideea de rezolvare:
Marcnd numrul dat din doi n doi, aflm restul mpririi numrului la 2 i l scriem pe
a doua band. Apoi mprim ctul anterior (partea nemarcat din numr) la doi i

51

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
obinem un nou rest pe care l scriem pe banda a doua la nceput (n stnga a ceea ce am
scris anterior).
Pas 1. Marcm primul 1 din x cu 1 i facem un pas dreapta pe prima band.
(Pe a doua band citim B, scriem tot B n loc i staionm.)
1 1' '
q0 , = q1 , ,
B B
Pas 2. Pe a doua band staionm, iar pe prima o parcurgem integral srind 1-urile
marcate, iar pentru fiecare doi de 1 nemarcai, pe primul l marcm, iar pe al doilea l
srim.
1' 1'
q1 , = q1 , , // sarim 1 urile marcate anterior
B B

1'

1'

1'

q1 , = q 2 , , // marcam primul 1
B B
q 2 , = q 2 , , // sarim 1 urile marcate anterior
B B
q 2 , = q1 , , // sarim al doilea 1 si reluam
B B
Pas 3(a). Dac pe prima band citim B n starea n care trebuia s marcm primul 1,
nseamn c am obinut restul 0, deci pe a doua band scriem 0 i facem un pas stnga
(pentru a scrie urmtorul rest pe care l vom obine), iar pe prima band facem un pas
stnga pentru a ne poziiona pe ultima cifr din numr (1 marcat sau nemarcat). Mergem
la pas 4.
B B
q1 , = q3 , ,
B 0
Pas 3(b). Dac pe prima band citim B n starea n care trebuia s srim al doilea 1,
nseamn c am obinut restul 1, deci pe a doua band scriem 1 i facem un pas stnga
(pentru a scrie urmtorul rest pe care l vom obine), iar pe prima band facem un pas
stnga pentru a ne poziiona pe ultima cifr din numr (1 marcat sau nemarcat). Mergem
la pas 4.
B B
q 2 , = q3 , ,
B 1
Pas 4. Pe a doua band staionm (citim B, scriem B n loc), iar pe prima band vrem s
ne ntoarcem stnga pn la nceputul numrului (pn la 1) apoi s facem un pas
dreapta. Ct timp parcurgem 1-uri marcate pstrm starea, iar la primul 1 nemarcat
ntlnit schimbm starea (pentru a ti c nu s-a terminat calculul), apoi n noua stare
parcurgem n continuare spre stnga toate 1-urile marcate i nemarcate, apoi relum pasul
2. Dac tot numrul este marcat (ajungem la 1 fr s fi gsit vreun 1 nemarcat),
nseamn c s-a terminat calculul i mergem n starea final.
52

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

1'

1'

1' '

1' '

1' '

q3 , = q3 , ,
B B
q3 , = q4 , , // am gasit 1 nemarcat
B B

1'

1'

q4 , = q4 , , ; q4 , = q4 , ,
B B
B B
q4 , = q1 , , // reluam pasul 2
B B

q3 , = q5 , , // tot numarul marcat


B B
Pas 5. Demarcm tot x-ul mergnd spre dreapta pe prima band, apoi l parcurgem
integral spre stnga i facem un pas dreapta pe ambele benzi pentru a rmne la nceputul
lor.
1' 1
q5 , = q5 , , // demarcam tot x
B B

q5 , = q6 , ,
B B
q6 , = q6 , ,
B B
q6 , = q7 , , , F = {q7 }
B
B
Complexitatea spaiu:
Avem numrul iniial x i scriem rezultatul care ocup maxim log 2 x.
Rezult C.S. = x + log 2 x.
Complexitatea timp:
Pas 1: Se execut o singur dat i ne deplasm o poziie. Rezult 1.
Pas 2: Se repet pentru fiecare caracter scris pe a doua band, deci de maxim log 2 x ori.
De fiecare dat parcurgem de la stnga la dreapta tot numrul x. Rezult x * log 2 x.
Pas 3: Se repet tot de log 2 x ori, dar ne deplasm cu o singur poziie. Rezult log 2 x.
Pas 4: Se repet de log 2 x ori i de fiecare dat parcurgem de la dreapta spre stnga tot
numrul x. Rezult x * log 2 x.
Pas 5: Parcurgem dus-ntors x-ul. Rezult 2*x pai.

Total:
1 +
* x Rezult C.T. = O(x * log x).
1 + log 2 ( x) *
x +
x + 2

5
pas
pas 1
pas 2 pas 3 pas 4

53

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:
(pentru marcarea cu 1 am folosit x, iar pentru marcarea cu 1 am folosit y)

Rezolvarea (B) (cu adunri)


Enun: Se d un numr n baza 1. S se transforme n baza 2.
Ideea de rezolvare: Pentru fiecare 1 din x cu excepia primului, vom face adunarea
modulo 2 la rezultat cu o unitate.
Pas 1. Marcm cu 1 primul 1 din x, parcurgem tot numrul spre dreapta pn la B, apoi
scriem 2, facem un pas dreapta i scriem 0 i stm pe loc.
Pas 2. Parcurgem banda spre stnga srind toi de 0, 1 i 2, iar cnd ajungem la 1 sau 1
facem un pas dreapta.
Pas 3. (a) Dac mai avem 1 nemarcat din x, l marcm cu 1, ne deplasm dreapta pn la
B, un pas stnga i mergem la pasul 4.
(b) Dac tot x este marcat (suntem pe 2), mergem stnga i demarcm tot x-ul apoi
mergem n starea final.
Pas 4. (Adunm o unitate modulo 2 la rezultat.)
(a) Ct timp citim 1 l transformm n 0 i facem un pas stnga, pas 4(b).
(b) Apoi, dac ntlnim un 0, l transformm n 1 i mergem la pasul 2.
(c) Dac dm de 2 (dup ce am transformat toi de 1 n 0), facem un pas dreapta,
transformm primul 0 la loc n 1, apoi parcurgem banda spre dreapta pn la B (srim
toate 0-urile), adugm nc un 0 pe band i mergem la pasul 2.
(q6 ,1) = (q6 ,0, ) // Pas 4 (a)
(q0 ,1) = (q1 ,1' ' , ) // Pas 1

(q6 ,0) = (q3 ,1, ) // Pas 4 (b)


(q6 ,2) = (q7 ,2, ) // Pas 4 (c)
(q7 ,0) = (q8 ,1, )
(q8 ,0) = (q8 ,0, )
(q8 , B) = (q3 ,0,)
(q4 ,2) = (q9 ,2, ) // Pas 3 (b)
(q9 ,1' ) = (q9 ,1, )
(q9 ,1' ' ) = (q10 ,1,), F = {q10 }

(q1 ,1) = (q1 ,1, )


(q1 , B) = (q2 ,2, )
(q2 , B) = (q3 ,0,)
(q3 , m) = (q3 , m, ), m {0,1,2} // Pas 2
(q3 , n) = (q4 , n, ), n {1' ' ,1' }
(q4 ,1) = (q5 ,1' , ) // Pas 3 (a)
(q5 , m) = (q5 , m, ), m {0,1,2}
(q5 , B) = (q6 , B, )

54

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Complexitatea spaiu:
Avem numrul iniial x i scriem rezultatul care ocup maxim log 2 x.
Rezult C.S. = x + log 2 x.
Complexitatea timp:

)
)
(
(
)
)
(
(
Total:
x + x + x * x + log 2 x + log 2 x +
x
1 + log 2 x + log 2 x + x +



pasii 1+ 2
pas
b
pas
4
(
)
3( b )
pas
a
pas
a
pas
c
pas
3
(
)
4
(
)
4
(
)
2

Rezult C.T. = O(x2).


Aceeai soluie, sub form de graf:
(pentru marcarea cu 1 am folosit x, iar pentru marcarea cu 1 am folosit y)

(*) Rezolvarea (B) (cu adunri) [pe 2 benzi]


Enun: Se d un numr n baza 1. S se transforme n baza 2.
Fie x = 10 (10) = 1010 (2) . Iniial prima band a mainii Turing conine numrul x n baza 1
(10 reprezentat prin 11 de 1), iar a doua band este vid (are doar blank-uri):
x (1) ... B 1 1 1 1 1 1 1 1 1 1 1 B ...
... B B B B B B B B B B B B B ...
La final, benzile vor arta astfel:
x (1) ... B 1 1 1 1 1 1 1 1 1 1 1 B ...
x (2) ... B 1 0 1 0 B B B B B B B B ...
Ideea de rezolvare:
Pentru fiecare 1 din x cu excepia primului, vom face adunarea modulo 2 la rezultat cu o
unitate.
Pas 1. Marcm cu 1 primul 1 din numr i facem un pas dreapta pe prima band. Pe
banda a doua scriem un 0 (rezultatul iniial, ca s putem face adunarea) i facem un pas
dreapta.
1 1' '
q0 , = q1 , ,
B 0

55

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 2(i). Pentru fiecare 1 nemarcat din x, pe prima band l marcm i apoi staionm, iar
pe banda a doua facem un pas stnga (eram pe B, iar acum vom fi pe ultimul caracter din
rezultat) i mergem la pasul 3.
1 1'
q1 , = q2 , ,
B B
Pas 3(a). Ct timp citim 1 pe banda a doua, l transformm n 0 i facem un pas stnga.
1' 1'
q2 , = q2 , ,
1 0
Pas 3(b,c). Dac citim 0 sau B pe banda a doua, l transformm n 1 i mergem la pasul 4.
1' 1'
1' 1'
q2 , = q3 , , ; q2 , = q3 , ,
0 1
B 1
Pas 4. Pe banda a doua ne deplasm dreapta srind toi de 0. Cnd citim B pe banda a
doua, scriem B i staionm, iar pe prima band citim i scriem 1-ul pe care staionasem
i facem un pas dreapta, apoi relum pasul 2.
1' 1'
1' 1'
q3 , = q3 , , ; q3 , = q1 , , // reluam pasul 2
0 0
B B
Pas 2(ii). Cnd tot numrul e marcat (citim B pe prima band), parcurgem prima band
integral spre stnga demarcnd-o, apoi parcurgem integral spre stnga a doua band,
facem un pas dreapta pe ambele benzi i mergem n starea final.
B B
B B
q5 , = q5 , ,
q1 , = q4 , ,
0 0
B B

1'

q4 , = q4 , ,
B B

1' '

q4 , = q5 , ,
B
B

q5 , = q5 , ,
1
1

B B
q5 , = q6 , , , F = {q6 }
B B

Complexitatea spaiu:
Avem numrul iniial x i scriem rezultatul care ocup maxim log 2 x.
Rezult C.S. = x + log 2 x.
Complexitatea timp:
Pas 1: Se execut o singur dat i ne deplasm o poziie. Rezult 1.
Pas 2. Se repet de x ori i ne deplasm cte o poziie. Rezult x.
Pas 3. Se repet de x ori i parcurgem de la dreapta la stnga maxim tot rezultatul.
Rezult x * log 2 x.
Pas 4. Se repet de x ori i parcurgem de la stnga la dreapta maxim tot rezultatul.
Rezult x * log 2 x.
Total: C.T. = O(x * log x).

56

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:
(pentru marcarea cu 1 am folosit x, iar pentru marcarea cu 1 am folosit y)

(*) Problema 11
Se dau dou numere naturale x i y. S se calculeze ridicarea la putere (y^x).
Fie x = 3, y = 2 (reprezentate prin 4, respectiv 3 de 1). Iniial banda arat aa:
... B 1 1 1 1 0 1 1 1 B ...
La final, banda va arta astfel:
... B 1 1 1 1 0 1 1 1 2 1 1 1 1 1 1 1 1 1

B ...

Ideea de rezolvare:
Dup delimitatorul 2, vom calcula pe rnd, pe msur ce marcm cte un 1 din x,
produsul dintre y i rezultatul parial calculat anterior (y la o putere mai mic). Nu vrem
s concatenm rezultatele intermediare, ci vrem s scriem noul rezultat parial astfel nct
s folosim i 1-urile scrise deja pentru rezultatul parial calculat la pasul anterior i s
adugm doar attea cte sunt necesare pn la rezultatul curent.
Deci la un pas oarecare vrem s calculm yk, dar avem deja scris yk-1, deci trebuie s
adugm doar diferena dintre ele, adic yk yk-1 = yk-1 * (y-1). Deci practic trebuie s
nmulim fostul rezultat parial (yk-1) aflat dup delimitatorul 2 cu numrul y-1 pe care l
gsim ntre delimitatorii 0 i 2 (dar la nmulire eliminm un 1 pentru scrierea special n
baza 1 i nc un 1 pentru c trebuie s nmulim doar cu y-1, nu cu tot y, deci vom marca
cu 1 primii doi de 1 din y).
Pas 1. Marcm doi de 1 din x cu 1 (unul pentru scrierea special n baza 1 i cellalt
pentru c la finalul pasului vom fi calculat deja y1), ne deplasm la dreapta (srim x-ul
nemarcat, schimbm starea pentru 0), copiem tot y-ul dintre 0 i 2 la finalul benzii (deci
am calculat y1) dup ce scriem delimitatorul 2. Pas dreapta i marcm cu 1 primul 1 din
rezultatul parial (copia lui y din dreapta lui 2), acesta fiind 1-ul n plus pentru rezultatul
final i nu trebuie folosit la nmuliri. Ne deplasm stnga i demarcm tot y-ul dintre 0 i
2 (care era marcat n urma copierii) i marcm cu 1 primii doi de 1 din y din dreapta lui

57

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
0 (cei doi care nu trebuie s participe la nmulire, dup cum am explicat mai sus), apoi
de deplasm stnga pn la 1 din x i facem un pas dreapta.
(q 0 ,1) = (q1 ,1' , ) // marcam 1 ul in plus din x

(q1 ,1) = (q 2 ,1' , ) // marcam un 1 din x pt copierea lui y


(q 2 ,1) = (q 2 ,1, ) // parcurgem x nemarcat
(q 2 ,0) = (q3 ,0, )
(q3 ,1) = (q 4 ,1' , ) // marcam din y pentru a l copia
(q 4 ,1) = (q 4 ,1, ) // parcurgem y nemarcat
(q 4 , B) = (q5 ,2, ) ; (q 4 ,2) = (q5 ,2, )
(q5 ,1) = (q5 ,1, ) // parcurgem partea scrisa deja din copia lui y
(q5 , B) = (q 6 ,1, ) // scriem pt copia lui y
(q 6 ,1) = (q 6 ,1, ), (q 6 ,2) = (q 6 ,2, ) // parcurgem ce am scris si y ul necopiat inca
(q 6 ,1' ) = (q3 ,1' , ) // reluam copierea lui y
(q3 ,2) = (q 7 ,2, ) // y este complet marcat , deci copiat
(q 7 ,1) = (q8 ,1' ' , ) // marcam 1 ul in plus de la rezultat final
(q8 ,2) = (q9 ,2, )
(q9 ,1' ) = (q9 ,1, ) // demarcam tot y
(q9 ,0) = (q10 ,0, )
(q10 ,1) = (q11 ,1' ' , ), (q11 ,1) = (q12 ,1' ' , ) // marcam primii doi de 1 din y
(q12 ,1' ' ) = (q12 ,1' ' , )
(q12 ,0) = (q12 ,0, )
(q12 ,1) = (q12 ,1, ) // parcurgem x nemarcat
(q12 ,1' ) = (q13 ,1' , )
Pas 2(a). Pentru fiecare 1 nemarcat din x, l marcm cu 1, ne deplasm dreapta, srim 1urile nemarcate din x, 0-ul i cei doi de 1 din y i mergem la pasul 3.
(q13 ,1) = (q14 ,1' , ) // marcam din x

(q14 ,1) = (q14 ,1, ) // parcurgem x nemarcat


(q14 ,0) = (q15 ,0, )
(q15 ,1' ' ) = (q15 ,1' ' , )
Pas 3(a). Pentru fiecare 1 nemarcat din y (dintre 0 i 2), l marcm cu 1, ne deplasm
dreapta, srim 1-urile nemarcate din y, 2-ul i 1-ul din fostul rezultat parial i mergem
la pasul 4.

58

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(q15 ,1) = (q16 ,1' , ) // marcam din y


(q16 ,1) = (q16 ,1, ) // parcurgem y nemarcat
(q16 ,2) = (q16 ,2, )
(q16 ,1' ' ) = (q17 ,1' ' , )
Pas 4(a). (Vrem s copiem fostul rezultat parial la finalul benzii, concatenat cu el nsui
sau cu ultima lui copie.) Pentru fiecare 1 nemarcat din yx-1 (sau generic din yk-1 la
aplicarea nr k a pasului) din dreapta lui 2, l marcm cu 1, ne deplasm dreapta pn la B
(srim 1-urile necopiate nc i 1-urile scrise la pasul curent), scriem 1 (nu putem scrie
1 pentru a nu-i ncurca cu cei necopiai nc i nu putem scrie 1 pentru a nu-i ncurca cu
cei care trebuie re-copiai pentru un alt 1 din y). (Vom face copierea de la stnga la
dreapta.) Apoi ne deplasm stnga, srim toate 1-urile (ce am scris), apoi toate 1-urile
(ce urmeaz a fi copiat), iar cnd ntlnim 1 facem un pas dreapta i relum pasul 4.
(q17 ,1) = (q18 ,1' , ) // marcam din y x1

(q18 ,1) = (q18 ,1, ) // parcurgem ce e necopiat inca


(q18 ,1' ' ) = (q18 ,1' ' , ) // parcurgem ce am scris deja
(q18 , B) = (q19 ,1' ' , )
(q19 ,1' ' ) = (q19 ,1' ' , ) // parcurgem ce am scris deja
(q19 ,1) = (q19 ,1, ) // parcurgem ce e necopiat inca
(q19 ,1' ) = (q17 ,1' , ) // reluam pasul 4(a)
Pas 4(b). Cnd am terminat copierea rezultatului parial anterior suntem pe 1 din
dreapta 1-urilor, ne deplasm stnga i demarcm toi de 1, apoi srim un 1 (cel n
plus pentru scrierea n unar) din noul rezultat parial, 2-ul i toi de 1 din y) pn la 1 din
y, facem un pas dreapta i relum pasul 3(a).
(q17 ,1' ' ) = (q 20 ,1' ' ) // y x 1 complet marcat si copiat

(q 20 ,1' ) = (q 20 ,1, ) // demarcam y x 1


(q 20 ,1' ' ) = (q 21 ,1' ' , )
(q 21 ,2) = (q 22 ,2, )
(q 22 ,1) = (q 22 ,1, ) // parcurgem y nemarcat
(q 22 ,1' ) = (q15 ,1' , ) // reluam pasul 3(a)
Pas 3(b). Cnd toi de 1 din y (dintre 0 i 2) sunt marcai (suntem pe 2), ne deplasm
dreapta, srim un 1, srim toi de 1 (demarcai anterior, dup terminarea copierii),
demarcm toi de 1, ajungem la B, facem un pas stnga. Parcurgem spre stnga, srim
toi de 1 din noul rezultat parial, srim un 1, un 2, demarcm pe toi de 1 din y, apoi
srim spre stnga cei doi de 1 din y, 0-ul i toi de 1 din x, iar cnd ajungem la 1 din x
facem un pas dreapta i relum pasul 2(i).

59

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(q15 ,2) = (q 23 ,2, ) // y complet marcat , inmultirea y * y x 1 efectuata


(q 23 ,1' ' ) = (q 24 ,1' ' , )
(q 24 ,1) = (q 24 ,1, ) // parcurgem fostul rezultat (demarcat anterior la pasul 4)
(q 24 ,1' ' ) = (q 24 ,1, ) // demarcam ce am scris pt y x y x 1
(q 24 , B) = (q 25 , B, )
(q 25 ,1) = (q 25 ,1, ) // parcurgem tot y x
(q 25 ,1' ' ) = (q 25 ,1' ' , )
(q 25 ,2) = (q 26 ,2, )
(q 26 ,1' ) = (q 26 ,1, ) // demarcam y
(q 26 ,1' ' ) = (q 26 ,1' ' , )
(q 26 ,0) = (q 27 ,0, )
(q 27 ,1) = (q 27 ,1, ) // parcurgem x nemarcat
(q 27 ,1' ) = (q13 ,1' , ) // reluam pasul 2(i )
Pas 2(b). Cnd toi de 1 din x sunt marcai am terminat calculul. Suntem pe 0 (la finalul
lui x), ne deplasm stnga i demarcm toi de 1 din x, apoi ajungem la B, parcurgem
spre dreapta srind 0, 2 i 1-urile, iar 1-urile de la y i de la rezultat le demarcm, apoi
cnd ajungem la B din dreapta, parcurgem integral spre stnga toat banda, un pas
dreapta i mergem n starea final.
(q13 ,0) = (q28 ,0, ) // x complet marcat , gata calculul y x

(q28 ,1' ) = (q28 ,1, ) // demarcam x


(q28 , B) = (q29 , B, )
(q29 ,1) = (q29 ,1, ) ; (q29 ,0) = (q29 ,0, ) ; (q29 ,2) = (q29 ,2, )
(q29 ,1' ' ) = (q29 ,1, ) // demarcam 1 urile speciale din y si din rezultat
(q29 , B) = (q30 , B, )
(q30 ,1) = (q30 ,1, ) ; (q30 ,0) = (q30 ,0, ) ; (q30 ,2) = (q30 ,2, )
(q30 , B) = (q31 , B, ), F = {q31}
Complexitatea spaiu:
Avem numerele iniiale i rezultatul calculat. Rezult C.S. = x + y + x*y.
Complexitatea timp:
Pas 1: Se execut o singur dat. Ne deplasm x+y pentru a scrie delimitatorul i nc y*y
pentru a copia y-ul la finalul benzii. Rezult x+y+y2.
Pas 2: Se repet de x ori i ne deplasm maxim x csue, apoi executm pasul 3, apoi
pentru demarcrile finale de la pasul 2(b) ne deplasm toat banda dus-ntors 2*(x+y+yx).
Pas 3. Se repet de y ori i ne deplasm maxim y csue, apoi executm pasul 4, apoi
pentru demarcarea de la pasul 3(b) ne deplasm 2*yx+y+x pai.

60

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 4: Se repet de yx-1 ori i ne deplasm dus-ntors maxim 2*(yx yx-1) csue. Apoi
pentru demarcare ne deplasm yx-1+y.
Total : C.T . = x + y + y 2 +

pas1

x 1
x
x 1
x 1
x
+ x * x + y * y + y * y y
+ y + y + 2* y + y + x + 2* x + y + yx

pas 4 ( b )
pas 3 ( b )
pas 2 ( b )
4 (a)
pas

3 (a)
pas

) (

) (

pas 2 ( a )

Funcia dominant este x*y*y *yx (pentru c paranteza de la pasul 4(a) < yx)
=> Rezult C. T. = O(x * y2x).
x-1

Aceeai soluie, sub form de graf:


(pentru marcarea cu 1 am folosit x, iar pentru marcarea cu 1 am folosit y)

61

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 5 ~
Problema 12
Se d un numr natural x. S se calculeze

x .

Rezolvarea (A) (prin ncercri) [pe 2 benzi]


Fie x = 10 (reprezentat prin 11 de 1). Rezultatul va fi 3 (reprezentat prin 4 de 1).
Iniial benzile mainii Turing arat aa:
x
B 1 1 1 1 1 1 1 1 1 1 1 B
B B B B B B B B B B B B B
La final, benzile vor arta astfel:
2
x
B 1 1 1 1 1 1 1 1 1 1 1 B y
x

B 1

B B B B B B B B

y 0,1,2,3,..., x

Ideea de rezolvare:
Pas 1. Pe prima band transformm primul 1 n 1 i facem un pas dreapta, iar pe a doua
band adugm un 1 i stm pe loc.
Pas 2(a). Dac dm de 1 pe prima band, atunci vom calcula ptratul numrului de pe B2
prin parcurgerea unitilor din B1 (pentru a testa dac y2 a ajuns la valoarea lui x).
Pas (*). Pentru fiecare 1 nemarcat din B2, l marcm cu 1, mergem pe B2 n stnga pn
la B (srind toi 1), un pas dreapta, apoi parcurgem simultan B1 i B2.
(*a) Dac ntlnim B doar pe B2, mergem la pasul 3.
(*b) Dac ntlnim B doar pe B1, mergem la pasul 4.
(*c) Dac ntlnim B simultan pe B1 i pe B2, facem un pas stnga pe B2 pentru a
verifica dac acea band este complet marcat. (*i) Dac da (avem fix y2 = x), adugm
un 1 n plus pe B2 (cel n plus de la scrierea n unar), apoi mergem la pasul 5. (*ii) Dac
nu, mergem la pasul 4.
Pas 3. Pe B2 mergem stnga (srim toi de 1) pn la 1, un pas dreapta, relum pasul (*).
Pas 4. Pe B2 mergem dreapta pn la B, apoi mergem la pasul 5. (Ptratul numrului
curent de pe B2 este strict mai mare dect x, deci ar trebui s scdem o unitate pentru a
avea partea ntreag inferioar a radicalului, dar pstrm acel 1 ca fiind cel n plus la
scrierea special n unar.)
Pas 5. Mergem stnga pn la nceputul ambelor benzi demarcnd tot i trecem n stare
final.
Pas (**). Cnd B2 este complet marcat (adic s-a terminat for-ul de la pasul (*)),
adugm un 1 pe B2, demarcm spre stnga tot B2. Pe B1 mergem stnga pn la 1, pas
dreapta pe ambele benzi i relum pasul 2(a).
Pas 2(b). Dac dm de B pe prima band (am avut x=0), atunci demarcm 1 de pe
prima band i mergem n starea final (rspunsul de pe a doua band este tot 0,
reprezentat printr-un 1).

62

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

1 1' '

q 0 , = q1 , , // Pas 1
B 1
1 1
q1 , = q 2 , , // Pas 2(a), (*)
1 1'
1 1
q 2 , = q 2 , ,
1' 1'

q6 , = q6 , , , m {1' ,1}// Pas 5


m
1

1 1

q 2 , = q3 , ,
B B
1
1

q3 , = q3 , , , m {1' ,1}
m m

q3 , = q8 , , // Pas (*c)
B
B

1 1
q6 , = q6 , ,
B B
1
1' '
q6 , = q7 , , , F = {q7 }
B B

B B
q8 , = q9 , , // Pas (*i )
1' 1'
B B
q9 , = q6 , ,
B 1
B B
q8 , = q5 , , // Pas (*ii )
1 1

q3 , = q 4 , , // Pas (*a)
B
B

q 4 , = q 4 , , // Pas 3
1
1

1 1
q 4 , = q1 , , // reluam (*)
1' 1'

q1 , = q10 , , // Pas (**)


B
1


1
1

q10 , = q10 , ,
1'
1

1
1

q10 , = q10 , ,
B
B

q3 , = q5 , , , m {1' ,1}// Pas (*b)


m
m

B B
q5 , = q5 , , , m {1' ,1}// Pas 4
m m
B B
q5 , = q 6 , ,
B B

1' '

1' '

q10 , = q1 , , // reluam 2(a)


B
B

B B
q1 , = q6 , , // Pas 2 (b)
1 1

Complexitatea spaiu:
Avem numrul iniial i rezultatul calculat. Rezult C.S. = x + x .

Complexitatea timp:
Pentru a nmuli numrul y de pe B2 cu el nsui (fr a-l avea copiat i altundeva) i a
pune rezultatul pe o alt band (aici parcurgere pe B1, n loc de scriere) complexitatea
este y2 (pentru c de y ori parcurgem dus-ntors tot y-ul) .
Cea mai mare valoare pe care o ia y este aproximativ x , deci pentru a-l ridica la ptrat
o singur dat avem complexitatea ( x )2 = x. Dar avem aproximativ x ncercri pn
y ajunge la valoarea final.
Rezult n total C.T. = x x .

63

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:
(pentru marcarea cu 1 am folosit x, iar pentru marcarea cu 1 am folosit y)

(*) Rezolvarea (B) (cu sum de nr. impare) [pe 2 benzi]

Enun: Se d un numr natural x. S se calculeze x .


Fie x = 10 (reprezentat prin 11 de 1). Rezultatul va fi 3 (reprezentat prin 4 de 1).
Iniial benzile mainii Turing arat aa:
x
B 1 1 1 1 1 1 1 1 1 1 1 B
B B B B B B B B B B B B B
La final, benzile vor arta astfel:
y

B 1

[1 + 2 * (k 1)]
k =1

B 1

B B B B B B B B

y 1,2,3,...,

x}

Ideea de rezolvare: Orice numr ptrat perfect k2 poate fi scris ca suma primelor k
numere impare: k 2 = 1 + 3 + 5 + ... + (2 * k 1) .

numere

Deci ct timp este posibil, vom scdea din X primele numere impare i de fiecare dat
vom incrementa rezultatul de pe B2. Acest numr de pe B2 va ajunge chiar x .

Pas 1. Pe B1 srim spre dreapta peste primul 1 din x (cel n plus de la scrierea n unar) i
scriem un 1 pe B2 (primul numr impar).
Pas 2. (Parcurgem n x numrul impar curent: 2*k1) Pentru primul 1 de pe B2, dac
avem 1 pe B1 facem un pas dreapta pe ambele benzi. Apoi ct timp citim 1 pe ambele
benzi, avem circuit ntre dou stri, n una facem pas dreapta doar pe B1, iar n cealalt
facem pas dreapta pe ambele benzi.
64

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Pas 3. Dac ajungem la B pe B2, iar pe B1 nc avem 1, atunci adugm un 1 pe B2 i
parcurgem integral spre stnga B2 pn la B, apoi facem un pas dreapta i relum pasul 2
(pentru a ncerca s scdem din x urmtorul numr impar).
Pas 4. (a) Dac pe B2 mai avem 1, iar pe B1 ajungem la B n una din cele dou stri ntre
care aveam circuit la pasul 2, nseamn c numrul impar curent nu poate fi cuprins n
ntregime n x. Considerm acest 1 n plus cel de la scrierea n unar a rezultatului.
Mergem la pasul 5.
(b) Dac pe B1 i B2 dm simultan de B (nseamn c x este ptrat perfect) , mai
adugm un 1 pe B2, pentru scrierea n unar, apoi mergem la pasul 5.
(c) Dac x a fost 0, adic am ntlnit B pe B1 imediat dup aplicarea pasului 1, mergem
n starea final.
Pas 5. Ne ntoarcem stnga pe ambele benzi pn la B, apoi un pas dreapta, starea final.

q0 , = q1 , , // Pas 1
B 1
1 // Pas 2; adunam
1 + 2 * ( y 1)

q1 , = q 2 , ,
1
1

1 1
q 2 , = q3 , ,
1 1
1 1
q3 , = q 2 , ,
1 1

1 // Pas 3; < x,
incrementam y

q 2 , = q 4 , ,
1
B

1 1
q 4 , = q 4 , ,
1 1
1 1
q 4 , = q1 , , // reluam pas 2
B B

B // Pas 4(a );
>x

B // Pas 4(b);
= x ( p. p.)

B // Pas 4(c);
x=0

q 2 , = q5 , ,
1 1
q3 , = q5 , ,
1 1
q 2 , = q5 , ,
B 1
q1 , = q6 , ,
1 1
1

q5 , = q5 , , // Pas 5
1
1


1 1
q5 , = q5 , ,
B B
B B
q5 , = q6 , , , F = {q6 }
B B

Complexitatea spaiu:
Avem numrul iniial i rezultatul calculat. Rezult C.S. = x + x .
Complexitatea timp:
Pe B1 o parcurgem o singur dat integral de la stnga la dreapta pe msur ce cuprindem
n x numerele impare (pasul 2), iar n acest timp pe B2 o parcurgem dus-ntors pentru
fiecare dintre numerele impare, deci n total pe B2 facem aproximativ 2*x pai.
Iar apoi la pasul 5 le parcurgem integral spre stnga, deci facem aproximativ x + x pai.
Rezult C.T. = O(X).

65

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Aceeai soluie, sub form de graf:

Problema 13
Se dau x i y nr. nat. S se calculeze cmmdc(x,y).
Rezolvarea (A) (cu alg. Euclid cu resturi) [pe 3 benzi]

// TO DO

Problema 14
Se d x nr. nat. S se accepte dac este numr prim.
Rezolvarea (A) (cu divizori de la 2 la x/2) [pe 2 benzi]

// TO DO

(*) Rezolvarea (B) (cu Ciurul lui Eratostene) [pe 2 benzi]

// TO DO

66

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 6 ~
(Programe standard)
Instruciuni posibile :
V V
V V +1
V 1 , dac V 1
=
0 , dac V = 0
IF V 0 GOTO L

V V 1

Etichete pentru salturi n program: L1 , L2 , L3 , ...


Cu eticheta special E (exit) se iese de tot din program.
Variabile
- de intrare : X 1 , X 2 , X 3 , ...
- de ieire : Y1 , Y2 , Y3 , ... (dar n general avem doar una, Y)
- interne / auxiliare / de lucru : Z1 , Z 2 , Z 3 , ...
Variabilele de ieire i cele auxiliare au iniial (la intrarea n program) valoarea 0.

Problema 1 : Y X
1
2
3
4
5
6
7
8
9
10

IF X 0 GOTO L1
Z0 Z0 + 1
IF Z 0 0 GOTO E

[L1 ]: Y Y + 1

GOTO E

(macroinstructiune)

X X 1
Z1 Z1 + 1
IF X 0 GOTO L1

[L2 ]: X X + 1
Z1 Z1 1

IF Z1 0 GOTO L2

Fiecare unitate din numrul X o mutm n Y (ct timp X este nenul, l decrementm pe X
i l incrementm pe Y). Vrem ca la ieirea din program variabilele de intrare s nu i

67

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
piard valoarea. De aceea, simultan cu cele dou operaii anterioare incrementm i o
variabil auxiliar Z1.
Apoi, pentru a reface valoarea lui X cnd acesta a devenit 0: l incrementm pe X i l
decrementm pe Z1 ct timp Z1 este nenul.
Complexitatea timp:
La eticheta L 1 revenim de X ori i de fiecare dat executm 4 instruciuni simple
(rndurile 4 7 din program). La eticheta L 2 revenim tot de X ori i de fiecare dat
executm 3 instruciuni simple (rndurile 8-10 din program).
Rezult 4*X + 3*X => O(X).

Problema 2 : Y X 1 + X 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

IF X 1 0 GOTO L1
GOTO L2

[L1 ]: Y Y + 1
X 1 X 1 1
Z1 Z1 + 1
IF X 1 0 GOTO L1

[L3 ]: X 1 X 1 + 1
Z1 Z1 1

IF Z1 0 GOTO L3

[L2 ]: IF X 2 0 GOTO L4
GOTO E
[L4 ]: Y Y + 1
X 2 X 2 1
Z2 Z2 +1
IF X 2 0 GOTO L4

[L5 ]: X 2 X 2 + 1
Z 2 Z 2 1

IF Z 2 0 GOTO L5

Dac X 1 este nenul, la eticheta L 1 l decrementm cu cte o unitate i incrementm Y i


Z 1 pn ce X 1 devine 0. Apoi la eticheta L 3 restabilim X 1 la valoarea sa iniial cu
ajutorul lui Z 1 .
La eticheta L 2 verificm dac X 2 este nenul. Dac da, procedm la fel ca pentru X 1 , la
eticheta L 4 l decrementm pe X 2 i incrementm Y i Z 2 , pn cnd X 2 devine 0. Apoi
la eticheta L 5 restabilim valoarea lui X 2 cu ajutorul lui Z 2 .

68

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Complexitatea timp:
La eticheta L 1 revenim de X 1 ori i de fiecare dat executm 4 instruciuni simple
(rndurile 3 6 din program). La eticheta L 3 revenim tot de X 1 ori i de fiecare dat
executm 3 instruciuni simple (rndurile 7 9 din program).
La eticheta L 4 revenim de X 2 ori i de fiecare dat executm 4 instruciuni simple
(rndurile 12 15 din program). La eticheta L 5 revenim tot de X 2 ori i de fiecare dat
executm 3 instruciuni simple (rndurile 16 18 din program).
Rezult 4*X 1 + 3*X 1 + 4*X 2 + 3*X 2 => O(X 1 + X 2 ).

Problema 3 : Y X 1 * X 2
1

IF X 1 0 GOTO L1

GOTO E
[L1 ]: IF X 2 0 GOTO L2

3
5

GOTO E
[L2 ]: X 1 X 1 1

Z1 Z1 + 1

[L3 ]: Y Y + 1

X 2 X 2 1

Z2 Z2 +1

10

IF X 2 0 GOTO L3

11

[L4 ]: X 2 X 2 + 1

12

Z 2 Z 2 1

13

IF Z 2 0 GOTO L4

14

IF X 1 0 GOTO L2

15

[L5 ]: X 1 X 1 + 1

16

Z1 Z1 1

17

IF Z1 0 GOTO L5

Dac numerele X 1 i X 2 sunt nenule, de X 1 ori (eticheta L 2 ) valoarea lui X 2 o mutm n


Z 2 i l incrementm pe Y simultan (eticheta L 3 ), apoi restabilim valoarea lui X 2 cu
ajutorul lui Z 2 (eticheta L 4 ). La final, restabilim valoarea lui X 1 cu ajutorul lui Z 1
(eticheta L 5 ).
Complexitatea timp:
La eticheta L 2 revenim de X 1 ori i de fiecare dat executm 3 instruciuni simple
(rndurile 5, 6 i 14 din program), plus cele dou poriuni recursive: (a) la eticheta L 3
revenim de X 2 ori i de fiecare dat executm 4 instruciuni simple (rndurile 7 10 din
program); apoi (b) la eticheta L 4 revenim tot de X 2 i de fiecare dat executm 3
instruciuni simple (rndurile 11 13 din program).
69

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
La eticheta L 5 revenim de X 1 ori i de fiecare dat executm 3 instruciuni simple
(rndurile 15 17 din program).
Rezult X 1 * (3 + 4*X 2 + 3*X 2 ) + 3*X 1 => O(X 1 * X 2 ).
1, dac X 1 = X 2
0, dac X 1 X 2

Problema 4 : Y f = ( X 1 , X 2 ) =
1
2
3
4

[L0 ]: IF X 1 0 GOTO L1
IF X 2 0 GOTO L2

// X 1 = 0, X 2 0

Y Y +1
GOTO L2 // X 1 = 0, X 2 = 0

[L1 ]: IF X 2 0 GOTO L3

GOTO L2

7
8
9
10
11
12
13
14
15
16

// X 1 0, X 2 0

// X 1 0, X 2 = 0

[L3 ]: X 1 X 1 1

X 2 X 2 1
Z Z +1
GOTO L0

[L2 ]: IF Z 0 GOTO L4
GOTO E
[L4 ]: X 1 X 1 + 1
X 2 X 2 +1
Z Z 1
IF Z 0 GOTO L4

Dac numerele X 1 i X 2 sunt nenule (eticheta L 1 ), le decrementm simultan i


incrementm Z (eticheta L 3 ), apoi revenim la nceputul programului (eticheta L 0 ) pentru
a testa iar dac vreo unul din cele dou numere a ajuns la 0.
Dac X 1 este 0 (dup zero sau mai multe treceri prin recursivitatea de la L 3 ), l testm i
pe X 2 . Dac X 2 este nenul, atunci numerele sunt diferite i returnm Y = 0, iar dac i X 2
este 0, atunci numerele sunt egale i returnm Y = 1.
Dac X 1 este nenul, mergem la eticheta L 1 i l testm i pe X 2 . Dac X 2 este i el nenul
mergem la eticheta L 3 explicat mai sus, iar dac X 2 este 0, atunci numerele sunt diferite
i returnm Y = 0.
Dup ce decidem valoarea lui Y i ieim din recursivitatea etichetei L 0 , mergem la
eticheta L 2 unde l testm pe Z pentru a ti dac am trecut vreodat prin L 3 (scderile
simultane). Dac Z este 0, atunci ieim direct din program, iar dac Z este nenul, atunci
mergem la eticheta L 4 unde restabilim valorile iniiale ale lui X 1 i X 2 cu ajutorul lui Z.

70

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Complexitatea timp:
La eticheta L 0 revenim pn cnd cel puin unul dintre numerele X 1 i X 2 devine 0, adic
de min{X 1 , X 2 } ori i de fiecare data executm 6 instruciuni simple (rndurile 1, 5, 7
10 din program). Apoi ieim din aceast recursivitate (pe rndurile 2, 4 sau 6) i, dac
este cazul s restabilim valoarea numerelor, revenim la eticheta L 4 de Z = min{X 1 , X 2 }
ori i de fiecare dat executm 4 instruciuni simple (rndurile 13 16 din program).
Rezult 6*min{X 1 , X 2 } + 4*min{X 1 , X 2 } => O(min{X 1 , X 2 }).
1, dac X par
0, dac X impar

Problema 5 : Y f2 ( X ) =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

[L0 ] : IF

X 0 GOTO L1

Y Y +1
GOTO L2

// X par

[L1 ] : X X 1

Z Z +1
IF X 0 GOTO L3
GOTO L2

[L3 ] : X X 1

// X impar

Z Z +1
GOTO L0

[L2 ] : IF Z 0 GOTO L4
GOTO E
[L4 ] : X X + 1
Z Z 1
IF Z 0 GOTO L4

Ct timp X este nenul, l decrementm pe X i l incrementm pe Z. Dac X devine 0


dup ce am sczut un numr par (inclusiv 0) de uniti nseamn c X este numr par,
returnm Y = 1 i ieim din recursivitatea lui L 0 (rndul 3 din program). Iar dac X
devine 0 dup ce am sczut un numr impar de uniti nseamn c X este un numr
impar, returnm Y = 0 i ieim din recursivitate (rndul 7 din program).
Apoi, dac e cazul s refacem valoarea lui X (adic dac era nenul iniial), mergem la
eticheta L 4 i mutm la loc unitile lui X cu ajutorul lui Z.
Complexitatea timp:
La eticheta L 0 revenim dup ce am sczut dou uniti din X, deci n total de X/2 ori i de
fiecare dat executm 7 instruciuni simple (rndurile 1, 4 6, 8 10). Apoi, dac e
cazul, revenim de X ori la eticheta L 4 i de fiecare dat executm 3 instruciuni simple
(rndurile 13 15 din program). Rezult (X/2)*7 + 3*X => O(X).

71

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
1, dac X 1 < X 2
0, dac X 1 X 2

Problema 6 : Y f < ( X 1 , X 2 ) =

Observm c dac X 2 = 0, suntem sigur pe a doua ramur a funciei (pentru c 0 nu poate


fi mai mare strict dect un numr natural X 1 , indiferent de valoarea acestuia).
De aceea, ar fi mai eficient s-l testm nti pe X 2 .
1
2
3
4
5
6

[L0 ] : IF

X 2 0 GOTO L1

GOTO L2

[L1 ] : IF

// X 1 X 2

X 1 0 GOTO L3

// X 1 0, X 2 0

Y Y +1
GOTO L2 // X 1 < X 2

[L3 ] : X 1 X 1 1

X 2 X 2 1
Z Z +1
GOTO L0

7
8
9
10
11
12
13

[L2 ] : IF Z 0 GOTO L4

14
15

Z Z 1
IF Z 0 GOTO L4

GOTO E
[L4 ] : X 1 X 1 + 1
X2 X2 +1

Dac numerele X 1 i X 2 sunt nenule (eticheta L 1 ), le decrementm simultan i


incrementm Z (eticheta L 3 ), apoi revenim la nceputul programului (eticheta L 0 ) pentru
a testa iar dac vreo unul din cele dou numere a ajuns la 0.
Dac X 2 este 0 tim c X 1 X 2 , deci returnm Y = 0 i ieim din recursivitatea lui L 0
(rndul 2 din program).
Iar dac X 2 este nenul, mergem la eticheta L 1 i l testm i pe X 1 . Dac X 1 este i el
nenul mergem la eticheta L 3 explicat mai sus, iar dac X 1 este 0, atunci avem X 1 < X 2
i returnm Y = 1.
Dup ce decidem valoarea lui Y i ieim din recursivitatea etichetei L 0 , mergem la
eticheta L 2 unde l testm pe Z pentru a ti dac am trecut vreodat prin L 3 (scderile
simultane). Dac Z este 0, atunci ieim direct din program, iar dac Z este nenul, atunci
mergem la eticheta L 4 unde restabilim valorile iniiale ale lui X 1 i X 2 cu ajutorul lui Z.
Complexitatea timp:
La eticheta L 0 revenim pn cnd cel puin unul dintre numerele X 1 i X 2 devine 0, adic
de min{X 1 , X 2 } ori i de fiecare data executm 6 instruciuni simple (rndurile 1, 3, 6 9
din program). Apoi ieim din aceast recursivitate (pe rndurile 2 sau 5) i, dac este

72

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
cazul s restabilim valoarea numerelor, revenim la eticheta L 4 de Z = min{X 1 , X 2 } ori i
de fiecare dat executm 4 instruciuni simple (rndurile 12 15 din program).
Rezult 6*min{X 1 , X 2 } + 4*min{X 1 , X 2 } => O(min{X 1 , X 2 }).
1, dac X 1 X 2
0, dac X 1 > X 2

Problema 7 : Y f ( X 1 , X 2 ) =

Observm c dac X 1 = 0, suntem sigur pe prima ramur a funciei (pentru c 0 nu poate


fi mai mare strict dect un numr natural X 2 , indiferent de valoarea acestuia).
De aceea, ar fi mai eficient s-l testm nti pe X 1 .
1

[L0 ] : IF X 1 0 GOTO L1

2
3
4
5
6

Y Y +1
GOTO L2 // X 1 X 2

7
8
9
10
11
12
13
14
15

X 2 X 2 1
Z Z +1
GOTO L0

[L1 ] : IF X 2 0 GOTO L3
GOTO L2

// X 1 0, X 2 0

// X 1 > X 2

[L3 ] : X 1 X 1 1

[L2 ] : IF Z 0 GOTO L4
GOTO E
[L4 ] : X 1 X 1 + 1
X 2 X 2 +1
Z Z 1
IF Z 0 GOTO L4

Dac numerele X 1 i X 2 sunt nenule (eticheta L 1 ), le decrementm simultan i


incrementm Z (eticheta L 3 ), apoi revenim la nceputul programului (eticheta L 0 ) pentru
a testa iar dac vreo unul din cele dou numere a ajuns la 0.
Dac X 1 este 0 tim c X 1 X 2 , deci returnm Y = 1 i ieim din recursivitatea lui L 0
(rndul 3 din program).
Iar dac X 1 este nenul, mergem la eticheta L 1 i l testm i pe X 2 . Dac X 2 este i el
nenul mergem la eticheta L 3 explicat mai sus, iar dac X 2 este 0, atunci avem X 1 > X 2
i returnm Y = 0.
Dup ce decidem valoarea lui Y i ieim din recursivitatea etichetei L 0 , mergem la
eticheta L 2 unde l testm pe Z pentru a ti dac am trecut vreodat prin L 3 (scderile
simultane). Dac Z este 0, atunci ieim direct din program, iar dac Z este nenul, atunci
mergem la eticheta L 4 unde restabilim valorile iniiale ale lui X 1 i X 2 cu ajutorul lui Z.

73

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Complexitatea timp:
La eticheta L 0 revenim pn cnd cel puin unul dintre numerele X 1 i X 2 devine 0, adic
de min{X 1 , X 2 } ori i de fiecare data executm 6 instruciuni simple (rndurile 1, 4, 6 9
din program). Apoi ieim din aceast recursivitate (pe rndurile 3 sau 5) i, dac este
cazul s restabilim valoarea numerelor, revenim la eticheta L 4 de Z = min{X 1 , X 2 } ori i
de fiecare dat executm 4 instruciuni simple (rndurile 12 15 din program).
Rezult 6*min{X 1 , X 2 } + 4*min{X 1 , X 2 } => O(min{X 1 , X 2 }).

Problema 8 : Y X 1 X 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

[L0 ] : IF

X 1 0 GOTO L1

IF X 2 0 GOTO L2

// X 1 = 0, X 2 0, Y X 2 X 1

GOTO L3

// X 1 = 0, X 2 = 0, Y 0

[L1 ] : IF

X 2 0 GOTO L4

GOTO L5

[L4 ] : X 1 X 1 1

// X 1 0, X 2 0
// X 1 0, X 2 = 0, Y X 1 X 2

X 2 X 2 1
Z0 Z0 + 1
GOTO L0

[L2 ] : Y Y + 1
X 2 X 2 1
Z2 Z2 + 1
IF X 2 0 GOTO L2

[L6 ] : X 2 X 2 + 1

Z 2 Z 2 1
IF Z 2 0 GOTO L6
GOTO L3

[L5 ] : Y Y + 1
X 1 X 1 1
Z1 Z1 + 1
IF X 1 0 GOTO L5

74

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
22
23
24
25
26
27
28
29
30

[L7 ] : X 1 X 1 + 1
Z1 Z1 1
IF Z1 0 GOTO L7

[L3 ] : IF Z 0 0 GOTO L8
GOTO E
[L8 ] : X 1 X 1 + 1
X2 X2 +1
Z 0 Z 0 1
IF Z 0 0 GOTO L8

Dac X 1 este nenul, l testm i pe X 2 (eticheta L 1 ).


- Dac i X 2 este nenul, mergem la eticheta L 4 , unde decrementm simultan X 1 i
X 2 i incrementm Z 0 , apoi ne ntoarcem la nceputul programului (eticheta L 0 )
pentru a testa iar numerele.
- Dac n schimb X 2 = 0, atunci mergem la eticheta L 5 , unde Y va obine valoarea
curent din X 1 i n acelai timp incrementm Z 1 . Apoi la eticheta L 7 mutm la
loc n X 1 valoarea lui Z 1 .
Dac X 1 este 0 l testm i pe X 2 .
- Dac X 2 este nenul, mergem la eticheta L 2 , unde Y va obine valoarea curent din
X 2 i n acelai timp incrementm Z 2 . Apoi la eticheta L 6 mutm la loc n X 2
valoarea lui Z 2 .
- Dac i X 2 este 0 (nseamn c numerele au fost egale, deci Y va rmne 0),
mergem la eticheta L 3 , unde verificm dac am fcut vreodat decrementarea
simultan de la eticheta L 4 , adic dac Z 0 este nenul. Dac Z 0 = 0, ieim de tot
din program. Altfel, la eticheta L 8 mutm valoarea lui Z 0 napoi n X 1 i n X 2 .
Complexitatea timp:
- La eticheta L 0 revenim pn cnd cel puin unul dintre numerele X 1 i X 2 devine 0,
adic de Z 0 = min{X 1 , X 2 } ori i de fiecare data executm 6 instruciuni simple
(rndurile 1, 4, 6 9 din program). Apoi ieim din aceast recursivitate (pe rndurile 2, 3
sau 5).
- Pentru a muta n Y valoarea diferenei, revenim la eticheta L 2 (dac X 1 < X 2 ) sau la
eticheta L 5 (dac X 1 > X 2 ) de |X 1 X 2 | ori i de fiecare dat executm 4 instruciuni
simple (rndurile 10 13, respectiv 18 21 din program).
- Apoi pentru a restabili valoarea n X 2 cu ajutorul lui Z 2, sau valoarea n X 1 cu ajutorul
lui Z 1 , revenim la eticheta L 6 , respectiv L 7 tot de |X 1 X 2 | ori i de fiecare dat
executm 3 instruciuni simple (rndurile 14 16, respectiv 22 24 din program).
- n oricare dintre cele 3 cazuri, mergem la eticheta L 3 pentru a testa dac Z 0 este nenul
(adic dac am ajuns cel puin o dat la scderea simultan din L 4 ). Dac nu, ieim din
program. Dac da, revenim la eticheta L 8 de Z 0 = min{X 1 , X 2 } ori i de fiecare dat
executm 4 instruciuni simple (rndurile 27 30 din program).
Rezult 6*min{X 1 , X 2 } + 4*|X 1 X 2 | + 3*|X 1 X 2 | + 4*min{X 1 , X 2 }
=> O(min{X 1 , X 2 } + |X 1 X 2 |) = O(max{X 1 , X 2 }).

75

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 7 ~
Problema 9 : Y X 1 X

[ L ] : IF X 1 0 GOTO L2
1 1
IF X 2 0 GOTO E
2
GOTO L1
3
4 [ L2 ] : IF X 2 0 GOTO L3
Y Y +1
5
GOTO E
6
7 [ L3 ] : Z 0 Z 0 + 1

// 0 X 2 = 0
// pentru 0 0 cicleaza
// X 1 0, X 2 0
// X 1 = 1
0

// puterea anterioara

// De X 2 ori ...
8 [ L4 ] : X 2 X 2 1
Z2 Z2 + 1
9
10
[ L5 ] : X 1 X 1 1
// ... Y devine Z 0 * X 1 ...
11
Z1 Z1 + 1
12
[ L6 ] : Y Y + 1
// (de X 1 ori adaugam Z 0 la Y )
13
Z 0 Z 0 1
14
Z3 Z3 + 1
15
IF Z 0 0 GOTO L6
16
17
18
19
20
21
22
23
24
25
26

IF X 1 0 GOTO L7
Z3 0

[ L0 ] : Z 3 Z 3 1

IF Z 3 0 GOTO L0

GOTO L8
[ L7 ] : Z 0 Z 0 + 1

// " reparam" L6

Z 3 Z 3 1
IF Z 3 0 GOTO L7
IF X 1 0 GOTO L5
[ L8 ] : X 1 X 1 + 1

// " reparam" L5

Z1 Z1 1
IF Z1 0 GOTO L8

76

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
IF X 2 0 GOTO L9

27
28
29

GOTO L10

// ... Z 0 devine Y , iar Y devine 0 (daca X 2 0 ) ...

[ L9 ] : Z 0 Z 0 + 1
Y Y 1
IF Y 0 GOTO L9

30
31
32

IF X 2 0 GOTO L4
[ L10 ] : X 2 X 2 + 1

33
34
35

// " reparam" L4

Z 2 Z 2 1
IF Z 2 0 GOTO L10

- Dac ambele numere sunt 0, programul cicleaz.


- Pentru baz 0 i putere nenul returnm 0, iar pentru baz nenul i putere 0 returnm 1.
- Dac ambele numere sunt nenule, pornind de la Y = 1, de X 2 ori (eticheta L 4 ) nmulim
X 1 cu fostul rezultat Z 0 (rndurile 10 26) i punem valoarea napoi n Z 0 (rndurile 29
31). La finalul calculului, refacem valoarea lui X 2 (rndurile 33 35).
Pentru a face o nmulire, de X 1 ori (eticheta L 5 ) adugm Z 0 uniti la Y (rndurile 12
15) i refacem valoarea lui Z 0 (rndurile 16 22), iar apoi refacem valoarea lui X 1
(rndurile 24 26).
Complexitatea timp:
Paii cei mai costisitori ca timp sunt cei pentru nmuliri:
2
3
X
X 1 + ( X 1 ) + ( X 1 ) + ... + ( X 1 ) 2

prima
inmultire

a 2 a
inmultire

a 3 a
inmultire

a X 2 a
inmultire

Funcia dominant este cea de la ultima nmulire => C.T. = O( X 1 2 ).


X

Obs: Dac n loc s scriem explicit pentru fiecare nmulire complexitatea obinut i apoi
s pstrm funcia cea mai mare, am fi aproximat toate nmulirile cu cazul cel mai ru i
am fi nmulit acea funcie cu numrul de reveniri la eticheta L 4 , atunci am fi obinut
X
C.T . = O X 2 * X 1 2 . Funcia de mai sus reprezint ns o aproximare mai exact (fa de
cea de aici, de la observaie) a numrului propriu-zis de pai fcui de program.

Problema 10 : Y1 X 1 / X 2 , Y2 = X 1 % X 2
1
2
3
4
5

[L0 ]: IF X 2 0 GOTO L1
GOTO L0

// ciclam

[L1 ]: IF X 1 0 GOTO L2
GOTO E

[L2 ]: Y2 X 1

// Y1 = Y2 = 0

[L3 ]: Z1 f < (Y2 , X 2 )


IF Z1 0 GOTO E

7
8
9

Y1 Y1 + 1

10

GOTO L3

Y2 Y2 X 2

77

// pb.16 din SE8

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
- Dac X 2 este 0, atunci programul cicleaz n eticheta L 0 (pentru c mprirea la 0 nu
este posibil).
- Dac X 1 este 0, atunci ctul i restul vor fi amndou 0 i ieim din program.
- Dac ambele numere sunt nenule, la eticheta L 2 vom copia dempritul X 1 n Y 2
(variabila unde dorim ca la final s obinem restul). Apoi ct timp este posibil (dac Y 2
X 2 ), vom scdea din Y 2 cte X 2 uniti i vom incrementa de fiecare dat ctul Y 1 . Cnd
Y 2 devine strict mai mic dect X 2 (nu mai putem face scderi), restul se afl deja n
variabila Y 2 i ieim din program.
Complexitatea timp:
La eticheta L 2 , mutarea lui X 1 n Y 2 are complexitate X 1 .
La eticheta L 3 revenim de Y 1 = X 1 / X 2 ori, iar de fiecare dat executm rndurile 6 10
din program. Macroinstruciunea f < (rndul 6) are complexitate min{Y 2 , X 2 }, adic X 2 la
fiecare aplicare unde returneaz 0, iar la ultima aplicare, unde returneaz 1, are o
complexitate mai mic dect X 2 . La rndul 8, complexitatea este numrul care se scade,
adic mereu X 2 . Rezult 2 + X 1 + (X 1 / X 2 ) * (X 2 + 1 + X 2 + 2) => C.T. = O(X 1 ).

Problema 11 : Y X ! ( factorial )
1
2
3
4
5
6
7
8

Y Y +1
IF X 0 GOTO L1
GOTO E // 0! = 1
[L1 ] : Z1 X

[L2 ] : Z 2 Y * Z1
Y Z2
Z1 Z1 1

IF Z1 0 GOTO L2

Dac X = 0, returnm Y = 1. Dac X este nenul, pornim de la Y = 1 i tot nmulim


rezultatul anterior cu numrul Z 1 , care iniial este egal cu X, iar apoi scade cu cte o
unitate dup fiecare nmulire pn ajunge la 0.
Complexitatea timp:
La eticheta L 1 avem complexitatea X, apoi pentru cele X nmuliri avem de fiecare dat
complexitatea egal cu rezultatul lor (rndul 5). Apoi ca s mutm la loc n Y noul
rezultat (rndul 6), complexitatea este tot rezultatul obinut la nmulirea curent.

Rezult
X + 2*
X + X * ( X 1) + X * ( X 1) * ( X 2 ) + ... + X * ( X 1) * ... * 2 * 1 .

L1
prima
inmultire

a inmultire
a 2 a inmultire
a 3 a inmultire
aX

L2

Funcia dominant este cea de la ultima nmulire => C.T. = O(X!).

78

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Obs: Dac n loc s scriem explicit pentru fiecare nmulire complexitatea obinut i apoi
s pstrm funcia cea mai mare, am fi aproximat toate nmulirile cu cazul cel mai ru i
am fi nmulit acea funcie cu numrul de reveniri la eticheta L 2 , atunci am fi obinut C.T.
= O(X * (X!)). Funcia de mai sus reprezint ns o aproximare mai exact (fa de cea de
aici, de la observaie) a numrului propriu-zis de pai fcui de program.
1, daca X = p. p.
0, daca X p. p.

Problema 12 : Y patrat _ perfect ( X ) =

OBS: Orice ptrat perfect k2 poate fi scris ca suma primelor k numere impare.
k 2 = 1 + 3 + 5 + ... + (2 * k 1)

1
2
3
4
5
6
7
8
9
10
11
12
13

numere

Y Y +1
IF X 0 GOTO L1
GOTO E // 0 = p. p.
[L1 ] : Z1 X
Z0 Z0 + 1

// nr. impar

Y Y
1
[L2 ] : Z 2 f < (Z1 , Z 0 )
IF Z 2 0 GOTO E

// X p. p.

Z1 Z1
Z0

// pb.16 din SE 8

Z0 Z0 + 1
Z0 Z0 + 1
IF Z1 0 GOTO L2
Y Y +1

// X = p. p.

Dac X = 0 returnm Y = 1. Dac X este nenul, i copiem valoarea n Z 1 (eticheta L 1 ) i


setm numrul impar Z 0 = 1. Apoi ct timp este posibil (Z 1 Z 0 ), scdem numrul impar
curent din copia lui X (rndul 9), apoi incrementm cu 2 uniti numrul impar (rndurile
10 11). Dac dup o scdere copia lui X a ajuns fix pe 0, atunci returnm 1 (pentru c
nseamn c X a putut fi scris ca suma primelor numere impare). Dac dup scderi copia
lui X a ajuns la o valoare mai mic dect numrul impar curent, atunci returnm 0.
Complexitatea timp:
Pentru copierea lui X (rndul 4) complexitatea este X.
Macroinstruciunea de comparare (rndul 7) are complexitate minimul dintre cei doi
parametri, iar la toate comparrile care returneaz 0 (toate n afar de ultima, pentru care
ieim din program) acest minim va fi Z 0 , care n cel mai ru caz are aproximativ valoarea

79

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
X . i facem aceast comparare pentru fiecare numr impar pe care l putem scdea,
adic de aproximativ X ori. Deci n total pentru comparri avem complexitatea X.
Scderile de numere impare (rndul 9) se fac pn cnd X ajunge aproape sau chiar 0,
deci n total pentru scderi avem complexitatea maxim X.
Rezult C.T. = O(X).

(*) Problema 13 : Y X
Folosim tot observaia de la problema anterioar, care zicea c suma primelor k numere
impare este egal cu k2.
1
2
3
4
5
6
7
8
9
10
11

IF X 0 GOTO L1
GOTO E // 0 = 0
[L1 ] : Z1 X
Z 0 Z 0 + 1 // nr. impar

[L2 ] : Z 2 f < (Z1 , Z 0 )

IF Z 2 0 GOTO E
Z1 Z1 Z 0

// pb.16 din SE8

Z0 Z0 + 1
Z0 Z0 + 1
Y Y +1
IF Z1 0 GOTO L2

La fel ca la programul anterior, i facem o copie lui X (eticheta L 1 ), apoi ct timp este
posibil (eticheta L 2 ) scdem din acea copie primele numere impare, dar la fiecare scdere
fcut incrementm Y (rndul 10) pentru a numra cte numere impare am sczut.
Suma acelor numere impare reprezint de fapt cel mai mare ptrat perfect mai mic sau
egal cu X. Deci Y va fi chiar X .

Complexitatea timp:
Analog cu problema anterioar, complexitatea pentru copierea lui X este X, cea pentru
toate comparrile este X, iar cea pentru toate scderile este tot X. Rezult C.T. = O(X).

80

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

Problema 14 : Y al X ulea nr. din sirul Fibonacci


X:
Y:

0
0

1
1

2
1

3
2

4
3

5
5

6
8

7
13

Z0 X

IF Z 0 0 GOTO L1

GOTO E
[L1 ] : Z 2 Z 2 + 1 // Z1 = 0, Z 2 = 1

4
5
6

Z 0 Z 0 1
[L2 ] : Z 0 Z 0 1

7
8

Y Z1 + Z 2

GOTO E

10
11
12

IF Z 0 0 GOTO L3

[L3 ] : Z1 Z 2
Z2 Y
GOTO L2

- l copiem pe X. Dac X era 0 returnm 0.


- Setm Z 1 = 0 i Z 2 = 1 (rndul 4) care vor fi numerele din ir de la paii imediat
anteriori celui pe care l calculm acum. Setm Y = Z 1 +Z 2 (rndul 7). Scdem 2 uniti
din copia lui X (rndurile 5 6), apoi verificm dac am ajuns pe 0. Dac da, nseamn
c X a fost 1 sau 2 i returnm Y care are deja valoarea 1.
- Dac nu, nseamn c X 2 i mergem la eticheta L 3 unde actualizm numerele din ir
ca fiind urmtoarele (rndurile 10 11), adic Z 1 i ia valoarea lui Z 2 , iar Z 2 i ia
valoarea lui Y. Apoi ne ntoarcem la eticheta L 2 , unde decrementm copia lui X (pentru a
ti c vom calcula nc un numr din ir) i actualizm Y = Z 1 +Z 2 . Repetm acest pas
pn cnd copia lui X ajunge pe 0.
Complexitatea timp:
Revenim la eticheta L 2 de X1 ori i avem 3 instruciuni simple (rndurile 6, 8 i 12) i
cele 3 macroinstruciuni de actualizare a numerelor din ir (rndurile 7, 10 i 11) care n
cel mai ru caz au complexitatea maxim Y (numrul cutat, la ultima actualizare).
Rezult C.T. = O(X*Y).
Obs: n mod normal complexitatea trebuie exprimat doar n funcie de mrimea datelor
de intrare X (nu i a celor de ieire Y), deci aici Y trebuie nlocuit cu formula matematic
ce aproximeaz valoarea celui de-al X-ulea numr Fibonacci n funcie de valoarea lui X.

81

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
1, daca X = X R
R
0, daca X X

Problema 15 : Y palindrom ( X ) =

1
2
3
4
5
6
7
8
9
10
11

Z 0 10
Z1 X

[L1 ] : IF Z1 0 GOTO L2
GOTO L3

[L2 ] : Z 2 Z1 % Z 0

// ultima cifra

Z3 Z 4 * Z0
Z 4 Z3 + Z 2

// Z 4 = X R

Z 5 Z1 / Z 0
Z1 Z 5
GOTO L1

[L3 ] : Y f = ( X , Z 4 )

- Copiem X-ul n Z 1 (rndul 2) pentru a calcula XR (oglinditul numrului X) n Z 4 .


- Ct timp Z 1 nu a ajuns 0, i obinem n Z 2 ultima sa cifr (rndul 5), apoi actualizm Z 4
nmulindu-l cu 10 i adugndu-i aceast nou cifr (rndurile 6 7), iar apoi actualizm
i Z 1 mprindu-l la 10 pentru a elimina ultima sa cifr (rndurile 8 9).
- Dup ce am obinut oglinditul numrului X, l comparm cu X i returnm 1 dac sunt
egale i 0 dac difer (rndul 11).
Complexitatea timp:
- Avem complexitate 10+X (rndurile 1 2).
- Apoi la eticheta L 1 revenim pentru fiecare cifr a lui X, deci de maxim log 2 (X) ori.
(a) Pentru a calcula ctul i restul mpririi lui Z 1 la Z 0 (rndurile 5 i 8) avem
complexitate Z 1 care este maxim X.
(b) Pentru a actualiza oglinditul cu adugarea unei noi cifre la final (rndurile 6 7) avem
maxim 2*X eventual nmulit cu maxim constanta 10 (pentru c oglinditul are acelai
numr de cifre ca X, sau chiar mai puine dac X-ul se termina n zerouri).
(c) Iar pentru a actualiza Z 1 dup eliminarea ultimei sale cifre (rndul 9) avem tot maxim
X.
- La final, pentru a compara X cu oglinditul su complexitatea este minimul dintre
parametri, care n cel mai ru caz este X nmulit cu o constant (la fel, pentru c
oglinditul are maxim acelai numr de cifre ca X).
Rezult C.T. = O(X * log(X)).

82

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 8 ~
Y X , daca Y X
0, daca Y < X

Problema 16 : Y Y X =
1
2
3
4
5
6
7
8
9

IF X 0 GOTO L1
GOTO E
[L1 ]: Y Y 1
X X 1
Z Z +1
IF X 0 GOTO L1

[L2 ]: X X + 1

Z Z 1
IF Z 0 GOTO L2

Ct timp X este nenul, decrementm simultan Y i X i incrementm Z (eticheta L 1 ).


Apoi cnd X ajunge 0, incrementm X i decrementm Z pn cnd Z devine 0 iar X
ajunge la valoarea iniial (eticheta L 2 ).
Complexitatea timp: La eticheta L 1 revenim de X ori i de fiecare dat executm 4
instruciuni simple (rndurile 3 6). La eticheta L 2 revenim tot de X ori i de fiecare dat
executm 3 instruciuni simple (rndurile 7 9). Rezult C.T. = O(X).

(*) Problema 17 : Y Y + X
1
2
3
4
5
6
7
8
9

IF X 0 GOTO L1
GOTO E
[L1 ] : Y Y + 1
X X 1
Z Z +1
IF X 0 GOTO L1

[L2 ] : X X + 1

Z Z 1
IF Z 0 GOTO L2

Singura diferen fa de programul anterior este la rndul 2, unde avem incrementare


pentru Y n loc de decrementare.
Complexitatea timp: La fel ca la programul anterior, C.T. = O(X).
83

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
1, daca X 1 X 2
0, daca X 1 / X 2

Problema 18 : Y f ( X 1 , X 2 ) =
1
2
3
4
5
6

[L0 ]: IF X 2 0 GOTO L1
GOTO L0

// ciclam

[L1 ]: IF X 1 0 GOTO L2
Y Y +1
GOTO E // 0 X 2

[L2 ]: Z1 X 1

[L3 ]: Z 2 f < (Z1 , X 2 )

7
8
9

IF Z 2 0 GOTO E

// X 1 / X 2

Z1 Z1 X 2
IF Z1 0 GOTO L3

10
11

Y Y + 1 // X 1 X 2

Dac X 2 = 0 programul cicleaz, iar dac X 1 = 0 returnm 1 (pentru c 0 este divizibil cu


orice). Dac ambele numere sunt nenule, l copiem pe X 1 n Z 1 (rndul 6), iar apoi ct
timp este posibil (dac Z 1 X 2 ) scdem din Z 1 cte X 2 uniti (rndul 9). Dac dup un
anumit numr de scderi Z 1 ajunge fix 0 returnm 1 (nseamn c a fost divizibil cu X 2 ),
iar dac ajunge la o valoare mai mic dect X 2 returnm 0 (nseamn c nu a fost
divizibil).
Complexitatea timp:
Pentru a copia X 1 avem complexitate X 1 (eticheta L 2 ).
La eticheta L 3 revenim de cte ori putem scdea, adic de X 1 / X 2 ori. De fiecare dat
executm compararea (rndul 7) de complexitate minimul dintre parametri, care la toate
comparrile unde ntoarce 0 complexitatea este X 2 , iar la ultima comparare este o valoare
mai mic dect X 2 .
Pentru scderi (rndul 9) complexitatea total este maxim X 1 pentru c scdem pn
acesta ajunge pe 0 sau mai mic dect X 2 .
Rezult X 1 + (X 1 / X 2 )*X 2 + X 1 => C.T. = O(X 1 ).
1, daca X = nr. prim
0, daca X nr. prim

Problema 19 : Y nr _ prim ( X ) =
1
2
3
4
5
6
7
8
9

Z 0 2 // divizorul posibil
Z1 X / Z 0

// jumatatea lui X

IF X 0 GOTO L1
GOTO E // 0 nr. prim
[L1 ]: X X 1
IF X 0 GOTO L2
X X +1
GOTO E // 1 nr. prim
[L2 ]: X X + 1

10
11
12
13
14
15

[L3 ]: Y Y + 1
Z 2 f < (Z1 , Z 0 )
IF Z 2 0 GOTO E

// X = nr. prim

Y Y 1
Z 3 f ( X , Z 0 )
IF Z 3 0 GOTO E
Z0 Z0 +1

16
17

GOTO L3

84

// X nr. prim

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Dac X este 0 sau 1 returnm Y = 0.
Altfel, testm dac Z 0 = 2 este divizor al lui X. Dac da, returnm 0 (X nu este prim).
Dac nu, incrementm Z 0 i relum testarea pn cnd Z 0 ajunge strict mai mare dect
X/2. Atunci returnm 1 pentru c nseamn c X este prim.
Complexitatea timp:
Pentru calculul lui X/2 (rndul 2) avem complexitate X.
n cel mai ru caz (cnd X este prim) revenim la L 3 de aproximativ X/2 ori pentru fiecare
divizor posibil testat. De fiecare dat executm compararea (rndul 11) de complexitate
minimul parametrilor (X/2 i Z 0 posibilul divizor), adic Z 0 care este maxim X/2. Tot de
fiecare dat executm i verificarea divizibilitii (rndul 14), mereu de complexitate X.
Rezult X + (X/2) * (X/2 + X) => C.T. = O(X2).
Obs: Dac nlocuim rndul 2 al programului cu Z1

X , adic s ne oprim din

cutarea divizorilor cnd ajungem la X n loc de X/2, atunci revenim la eticheta L 3 de


maxim X ori. Operaia de comparare are complexitatea Z 0 care acum este maxim X ,
iar verificarea divizibilitii rmne X, deci complexitatea timp devine
X + X * X + X => C.T. = O( X X ).

1, daca X = nr. perfect


0, daca X nr. perfect

Problema 20 : Y nr _ perfect ( X ) =

Un numr este perfect dac este egal cu suma divizorilor si diferii de el nsui.
X = 6 => (div X) = 1 + 2 + 3 = 6 = X (este nr. perfect)
X = 10 => (div X) = 1 + 2 + 5 = 8 < X (nu este nr. perfect)
X = 28 => (div X) = 1 + 2 + 4 + 7 + 14 = 28 = X (este nr. perfect)
X = 36 => (div X) = 1 + 2 + 3 + 4 + 6 + 9 + 12 + 18 = 55 > X (nu este nr. perfect)

1
2
3
4
5
6
7
8
9

Z0 2
Z1 X / Z 0

// divizorul posibil

// X (div )

Z2 X
IF Z 2 0 GOTO L1

// 0 nr. perfect
GOTO E
[L1 ] : IF Z1 0 GOTO L2
GOTO L3

// divizorul = 0

[L2 ] : Z3 f ( X , Z1 )

IF Z 3 0 GOTO L4

10
11
12
13
14
15
16
17

[L5 ]: Z1 Z1 1
GOTO L1

[L4 ]: Z 4 f < (Z 2 , Z1 )
IF Z 4 0 GOTO E

// X < (div )

Z 2 Z 2 Z1
GOTO L5

[L3 ]: IF Z 2 0 GOTO E
Y Y +1

85

// X > (div )

// X = (div )

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
Dac X = 0 returnm 0. Altfel, setm Z 1 (posibilul divizor) la valoarea X/2 (rndul 2) i
copiem X-ul n Z 2 (rndul 3).
Ct timp Z 1 nu a ajuns la 0, verificm dac este divizor al lui X (rndul 8).
(a) Dac da, comparm acest divizor cu Z 2 (rndul 12), iar dac este mai mic sau egal,
atunci scdem divizorul Z 1 din Z 2 (rndul 14), apoi decrementm Z 1 (rndul 10). Dac
divizorul este strict mai mare dect valoarea rmas n Z 2 , nseamn c nu putem face
scderea i c avem X < (div X), deci returnm 0 (X nu este numr perfect).
(b) Dac nu, doar decrementm Z 1 (rndul 10).
Dac Z 1 a ajuns la 0 (deci am reuit s scdem toi divizorii din Z 2 copia lui X),
verificm dac Z 2 a ajuns i el pe 0. Dac da, returnm 1 (X este numr perfect). Iar dac
nu, returnm 0, pentru c nseamn c avem X > (div X).
Complexitatea timp:
Pentru a calcula X/2 (rndul 2) avem complexitate X, iar pentru a copia X (rndul 3) tot
X. La eticheta L 1 revenim maxim de X/2 ori. De fiecare dat testm divizibilitatea
(rndul 8) cu complexitate X. Pentru fiecare divizor gsit (maxim 2 X divizori, pentru
c i putem grupa n perechi de cte 2 divizori (div, X/div), dintre care primul este maxim
X ), verificm dac l putem scdea (rndul 12) cu complexitatea divizorului, adic
maxim X/2; apoi dac putem, chiar facem scderea (rndul 14) cu complexitatea
divizorului, adic tot maxim X/2.

X X
X
X + 2 * X * + => C.T. = O(X2).
Rezult 2 * X + *
2 f
2
2

f

<

L2

L4

Problema 21 : Y log 2 ( X )
Rezolvarea (A) (cu nmuliri cu 2)
1
2
3
4
5
6
7
8
9
10

[L0 ] : IF X 0 GOTO L1
GOTO L0

[L1 ] : Z 0 2

// ciclam

Z1 Z1 + 1 // Z1 = 2Y

[L2 ] : Z3 Z1 * Z 0
Z1 Z 3

Y Y +1
Z 2 f (Z1 , X )
IF Z 2 0 GOTO L2
Y Y 1

(*) Rezolvarea (B) (cu mpriri la 2)


1
2
3
4
5
6
7
8
9

86

[L0 ] : IF X 0 GOTO L1
GOTO L0

[L1 ] : Z 0 2

Z1 X

// ciclam
// Z1 = X / 2Y

[L2 ] : Z 2 Z1 / Z 0
Z1 Z 2
Y Y +1

IF Z1 0 GOTO L2
Y Y 1

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
- La rezolvarea (A), pornim de la Z 1 = 1 i l tot nmulim cu 2 pn ajungem la o valoare
strict mai mare dect X, iar pentru fiecare nmulire incrementm Y. Apoi, dup ce Z 1 l-a
depit pe X, scdem o unitate din Y pentru a avea partea ntreag inferioar din
logaritm.
- La rezolvarea (B), pornim de la Z 1 = X i l tot mprim la 2 pn ajungem la 0, iar
pentru fiecare mprire incrementm Y. Apoi, cnd Z 1 a devenit 0, scdem o unitate din
Y pentru a avea partea ntreag inferioar din logaritm.
Complexitatea timp:
- Rezolvarea (A): revenim la eticheta L 2 de Y = log 2 ( X ) ori, iar cea mai costisitoare
nmulire este ultima, de complexitate aproximativ 2Y = 2 log2 ( X ) = X . Iar compararea
(rndul 8) are n cel mai ru caz tot complexitate X. Rezult C.T. = O(X * log(X)).
- Rezolvarea (B): revenim la eticheta L 2 de Y = log 2 ( X ) ori, iar cea mai costisitoare
mprire este prima, de complexitate X. Rezult C.T. = O(X * log(X)).
Obs: Dac n loc s aproximm toate operaiile (nmuliri, respectiv mpriri) cu cel mai
ru caz (ultima nmulire, respectiv prima mprire) i s nmulim cu numrul de
repetiii ( Y = log 2 ( X ) n ambele cazuri), am aduna separat complexitile pentru fiecare
dintre operaii, atunci am obine urmtoarele formule:
- Rezolvarea (A):
21 + 22 + 23 + ... + 2log 2 ( X ) +1 este o serie geometric cu primul element 2, numrul de
elemente Y+1 = log 2 (X)+1 i raia 2.
1 2 log2 ( X )+1
2 * X 1
Atunci formula devine: 2 *
= 2*
= 4* X 2
1 2
2 1
Rezult C.T. = O(X).
- Rezolvarea (B):
X X X
X
X + 1 + 2 + 3 + ... + log 2 ( X ) reprezint o serie geometric cu primul element X,
2 2 2
2
numrul de elemente Y+1 = log 2 (X)+1 i raia .
Atunci formula anterioar devine:
1
1
1
1 Y +1
2 * X 1
* 2 = 2 * X 1
X * 2 = X * 2* X = X *
1
1
2
*
X
1
1
2
2
Y +1
(Am folosit c 2 = 2 * 2Y = 2 * 2 log2 ( X ) = 2 * X .)
Rezult C.T. = O(X).

87

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

Problema 22 : Y cmmmc( X 1 , X 2 )
1
2
3
4
5
6
7
8

IF X 1 0 GOTO L1
GOTO E
[L1 ] : IF X 2 0 GOTO L2
GOTO E
[L2 ] : Z 0 f < ( X 1 , X 2 )
IF Z 0 0 GOTO L3
Z1 X 2
Z2 X1

// Z1 Z 2

9
10
11
12
13
14
15

GOTO L4

[L3 ] : Z1 X 1
Z2 X 2

// Z1 < Z 2

[L4 ] : Y Y + Z 2 // Y = M Z
Z 3 f (Y , Z1 )

IF Z 3 0 GOTO E
GOTO L4

Dac X 1 = 0 sau X 2 = 0, returnm 0.


Dac ambele numere sunt nenule, le comparm (rndul 5) i apoi copiem numrul mai
mic n Z 1 i numrul mai mare n Z 2 (rndurile 7 8 sau 10 11, n funcie de rezultatul
comparrii).
La eticheta L 4 l incrementm pe Y cu Z 2 = max{X 1 , X 2 } uniti, apoi testm dac Y este
divizibil cu Z 1 = min{X 1 , X 2 }. Dac da, ieim din program i avem deja rezultatul n Y.
Dac nu, revenim la eticheta L 4 (unde Y devine urmtorul multiplu de Z 2 ).
Complexitatea timp:
La eticheta L 2 , pentru a compara numerele, avem complexitatea min{X 1 , X 2 }.
Apoi pentru a copia cele dou numere (fie la rndurile 7 8, fie la 10 11) avem
complexitatea X 1 + X 2 .
n cel mai ru caz (cnd numerele sunt prime ntre ele, iar rezultatul este X 1 *X 2 ), la
eticheta L 4 revenim de Z 1 = min{X 1 , X 2 } ori. De fiecare dat actualizm Y-ul (rndul
12) cu complexitatea Z 2 = max{X 1 , X 2 }, apoi testm divizibilitatea (rndul 13) cu
complexitatea Y, care n cel mai ru caz ajunge X 1 *X 2 .
Rezult: min{X 1 , X 2 } + X 1 + X 2 + min{X 1 , X 2 }* (max{X 1 , X 2 } + X 1 * X 2 )
=> C.T. = O(X1 * X2 * min{X 1 , X 2 }).

88

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 9 ~
(Funcii recursive)
Funcii elementare
succesor: s ( x) = x + 1
constant: C k( n ) (x1 , ... , xn ) = k
proiecie: (kn ) (x1 , ... , xn ) = xk
Obs: - La funciile constant i proiecie, indicele de sus reprezint numrul de parametri
asupra crora va fi aplicat acea funcie.
- La funcia constant, indicele de jos reprezint constanta numeric pe care o va ntoarce
funcia ca rezultat (deci k poate fi orict, inclusiv mai mare dect n).
- La funcia proiecie, indicele de jos reprezint al ctelea parametru (x k ) va fi ntors ca
rezultat de ctre funcie (deci k n la funcia proiecie).

Operaii
Compunere
(a) f ( x) = h( g ( x))
(b) f ( x1 ,..., xn ) = h( g1 ( x1 ,..., xn ),..., g k ( x1 ,..., xn ))
Obs: - Toate funciile aflate cel mai n interiorul compunerilor (aici notate cu g, respectiv
g 1 , , g k ) trebuie s aib exact aceeai parametri (inclusiv n aceeai ordine) ca funcia f.
- Numrul de parametri al funciei h (notat aici cu k) poate s fie diferit de cel al funciei f
(notat aici cu n).

Recursivitate
f ( 0) = k
(a)
f (t + 1) = g (t , f (t ))
f ( x1 ,..., xn ,0) = h( x1 ,..., xn )
(b)
f ( x1 ,..., xn , t + 1) = g ( x1 ,..., xn , t , f ( x1 ,..., xn , t ))
Obs: - Recursivitatea se face dup un singur parametru pe care l nlocuim cu 0 la pasul
de oprire i cu t+1 la pasul recursiv (restul parametrilor nu se modific).

89

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
- La pasul de oprire a recursivitii (pasul 0), n dreapta egalului vom avea cu un
parametru mai puin dect avea funcia f din stnga egalului: restul parametrilor (dac
exist) n afar de cel pe care se face recursivitatea.
- La pasul recursiv (pasul t+1), n dreapta egalului (la funcia g) vom avea cu un
parametru mai mult dect avea funcia f din stnga egalului: toi parametri de la pasul
anterior (toi parametrii X i parametrul t), precum i funcia de la pasul anterior (adic
funcia f aplicat pe toi parametrii X i pe t).

Minimizare nemrginit

f ( x1 ,..., xn ) = min[g ( x1 ,..., xn , t ) = 0]


t

Minimizare mrginit

f ( x1 ,..., xn , y ) = min[g ( x1 ,..., xn , t ) = 0]


t y

EXERCIII
(1) f + ( x1 , x2 ) = x1 + x2
f + ( x1 ,0) = x1 = 1(1) ( x1 )

f + ( x1 , t + 1) = ( x1 + t ) + 1 = s 3(3) ( x1 , t , f + ( x1 , t ))

(2) f * ( x1 , x2 ) = x1 * x2
f* ( x1 ,0) = 0 = C0(1) ( x1 )

f* ( x1 , t + 1) = x1 * (t + 1) = ( x1 * t ) + x1 = f + 3(3) ( x1 , t , f* ( x1 , t )), 1(3) ( x1 , t , f* ( x1 , t ))

(3) f ^ ( x1 , x2 ) = x1x

f ^ ( x1 ,0) = 1 = C1(1) ( x1 )
t +1

f ^ ( x1 , t + 1) = x1

= x1 * x1 = f* 3(3) ( x1 , t , f ^ ( x1 , t )), 1(3) ( x1 , t , f ^ ( x1 , t ))


t

(4) f ( x) = a x , a const.
f (0) = 1

f (t + 1) = a t +1 = a t * a = f * (22 ) (t , f (t )), Ca( 2 ) (t , f (t ))

90

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

(5) f! ( x) = x!= 1* 2 * 3 * ... * x


f! (0) = 0!= 1

))

f! (t + 1) = t!*(t + 1) = f * (22 ) (t , f! (t )), s 1( 2 ) (t , f! (t ))

(6) f ( x) = 1 + 2 + 3 + ... + x
f (0) = 0

))

f (t + 1) = f (t ) + (t + 1) = f + (22 ) (t , f (t )), s 1( 2 ) (t , f (t ))
x 1, x > 0
= x 1
x=0
0,

(7) pred ( x) =
pred (0) = 0

pred (t + 1) = t = 1( 2 ) (t , pred (t ) )
x1 x2 , x1 x2
x1 < x2
0,

(8) f ( x1 , x2 ) =

= x1 x2

f ( x1 ,0) = x1 = 1(1) ( x1 )

f ( x1 , t + 1) = x1 (t + 1) = ( x1 t ) 1 = pred 3(3) ( x1 , t , f ( x1 , t ))

(9) f ( x1 , x2 ) = x1 x2

))

f ( x1 , x2 ) = ( x1 x2 ) + ( x2 x1 ) = f + f ( x1 , x2 ), f (22 ) ( x1 , x2 ), 1( 2 ) ( x1 , x2 )
x1 , daca x1 x2
x2 , altfel

(10) f max (x1 , x2 ) =

f max ( x1 , x2 ) = x2 + ( x1 x2 ) = f + (22 ) ( x1 , x2 ), f ( x1 , x2 )

x1 , daca x1 x2
x2 , altfel

(11) f min (x1 , x2 ) =

f min ( x1 , x2 ) = x1 ( x1 x2 ) = f 1( 2 ) ( x1 , x2 ), f ( x1 , x2 )

f max ( x1 , x2 ) = f min ( x1 , x2 )+ | x1 x2 |= f + ( f min ( x1 , x2 ), f | | ( x1 , x2 ))

f min ( x1 , x2 ) = f max ( x1 , x2 ) | x1 x2 |= f ( f max ( x1 , x2 ), f | | ( x1 , x2 ))

91

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
f max ( x1 , x2 ) = x1 + x2 f min ( x1 , x2 ) = f ( f + ( x1 , x2 ), f min ( x1 , x2 ))

f min ( x1 , x2 ) = x1 + x2 f max ( x1 , x2 ) = f ( f + ( x1 , x2 ), f max ( x1 , x2 ))


1, daca x = par
0, daca x = impar

(12) par (x ) =
par (0) = 1

par (t + 1) = 1 par (t ) = f C1( 2 ) (t , par (t ) ), (22 ) (t , par (t ) )


par (t + 1) = impar (t )

// sau :

1, daca x = impar
0, daca x = par

(13) impar (x ) =
impar (0) = 0

impar (t + 1) = 1 impar (t ) = f C1( 2 ) (t , impar (t ) ), (22 ) (t , impar (t ) )


// sau : impar (t + 1) = par (t )

Predicate
0, daca x > 0
= 1 x
1, daca x = 0

(x ) =
(0) = 1

(t + 1) = 0 = C0( 2) (t , (t ))
1, daca x1 = x2
0, daca x1 x2

(14) f = (x1 , x2 ) =

f = ( x1 , x2 ) = 1 | x1 x2 |= ( f | | ( x1 , x2 ))

1, daca x1 x2
0, daca x1 > x2

(15) f (x1 , x2 ) =

f ( x1 , x2 ) = 1 ( x1 x2 ) = ( f ( x1 , x2 ))

Prop.1: Dac P i Q sunt predicate calculabile, atunci i P, P Q, P Q sunt predicate


calculabile.

92

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
P = ( P )
Dem: P Q = P * Q = f * ( P, Q)

// sau : P Q = min( P, Q)

P Q = (P Q ) = ( f * ( (P ), (Q )))

// sau : P Q = max( P, Q)

Prop.2: Dac g i h sunt funcii calculabile, iar P un predicat calculabil, atunci f este
funcie calculabil.
g ( x ,..., xn ), daca P( x1 ,..., xn ) = 1
f ( x1 ,..., xn ) = 1
h( x1 ,..., xn ), daca P( x1 ,..., xn ) = 0
Dem:
f = g * P + h * ( P)
Prop.3: Dac f este funcie calculabil, atunci g i h sunt funcii calculabile.
xn+1

g ( x1 ,..., xn , xn +1 ) = f ( x1 ,..., xn , t )
t =0

xn+1

h( x1 ,..., xn , xn +1 ) = f ( x1 ,..., xn , t )
t =0

Dem:
g ( x1 ,..., xn ,0 ) = f ( x1 ,..., xn ,0 )

g ( x1 ,..., xn , t + 1) = g ( x1 ,..., xn , t ) + f ( x1 ,..., xn , t + 1)

h( x1 ,..., xn ,0 ) = f ( x1 ,..., xn ,0 )

h( x1 ,..., xn , t + 1) = h( x1 ,..., xn , t )* f ( x1 ,..., xn , t + 1)


Prop.4: Dac P este predicat calculabil, atunci sunt calculabile i urmtoarele predicate:
(t ) xn+1 P(x1 ,..., xn , t )

(t ) x
(t )< x
(t )< x

n +1

n +1

n +1

P( x1 ,..., xn , t )

P( x1 ,..., xn , t )

P( x1 ,..., xn , t )

(t ) x
Dem:

(t ) x

n +1

(t )< x
(t )< x

xn +1
P( x1 ,..., xn , t ) = 1
t =0

xn +1

P( x1 ,..., xn , t ) 0
t =0

(t ) xn +1 [(t = xn+1 ) P( x1 ,..., xn , t )]

P( x1 ,..., xn , t )
n +1

n +1

n +1

P( x1 ,..., xn , t )
P( x1 ,..., xn , t )

P( x1 ,..., xn , t )

(t ) x [(t xn+1 ) P(x1 ,..., xn , t )]


n +1

Prop.5: Dac P este predicat calculabil, atunci funcia min P( x1 ,..., xn , t ) este calculabil.
t xn+1

93

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC
1, daca x1 x2
este divizibil
0, daca x1 / x2

(16) P (x1 , x2 ) =
P ( x1 , x2 )

(t ) x [x1 = x2 * t ]
1

1, daca x1 | x2
divide
0, daca x1 /| x2

(17) P| (x1 , x2 ) =
P| ( x1 , x2 )

(t ) x [x1 * t = x2 ]
2

1, daca x = nr. prim


0, daca x nr. prim

(18) prim(x ) =

prim( x ) ( x > 1) (t )< x [(t = 0 ) (t = 1) (P (x, t ))]


Obs: La seminar am uitat s punem i condiia x > 1.
1, daca x = patrat perfect
0, daca x patrat perfect

(19) patrat _ perfect (x ) =


patrat _ perfect ( x )

(t ) x [x = t * t ]

1, daca x = numar perfect


0, daca x numar perfect

(20) numar _ perfect (x ) =


numar _ perfect ( x )

x = (t * [(t 0 ) (t x ) P ( x, t )])
t =0

(21) f / (x1 , x2 ) = 1
x

f / ( x1 , x2 ) = min[(t + 1) * x2 > x1 ]
t x1

(22) f % (x1 , x2 ) = x1 % x2

))

f % ( x1 , x2 ) = x1 x2 * f / ( x1 , x2 ) = f 1( 2 ) ( x1 , x2 ), f* (22 ) ( x1 , x2 ), f / ( x1 , x2 )
sau f % ( x1 , x2 ) = min[P ( x1 t , x2 )]
t < x2

94

Seminar C&C gr.231-235, 241-244


MN 2015 2016, FMI UNIBUC

~ Seminar 10 ~
(Recapitulare C&C)
(23) f ( x) = 2 * x + 4
- rezolvare doar cu compunere
f ( x) = f + f * C 2(1) ( x ), 1(1) ( x ) , C 4(1) ( x )

( (

- rezolvare cu recursivitate i compunere


f (0) = 4

f (t + 1) = 2 * (t + 1) + 4 = (2 * t + 4) + 2 = f (t ) + 2 = f + (22 ) (t , f (t )), C 2( 2 ) (t , f (t ))
x

(24) f ( x) = (3 * k 2)
k =0

f (0) = 3 * 0 2 = 0
f (t + 1) = f (t ) + [3 * (t + 1) 2] = f (t ) + (3 * t + 1)

( (

)))

= f + (22 ) (t , f (t )), s f* C3( 2 ) (t , f (t )), 1( 2 ) (t , f (t ))


2 * x1 x2 , daca x1 x2
x +3
x1 2 , daca x1 > x2

(25) f (x1 , x2 ) =

( (

f ( x1 , x2 ) = f f* C2( 2 ) ( x1 , x2 ), 1( 2 ) ( x1 , x2 ) , (22 ) ( x1 , x2 ) * f ( x1 , x2 ) +

+ f^

( 2)
1

(x1 , x2 ), f + ( (x1 , x2 ), C (x1 , x2 )))* ( f (x1 , x2 ))


( 2)
2

( 2)
3

95

S-ar putea să vă placă și