Documente Academic
Documente Profesional
Documente Cultură
ALGORITMI CALCULABILITATE
Horia Georgescu
n cadrul acestui articol vom aborda problema existenei algoritmilor de
rezolvare pentru diferite probleme i vom insista asupra calculabilitii
funciilor.
24
Limbajul de programare S
O prim definiie a noiunii de algoritm se bazeaz pe limbajul S. ntr-o prim etap se va face prezentarea acestui
limbaj foarte simplu, urmnd ca apoi s cptm ncredere
n posibilitile sale.
Exemplul 2
Programul:
[A] x x + 1
if x 0 goto A
Un calcul al programului P este o secven de configuraii consecutive c0, c1, , ck cu ck configuraie final (terminal).
n continuare vom lucra cu funcii pariale (parial definite). Mai precis, pentru f: Nm N vom nota prin Dom f
elementele din Nm pentru care funcia f este definit.
Fie P un program n care variabilele de intrare sunt x1,
x2, , xm. Atunci funcia (parial) calculat de programul
P este P( m ) : N m N definit astfel:
1) P(m ) (x1, x2, , xm) = y' dac exist un calcul c0, c1, , ck
al lui P cu c0 = (1, s0) i sk(y) = y';
2) P(m ) (x1, x2, , xm) = (nedefinit) dac exist un ir infinit de configuraii c0, c1, al lui P cu c0 = (1, s0), deci
dac programul P nu se termin.
Observaie
Fie P un program n care apar variabilele de intrare x1, x2,
, xm. Pentru orice numr natural n, i putem asocia o
funcie P(n ) astfel:
dac n m, atunci P(n ) (x1, x2, , xn) = P(m ) (x1, x2, , xm),
adic xn+1, ..., xm sunt ignorate;
dac n > m, atunci P(n ) (x1, , xn) = P(m ) (x1, , xm, 0, , 0).
Fie f: Nm N. Funcia f se numete parial calculabil
dac exist un program P n limbajul S cu P(m ) = f. Dac
Dom f = Nm, atunci f se numete calculabil.
Exemplul 1 arat c funcia f: N N dat de:
1, x = 0
f (x ) =
,
x, x > 0
este calculabil.
Macroinstruciuni
Aceast seciune urmrete s cptm ncredere n limbajul S. Vom arta c principalele prelucrri uzuale asupra
numerelor naturale pot fi realizate prin programe scrise n
acest limbaj.
Macroinstruciunile sunt abrevieri pentru secvene de
instruciuni n limbajul S. Menirea lor este de a scrie programe ct mai inteligibile. Prezena unei macroinstruciuni
Se observ c succesoarea oricrei configuraii neterminale este unic determinat i nu depinde de eventuala etichetare a sa.
mate
[A] x x - 1
yy+1
if x 0 goto A
25
mate
vv+1
Exemplul 3
Funcia f: N N dat de f(x) = x este calculabil.
Pentru demonstraie, vom scrie urmtorul program P
cu P(1) = f, program care va asigura pstrarea valorii iniiale
a lui x:
26
[A] if x 0 goto B
goto C
[B] x x - 1
yy+1
zz+1
goto A
[C] if z 0 goto D
goto E
[D] z z - 1
xx+1
goto C
unde primele 6 instruciuni copiaz valoarea lui x n variabilele y i z, iar urmtoarele recopiaz valoarea lui z n x.
Putem acum introduce macroinstruciunea v u cu
dezvoltarea:
v0
[A] if u 0 goto B
goto C
[B] u u - 1
vv+1
zz+1
goto A
[C] if z 0 goto D
goto E
[D] z z - 1
uu+1
goto C
[E] v v
Exemplul 5
Funcia f: N N N definit prin f(x1, x2) = x1 x2 este
calculabil.
Un program care calculeaz aceast funcie este urmtorul:
z x2
[B] if z 0 goto A
goto E
[A] z z - 1
y' 0
x1' x1
y y + x1
goto B
Exemplul 6
Fie f: N N N funcia parial definit prin:
x1 x2 , x1 x2
f (x1 , x2 ) =
.
, x1 < x2
[C]
[A]
[B]
Exemplul 7
Fie f: Nm N o funcie (parial) calculabil, calculat de
un program P. Vom introduce macroinstruciunea:
z f(z1, , zm).
Pentru a obine o dezvoltare a acestei macroinstruciuni, s presupunem c n programul P variabilele de intrare sunt x1, , xm, variabilele de lucru sunt z1, , zk, iar
etichetele sunt A1, , Ap, unde (cu eventuala excepie a lui
Ap), orice etichet care apare ntr-o instruciune if este eticheta a cel puin uneia dintre instruciunile din P. Atunci
o dezvoltare a macroinstruciunii z f(z1, , zm) este
urmtoarea:
zk' 0
P'
I
unde:
y', x'1, , x'm, z'1, , z'k sunt variabile de lucru noi;
A'1, , A'p sunt etichete noi;
P' se obine din P nlocuind pe y, x1, , xm, z1, , zk, A1,
, Ap cu y', x'1, , x'm, z'1, , z'k, A'1, , A'p.
I este una dintre instruciunile:
z y', dac eticheta Ap este definit;
[A'p] z y', dac eticheta Ap nu este definit.
Se observ imediat c dac pentru anumite valori iniiale r1, , rm ale lui x1, , xm programul P nu se termin,
atunci nici executarea macroinstruciunii z f(z1, , zm)
nu se termin pentru z1, , zm avnd nainte de executarea
macroinstruciunii valorile r1, , rm.
Dac o macroinstruciune dintr-un program nu se termin, atunci nici programul care o folosete nu se termin.
Numim predicat o funcie f: Nm {0, 1}, parial sau
total definit, unde 0 corespunde falsului, iar 1 corespunde
adevrului.
Exemplul 8
Fie P: Nm {0, 1} un predicat calculabil. Atunci putem introduce macroinstruciunea:
if P(z1, ,zm) goto L
a crei dezvoltare este:
Va urma...
n urmtoarele articole care constituie continuarea celui prezentat vom interaciona cu cteva probleme nedecidabile i
vom vedea cum problema de fa poate fi tratat folosind
alte modele de abordare.
Dl. prof. dr. Horia Georgescu este cadru didactic la Universitatea
Bucureti, fondator i director tiinific al GInfo i poate fi contactat prin
e-mail la adresa g_horia@hotmail.com.
[E]
u1 z1
u2 z2
if u2 0 goto A
goto E
if u1 = 0 goto B
goto A {y = 0 i z = 0}
u1 u1 - 1
u2 u2 - 1
goto C
z u1
mate
u0
v z2
[B] if v 0 goto A
goto E
[A] v v - 1
u u + z1
goto B
[E] z u
xm' xm
z1' 0
27