Documente Academic
Documente Profesional
Documente Cultură
RecIter 7apr12 PDF
RecIter 7apr12 PDF
7 aprilie 2012
1
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
2
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
3
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
4
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
5
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Lambda calculul
O λ-functie este definită de o lambda-expresie care
exprimă acţiunea funcţiei în argumentele ei.
6
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Masina Turing
unitate de
control
a b a b ┴ ┴ ┴
7
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
8
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Maşina Turing
Un sistem ( , , Q, q0, F, ) unde:
este o mulţime finită, nevida numită alfabet de intrare;
este o mulţime finită, nevida numită alfabetul benzii;
, şi ;
Q este o mulţime finită, nevida numită mulţimea stărilor
masinii;
q0 Q este starea iniţială;
F Q este mulţimea stărilor finale (de acceptare sau de
respingere);
: Q x Q x x { L , R } este funcţia de tranziţie, unde L
denota deplasarea la stânga iar R denota deplasarea la
dreapta a cursorului masinii.
9
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Stephan Cole KLEENE: "The Theory of Recursive
Functions, Approaching its Centennial", Bulletin (New
Series) of the American Mathematical Society, Vol. 5,
No. 1, July 1981:
"părinţi" teoriei funcţiilor recursive (inafara lui Kurt Gödel şi
Kleene însuşi) sunt consideraţi a fi:
Leopold Kronecker, prin conferinţa ţinută pe 21
sept. 1886 în faţa Der Deutschen
Naturforscherversammlung zu Berlin (Asociaţia
pentru Cercetarea Naturii), cf. H. Weber, Leopold
Kronecker, Math. Ann. 43 (1893), 1-25
Julius Wilhelm Richard Dedekind (1831–1916),
prin Teorema 126 ("Satz der Definition durch
Induktion") din articolul "Was sind und was sollen
die Zahlen? (Ce sunt şi ce ar trebui sa fie
numerele)" publicat în 1888 si prin Definitia 71
(care contine defiinitia axiomatica a N i.e.
axiomele Dedekind-Peano)
10
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
a ∙0 = 0
a ∙ succ(x) = a ∙ x+a
a 0= 1
a succ(x) = a x ∙ a
unde succ(x)=x+1 .
11
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Recurenta primitiva
Fie funcţiile : g : N n N , h : N n+2 N ;
se cere să se construiască funcţia
f : N n+1 N
care să satisfacă următoarele două ecuaţii :
(1) f(a1 ,a2 ,…, an ,0) = g(a1 ,a2 ,…, an) ,
(2) f(a1 ,a2 ,…, an , x+1) = h(a1 ,a2 ,…, an , x , f(a1 ,a2 ,…, an , x)) .
Compunerea functionala
Fie n , m două numere naturale.
Se dau m+1 funcţii de n argumente:
h : N m → N , g i: N n → N , 1 ≤ i ≤ m
Funcţia
f:Nn→N
este definită prin compunere funcţională din funcţiile h , g1 , g2 ,…, gm
dacă şi numai dacă:
f(x1 ,x2 ,…, xn ) = h (g1(x1 ,x2 ,…, xn ), g2(x1 ,x2 ,…,xn ),…,gm(x1 ,x2 ,…, xn
))
Un caz particular de compunere functionala:
subtitutia (m=1)
13
f(a1 ,a2 ,…, an ,0) = g(a1 ,a2 ,…, an) ,
f(a1 ,a2 ,…, an , x+1) = h(a1 ,a2 ,…, an , x , f(a1 ,a2 ,…, an , x)) .
f(x1 ,x2 ,…, xn ) = h(g1(x1 ,x2 ,…, xn ), g2(x1 ,x2 ,…,xn ),…,gm(x1 ,x2 ,…, xn ))
Exemplul 1:
sum(a,x) = a+x,
=> n=1, a1=a
=> sum (a,0) = a+0 = a => g(a) = a = p1(1)(a) ,
sum(a,x+1)=a+(x+1)=(a+x)+1
=>h(a,x,y)=succ(sum(a,x))=succ(p3(3)(a,x,sum(a,x))).
=> sum(a,0)=p1(1)(a) ,
sum(a,x+1)=h(a,x,sum(a,x)) , unde h:N3 N , h(a,x,y)=(succ0p3(3))(a,x,y).
Exemplul 2:
|x-y| = max(0,x-y)+max(0,y-x),
=> |x-y|= max(0, P(2)1 (x,y)-P(2) 2(x,y)) + max(0, P (2) 2(x,y)-P(2)1(x,y)).
14
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Exemplul 3:
O funcţie general recursivă: funcţia Ackermann-
Peter:
n 1, m0
ack (m, n) ack (m 1,1), n0
ack (m 1, ack (m, n 1)), altfel
15
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
16
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Functia lui COLLATZ :
este definita prin:
f(n)= n/2, daca n este par,
f(n)= 3*n+1, daca n este impar
şi are urmatoarele propretati:
lungimea secventei de numere generata in vederea atingerii valorii 1 un
se poate calcula pintr-o formula bazata pe datele de intrare
tinde catre 1.
Se cere sa se scrie un program care sa citeasca o pereche de valori naturale nenule,
reprezentand primul si ultimul numar intr-o secventa inchisa de numere naturale.
Pentru fiecare astfel de secventa inchisa, se cere sa se deteremine valoarea care
genereaza cea mai lunga serie cu functia de mai sus, inainte de a ajunge la 1.
Cea mai mare valoare din secventa si din sirul transformarilor nu va depasi tipul long.
http://gfredericks.com/math/Arith/collatzPage.html
17
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
#include <iostream.h>
long int length (long int n)
{
long int aux=1;
if (n%2) n=n*3+1; else n/=2;
while(n-1){
if (n%2) n=n*3+1; else n/=2;
aux++;
}
return aux;
}
void main ()
{
long int n,m,max,l,i;
cin>>n>>m; max=0; l=-1;
for (i=n; i<=m; i++)
if (length(i)>l) {
max=i; l=length(i);
}
cout<<"intre "<<n<<" si "<<m<<" ,"<<max<<" are lungimea maxima"<<l<<endl;
}
Intre 1 si 20 , numarul 18 are ofera lungimea maxima: 20 18
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
19
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
compunere funcţională şi
recurenţă primitivă.
20
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
22
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
23
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
24
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Definitie
x x x
Fie x0, x1,…, xk N. Numarul natural n p0 0 p1 1 ... p k k
se numeste numărul Gödel asociat şirului (x0, x1,…,x k) şi
se notează cu <x0,x1,…,xk>.
Exemple: <3,1,2> = 23∙31∙52 = 600,
<1,2,0,5> = 21∙32∙50∙75 = 2898918
Definiţie:
Funcţia f:Nn+1 N se obţine prin recurenţă ereditară din funcţiile
g : Nn N şi h : Nn+2 N dacă:
f(x ,0) = g(x) ,
f(x ,y+1) = h(x ,y ,<f(x ,0) ,…, f(x ,y)>) ,
unde xNn iar <…> desemneaza numarul Gödel asociat
sirului f(x,0), … ,f(x,y).
26
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Teoremă:
Clasa funcţiilor primitiv recursive este închisă faţă de
recurenţa ereditară.
Corolar:
Funcţia f: N N, f(n) = un este primitiv recursivă.
27
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Propoziţie:
Perechea (x,y) N 2 este o soluţie pentru ecuaţia lui Pell
dacă există un număr n≥0 astfel încât
x = xn , y = yn , unde :
x0 = 1, y0 = 0 ,
xn+1 = a.xn + d.yn ,
yn+1 = xn + a.yn , x 0 .
28
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
program rec_indirecta;
var a,d,n: integer;
function y (n: integer): integer; forward;
function x (n: integer): integer;
begin
if n=0 then x:=1
else x:=a*x(n-1)+d*y(n-1)
end; {x}
function y (n: integer): integer;
begin
if n=0 then y:=0
else y:=x(n-1)+a*y(n-1)
end; {y}
begin {programul principal}
writeln ('dati constanta a > 1 si ordinul solutie n = '); readln (a,n);
d := a *a - 1;
writeln ('perechea de solutii de ordinul ',n,' este: (',x(n):4,' , ',y(n):4,').');
readln;
end.
29
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
Definiţie:
Funcţiile fi : N n+1 N, (i=1,2) sunt definite prin recurenţă simultană
din funcţiile gi : N n N şi hi : N n+3 N (i=1,2) dacă
fi(x,0)=gi(x),
fi(x,y+1)=hi(x, f1(x,y), f2(x,y)) , (i=1,2).
Teoremă:
Clasa funcţiilor primitiv recursive este închisă faţă de recurenţa
simultană.
Corolar:
Funcţiile f1,f2: N N, f1(n) = xn, f2(n)=yn sunt primitiv recursive.
30
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
31
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
(2) bazate pe funcţii (primitiv) recursive de mai multe argumente (ca în cazul calculării
cmmdc pentru două numere naturale);
acestea sunt cunoscute sub numele de recursivitate liniară directă:
int x(int n)
{
if (n==0) return 1;
return a*x(n-1)+d*y(n-1);
}
int y(int n)
{
if (n==0) r eturn 0;
return x(n-1)+a*y(n-1);
}
33
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
(4) bazate pe funcţii care au nevoie de mai multe valori anterioare pentru
a calcula valoarea curentă (recursivitatea ereditara, numita si
recursivitatea neliniară sau în cascadă), ca în cazul determinării unui
element al şirului lui Fibonacci după formula:
int fibonacci (int n)
{
if (n<=1) return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
34
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
35
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
38
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
40
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
41
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
45
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
n
1) x 1
0
2) x x
1
3) x
n
x 2 2
, daca n este par 4) x n x n -1x, daca n este impar
Se observă cum valorile lui n scad, până când atinge unul dintre
cazurile de bază.
46
n
1) x 1
0
2) x x
1
3) x
n
x 2 2
, daca n este par 4) x n x n -1x, daca n este impar
47
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
50
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
51
1. Algoritmi: generalitati
2. Algoritmi: modele de calculabilitate
3. Teoria functiilor recursive
4. Scheme de recurenta; reduceri
5. Recurenţă şi iteraţie in programare
BIBLIOGRAFIE
1. Răzvan ANDONIE, Ilie GARBACEA: Algoritmi
fundamentali. O perspectivă C++, Editura Libris, Cluj-
Napoca, 1995.
2. Cristian Sorin CALUDE: Theories of Computational
Complexity, Elsevier Science Publ., Amsterdam, 1988.
3. Richard JOHNSONBAUGH, Marcus SCHAEFER:
Algorithms, Pearson Prentice Hall, Upper Saddle River, NJ.,
2004.
4. D. JOYCE: The Dedekind/Peano Axioms, Clark University,
posted on January 2005,
http://aleph0.clarku.edu/~djoyce/numbers/peano.pdf
5. Dexter C. KOZEN: Theory of Computation, Springer-Verlag,
Berlin Heidelberg, 2006.
52