Documente Academic
Documente Profesional
Documente Cultură
AL GO RIT MI SI CO MPLEXI T AT E
1. 1. AL G O RI TM I
Un e xe m p l u s i m p l u d e a l g o r i t m e s t e r e e t a d e b u c ă t ă r i e . Ma j o r i t a t e a a l g o r i t m i
l o r s u n t m a i c o m p l e c i : a u p a i c a re s e r e p e t ă , n e c e s i t ă d e c i zi i . Ma i m u l t , a
lgoritmii pot fi compu i pentru a crea al i algoritmi.
I n i i a l c o n c e p t u l d e a l g o r i t m a r e p r e ze n t a t o p r o c e d u r ă p e n t r u r e zo l va r e a u n e i p r o b l e m e
m a t e m a t i c e ( e x. g ă s i r e a d i vi zo r u l u i c o m u n a d o u ă n u m e r e , î n m u l i r e a a d o u ă n u m e r e ) .
Î n f o r m a s a a c t u a l ă , c o n c e p t u l a f o s t f o r m a l i za t d e c ă t r e A l a n T u r i n g i Alon
zo Ch u r c h î n l u c r ă r i l e l o r " M a ini Turing" i respectiv "Lambda Calcul".
Algoritmii sunt esen iali în procesarea informa iei în calculator deoarece un program de calcula
tor este practic, un algoritm. Di n acest punct de vedere, algoritmul poate fi
considerat ca "o secven ă de opera ii care pot fi executate de către un sistem Turing compl
Defini ie: Un algoritm este un proces de calcul definit de către o ma ină Turing (Gurevich,
2000).
Un a l g o r i t m t r e b u i e s ă s e t e r m i n e s a u n u ?
Un i i autori r e s t r i c i o n e a ză defini ia algoritmului la o procedur ă care se ter
m i n ă . A l i i c o n s i d e r ă c ă a l g o r i t m i i s u n t p r o c e d u r i c a r e p o t s ă s e e xe c u t e l a
infinit, o astfel de procedur ă numindu-se "metodă de calcul". În aceste ca
zu r i se consideră că a l g o r i t m u l t r e b u i e s ă “ g e n e r e ze o b i e c t e ” .
E x e m p l u : Un a l g o r i t m c a r e ve r i f i c ă d a c ă e xi s t ă m a i m u l t d e u n ze r o î n t r - o s e c
ve n ă i n f i n i t ă d e c i f r e b i n a r e a l e a t o a r e t r e b u i e s ă s e e xe c u t e l a i n f i n i t .
1. 1. 1. Expr i m ar e a al gor i t m i l or
A l g o r i t m i i p o t f i e xp r i m a i p r i n m a i m u l t e m
oduri: − limbaj natural;
− pseudocod; − sc
heme logice;
− limbaje de programare.
E xp r i m a r e a p r i n l i m b a j n a t u r a l t i n d e s ă f i e c o m p l i c a t ă i, uneori, ambiguă.
Pseudocodul i s c h e m e le l o g i c e s u n t m o d a l i t ă i s t r u c t u r a t e d e e xp r i m a r e
a algoritmilor i sunt independente de limbajul de programare.
În final, limbajul de programare este preferat deoarece r e p r e zi n t ă
e xp r i m a r e a a l g o r i t m u l u i î n t r - o f o r m ă c e p o a t e f i e xe c u t a t ă d e c ă t r e c a l c u l a t o r .
E x e m p l u l 1 : Un a l g o r i t m c a r e g ă s e t e c e l m a i m a r e n u m ă r d i n t r - o l i s t ă
1. A d m i t em c ă p r i m u l e l e m e n t e s t e c e l m a i m a r e .
2. Examinează fiecare din elementele rămase în listă i dacă este mai mare decât "cel mai
mare", atunci notează acest fapt (notează-l ca fiind "cel mai mare").
3. Ultimul element notat este "cel mai mare".
Pseudocod :
end_if
return cel_mai_mare
Exemplul 2: A l g o r i t m u l l u i E u c l i d p e n t r u a f l a r e a c e l u i m a i m a r e d i vi z o r c
omun a două numere naturale.
Limbaj natural:
Fiind date două numere naturale a i b , t e s t e a z ă d a c ă b e s t e z e r o . D a c d i v i z o r c o mă d a , a e s t e c e l m a i
un. Dacă nu, repetă procesul utilizând pe b i ce rămâne după mare împăr irea lui
a la b.
Pseudocod:
function cmmdc(a, b)
if b= 0 then return a
d b) end_if
sau
function cmmdc(a, b)
while a ≠b do
_while
Fie . S ă a r ă t ă m c ă o r i c e d i vi zo r a l l u i
a, b N , a > b a = qb + r a i b e
s t e d i vi zo r i
pentru r . A ve m r = a − qb . Da c ă d e s t e u n d i vi zo r a l l u i a i b, fie a = sd , b = td . Re zu l t ă r = sd
− qtd = ( s − qt ) d . De c i d e s t e d i vi zo r a l l u i r . Cu m o r i c e d i vi zo r a l l u i a i b e s t e d i vi zo r
i pentru r atunci i c e l m a i m m a r e d i vi zo r s e r e f e r ă i la r. Este suficient să continuăm proces
ul cu numerele b i r . Cu m r e s t e m a i m ic c a b î n va l o a r e a b s o l u t ă , vo m g ă s i r = 0
într-un număr finit de pa i.
Cl a s i f i c a r e f u n c i e d e c o m p l e xi t a t e
Un i i a l g o r i t m i s e î n c h e i e î n t r - u n t i m p l i n e a r , a l i i î n t i m p e xp o n e n i a l ,
i a r a l i i n u se î n c h e i e . Di n a c e s t p u n c t d e ve d e r e a l g o r i t m i i s u n t c l a s i f i c a i î n
c l a s e d e e c h i va l e n ă b a za t e p e c o m p l e xi t a t e .
I n c o n t i n u a r e n o i vo m f i i n t e r e s a i d e a c e s t u l t i m t i p d e c l a s i f i c a r e .
P e n t r u a f o r m a l i za c o n c e p t e l e l e g a t e d e ″ C o m p l e x i t a t e a A l g o r i t m i l o r ″ e s t e n e
vo i e d e u n m o d e l c o m p u t a i o n a l . Un a s t f e l d e m o d e l e s t e ″ M a i n a T u r i n g ″ .
1. 2. M AS I N A TU RI NG
Defini ia 1. Un alfabet Σ este o mul ime nevidă i finită de elemente, numite simboluri:
Σ = {σ1, σ 2 , ... , σ n} .
E xi s t ă o s t a r e d i s t i n c t ă ″ S T A R T ″ i u n a ″ S T O P ″ . Un e l e m a i n i Tu r i n g i a u î n c o n s i d e r a i e o s u b m u l i
me F a l u i Q c a f ii n d m u l i m e a d e s t ă r i f i na l e . L a f i e c a r e p a s , a u to m a t u l s e a f l ă
într-o stare qi , a vâ n d c a i n t r ă r i k simboluri (de pe cele k b e n zi ) p e c a r e c a p e t e l e d e c i t i r e l e citesc
q
c a p e t e l e l e s c r i u p e b e nzi l e c o r e s p u n ză t o a r e ( s i m b o l u r i l e n o i ) si o noua stare j . Fiecare
c a p ă t e xc u t ă a p o i o d e p l a s a r e s â n g a , d r e a p t a s a u s t ă p e l o c .
Re zu m â n d , o m a i n ă Tu r i n g d e t e r m i n i s t i c ă c u k b e n zi ( k ≥ 1 ) e s t e q u i n t - u p l
u l Q, Σ, I , q0, F , u n d e :
Q: mul imea finită de stări;
I : o mul ime finită de elemente q, s, s′, m, q′ , unde q, q′ Q , s, s' Σk, m {Left , Right , Stay }k
m i c ă r i l e p e c e l e k b e n zi .
0 este starea ini ială. Vom mai considera i F Q o mul ime de stări finale.
Qu i n t - u p l u l q, s, s′, m, q′ este u n p a s ( o i n s t r u c i u n e ) a l ( a ) m a i n i i Tu r i n g u n d e :
q : starea curentă;
s = (s1, s2 ,...sk ) : c e l e k simboluri curente luate în considera ie pe cele k b e n zi ;
m = (m1, m2 ,..., mk ) : m i c ă r i l e p e c e l e
k benzi.
q' : s t a r e a n o u ă .
E n u m e r a m c â t e va e l e m e n t e c a r e c a r a c t e r i ze a ză o m i n ă Tu r i n g .
I n t r a r e a m a i n i i Tu r i n g : c e l e k c u vi n t e de pe cele k b e n zi , scrise ini i
a l î n c e p a n d c u c e l u l e l e ″ ze r o ″ .
Ie i r e a m a i n i i Tu r i n g : c e l e k c u vi n t e s c r i s e p e b e n zi î n m o m e n t u l c â n d m a i n a
Tu r i n g s e o p e t e . Î n m o d f r e c ve n t , s u n t e m i n t e r e s a i d o a r e d e u n u l s i n g u r .
S t a r e a g l o b a l ă a m a i n i i Tu r i n g o n o t ă m c u S = {starea curentă a automatulu
i , c o n i n u t u l c u r e n t a l c e l o r k b e n zi , p o zi i i l e c u r e n t e a l e c e l o r k c a p e t e }.
x = ( x1, ... , xk ) ,
No t ă m c u S 0 s t a r e a g l o b a l ă i n i i a l ă .
x1, ... ,
x xk
C a l c u l u l d e t e r m i n i s t a l m a i n i i Tu r i n g T pentru intrarea (unde iar
s u n t c u vi n t e ) î l n o t ă m c u T ( x) i e s t e s e c ve n a d e s t ă r i g l o b a l e c a r e î n c e p
e c u s t a r e a i n i i a l ă S0 , i a r f i e c a r e s t a r e g l o b a l ă u r m e a ză a l t e i a î n i r .
Re zu l t ă c ă m a i n a Tu r i n g d e t e r m i n i s t ă e s t e c a r a c t e r i za t ă d e f a p t u l că ar
e cel mult o intrare pentru orice combina ie de simboluri i stări.
Da c ă x e s t e u n c u vâ n t d e i n t r a r e , a t u n c i s p u n e m c ă p r o c e s u l d e c a l c u l a l m a i n i i Tu r
ing, pentru x, se opre t e d a c ă T ( x) este finită i ultima stare este finală.
Cu vâ t u l x e s t e a c c e p t a t d e m a i n a Tu r i n g T dacă T ( x) este finită i dacă ultima st
are este o stare de acceptare. Vom considera două stări finale mai importante:
ユ qA : s t a r e a d e a c c e p t a r e ;
ユ qR : s t a r e a d e r e j e c t a r e .
}
d
Pentrum a i n a Tu r i n g T notăm cu L (T ) = {xΣ /T ( x) se incheie cu qA , l i m b a j u l a c c ep t a t e
ma ina T .
Ma i n a Tu r i n g n e d e t e r m i n i s t ă e s t e c a r a c t e r i za t ă d e f a p t u l c ă p e n t r u o r i c e s t a r
e q i simbol s, oricare dintre st ă rile din Q poate fi s t a r e u r m ă t o a r e . Un e i s t
ă ri globale S îi poate urma orice stare globală P.
q0 qH H + 1
ϑ
qH qE E + 1
ϑ
qE qL
ϑ
1 L + 1
qL q L2
1
ϑ
L + 1
qL2 qO
ϑ
O 0
qO 0 qA O 0
q0
↓
1.
ϑ ϑ ϑ ϑ ϑ ϑ ϑ
↑
s0 qH
2.
H
↑
sH qE
3. ϑ
H E
↑
sE qL
1
4. L
H E ϑ
sL q L2
1
5. L
H E L O
qO
6. L
H E L O
s0
qA
7. L
H E L O
sA
E x e m p l u l 2 . Ma i n a Tu r i n g c a r e d e t e r m i n ă c u vi n t e l e p o l i n d r o m a l e a l f a b e t u l u i { 0, 1 }.
q0 0 q0 0 + 1
q0 1 q0 1 + 1
q0 qR
ϑ
0
ϑ
− 1
s0 1 q1 + 1
ϑ
q1 0 q1 0 + 1
q1 1 q1 1 + 1
q1 qR
ϑ
1
ϑ
− 1
qR qREV
0 0 ϑ
− 1
qR qREV
1 1 ϑ
− 1
qR qR
0 1 ϑ
0
qR qR
1 0 ϑ
0
qREV qREV
0 0 − 1
qREV qREV
1 1 − 1
qREV s0
ϑ ϑ
+ 1
s0 qA 0
ϑ ϑ
Mu l i m e a s t ă r i l o r e s t e
Q = {q 0 , s0 , qR , qA , qREV , qR1
, qR0 ,}.
I n u r m ă t o a r e l e e xe m p l e i a r c u vâ n t u l s = 0 1 1 1 va de calcul pentru această ma in
ă , c u vâ n t u l s = 0 1 1 0 va f i a c c e p
tat fi rejectat.
P1: s0 , 0 1 1 0
↑
P2: q0 , 1 1 0
ϑ
P3: q0 , 1 1 0
↑
ϑ
P4: q0 , 1 1 0
↑
ϑ
P5: q0 , 1 1 0
ϑ ϑ
↑
qR ϑ
1 1 ϑ ϑ
P6: 0 ,
P7:
↑
ϑ
1 1 ϑ ϑ
qREV ,
↑
P8:
ϑ
1 1 ϑ ϑ
qREV ,
↑
P9:
ϑ
1 1 ϑ ϑ
qREV ,
P 10: 1 1
ϑ ϑ ϑ
s0 ,
↑
P 11:
ϑ ϑ
1 ϑ ϑ
Q1 , ↑
P 12 : ϑ ϑ
1 ϑ ϑ
↑
Q1 ,
P 13: ϑ ϑ
1 ϑ ϑ
,
↑
qR ϑ ϑ ϑ ϑ ϑ
P 14:
↑
ϑ ϑ ϑ ϑ ϑ
qREV , ↑
Accept
P 15: s0 ,
P 16: qA
P1: s0 , 0 1 1 1
P2: 1 1 1
ϑ
q0
↑
P3: q0 , 1 1 1
ϑ
P4: q0 , 1 1 1
ϑ
↑
P5: q0 , 1 1 1
ϑ ϑ
P6: qR
0 , 1 1 1
↑
ϑ ϑ
P7: qR , 1 1
↑
ϑ ϑ ϑ
Re j e c t
In continuare dăm enun ul a două teoreme.
Ca l c u l a t o a r e l e m o d e r n e , c u p r o g r a m e î n r e g i s t r a t e s u n t ″ i n s t a n e ″ a l e u n e i m a i n i Tu r i n g m a i s o f i
sticate numită ″Ma i n ă P r o g r a m c u a c c e s a l e a t o r ″ ( Ra n d o m A c c e s S t o r e d P r o g r a m
Ma c h i n e − R A S P ) .
RA S P î n r e g i s t r e a ză p r o g r a m u l î n m e m o r i e . P r o g r a m u l e s t e o s e c ve n ă f i n i t
ă de stări ale ma inii (numite i i n s t r u c i u n i ) . RA S P a r e u n u m ă r i n f i n i t d e
registrii − celule de memorie care pot con ine orice întreg.
RA S P e s t e c a r a c t e r i za t ă d e ″ a d r e s a r e a i n d i r e c t ă ″ − con inutul unui registr
u poate ″arăta″ spre adresa oricărui alt registru.
1. 3. M ĂS U R AR E A CO M P LEXI T Ă I I
E xi s t ă d o u ă t i p u r i d e m ă s u r ă a c o m p l e xi t ă i i a l g o r i t m i l o r .
V o m d a o m ă s u r ă a c om p l e xi t ă i i d i n p u n c t d e ve d e r e a l t i m p u l u i d e e xe c u
i e a l u n u i a l g o r i t m . V o m f o l o s i c a m o d e l c o m p u t a i o n a l m a i n a Tu r i n g .
Î n g e n e r a l , c â n d v o r b i m d e s p r e t i m p u l d e e xe c u i e a l u n u i a l g o r i t m , n e g â n d i m l a n u m ă r u l d e
pa i e xe c u t a i de procesul computa ional (calculul determinist) asociat a l g o r i t m u l u i . Câ n
d procesul de calcul nu se opre te, considerăm timpul ca fiind nedefinit.
D e f i n i i e . A n a l i za c o m p l e x i t ă i i d e t e r m i n ă t i m p u l î n c a r e o p e r a i i l e d e ba
ză a l e u n u i a l g o r i t m s u n t e x e c u t a t e p e t r u f i e c a r e s e t d e d a t e d e i n t r a r e .
S u n t m a i m u l t e c a zu r i î n c a r e s e d e t e r m i n ă c o m p l e xi t a t e a u n u i a l g o r i t m :
1. Ca zu l d e f a vo r a b i l , W ( n) : în cât timp opera iile de bază s u n t e xe c u t a t e î n c a zu l
d e f a vo r a b i l .
2. Ca zu l c e l m a i b u n , B ( n) : î n c â t t i m p o p e r a i i l e d e b a z ă s u n t e xe c u t a t e î n c a zu l c e l
mai bun.
3. F i e c a r e c a z, T ( n) : în cât timp opera iile de bază s u n t e xe c u t a t e p
e n t r u f i e c a r e c a z.
4. Ca zu l m e d i u , A ( n) : î n c â t t i m p o p e r a i i l e d e b a z ă s u n t e xe c u t a t e î n m e d i e .
Î n c o n t i n u a r e d ă m c â t e v a e xe m p l e d e c a l c u l a c o m p l e xi t ă i i .
E x e m p l u l 1 . C ă u t a r e a s e c ve n i a l ă î n t r - u n tablou s = [ 1,..., n] :
begin
loca ie ← 1
w h i l e ( l o c a i e ≤ n ) a n d ( s [ l o c a i e ] ≠ x) d o
loca ie ← loca ie + 1
end_while
loca ie ← 0 /e l e m e n t n e g ă s i t /
end_if
end
S ă a n a l i ză m c o m p l e xi t a t e a î n c e l e p a t r u c a zu r i .
1. W ( n) = n + 1e l e m e n t u l x nu este în tablou.
Ca zu l 1 . x e s t e î n t a b l o u . To a t e c o m p o n e n t e l e t a b l o u l u i a u va l o r i d i f e r i t e . Re zu l t ă c ă
1 . Re zu l tă că
x poate fi găsit în f ie c a r e dintre ele cu aceea i probabilitate,
n
1
A ( n) = =
n n ( n + 1) n+ 1 .
∑n k 1 ∑ k = 1 = n+ 1 este, practic, va l o a r e a medie a teptată a
2
n n n 2 2
k =
1 k = 1
compara iilor.
Ca zu l 2 . x s e a f l ă s a u nu î n t a b l o u . F i e p p r o b a b i l i t a t e a c a e l s ă s e a f l e î n t a b l o u .
p , i a r p r o b a b i l i t a t e a c a e l să n u
P r o b a b i l i t a t e a c a e l s ă s e a f l e î n u n u l d i n e l e me n t e e s t e
fie în tablou este ( 1 − p)
. n
+ n −
p n+ 1 np = p + p n + n − np =
2 2 2
p p n p p
+ n + n 1
− −
= = .
2 2 2 2
r e zu l t ă A ( n) = 3 n +
1.
A ( n)
Pentru p = 1 r e zu l t ă = n + 1i p e n t r u p = 0,5
2
begin
for i = 1 to n −1 d o
for j = i+ 1 to n do
if ( s [ j] < s [ i] ) t h e n
s[i] ↔ s[ j]
end_if
end
No t ă m c u T ( n) . n u m ă r u l d e p a i e xe c u t a i d e a l g o r i t m .
Op e r a i i l e d e b a ză s u n t : c o m p a r a i a s [ i] c u s [ j] i s c h i mb a r e a s [ i] c u s [ j] .
B u c l a e xt e r i o a r ă s e e xe c u t ă d e n −1 o r i .
L a p r i m u l p a s a l b u c l e i e xt e r i o a r e s e vo r e xe c u t a n −1 p a i î n b u c l a i n t e r i o a r ă .
L a a l d o i l e a p a s a l b u cl e i e xt e r i o a r e vo r f i n−2 pa i în bucla interioară. Apoi n−3, n−4
pa i, etc.
= (n − 1) + (n − 2) +
n ( n − 1) , i a r c o m p l e xi t a t e a e s t e O(n2) .
De c i T ( n) .... + 2 + 1 =
2
Ur m ă t o a r e l e d e f i n i i i r e p r e zi n t ă c a zu r i d e m ă r g i n i r e a c o m p l e xi t ă i i .
p r o p r i e t a t e a c ăc Ri n0 N , astfel încât g ( n) ≤ c f ( n) ,n ≥ n0 .
E xe m p l u . f ( n) = n2 i g ( n) = n2 + 10 n .
n [ ( 1 − c) n + 10 ]≤0
n2 + 10 n ≤ c n2 ; ( 1 − c) n2 + 10 n ≤ 0 ; ; n [ ( 1 − c) n + 10 ]≥0
10
P e n t r u u n n0 >
c−1 , p r i m a i n e g a l i t a t e e s t e a d e vă r a t ă .
mul imea func iilor g ( n) , c
f ( n) notăm cu Ω( f ( n)) u
p r o p r i e t a t e a c ăc Ri n0 N , astfel încât g ( n) ≥ c f ( n) ,n ≥ ne .
+
E xe m p l u l 1 . n3 Ω ( n2 ) p e n t r u c ă n3 ≥ 1 n p e n t r un ≥ 1 .
E xe m p l u l 2 . n ( n + 1) Ω ( n ) 2 . Astfel,
2
n (n+
1) ≥ n n+ 1 ≥ n n = n2 pentru n ≥ 2.
2 2 2 2 2 4
De c i p e n t r u c = 1i n0 = 2 a ve m î n d e p l i n i t ă c o n d i i a i m p u s ă î n d e f i n i i e .
4
Defini ia 3. Pentru o func ie f ( n) notăm cu Φ( f ( n)) = O ( f ( n)) ∩ Ω ( f ( n)) mul imea func
iilor g ( n) , cu proprietatea că c1, c2 i n0 N astfel încât c1 f ( n) ≤ g ( n) ≤ c2 f ( n) , n ≥ n0 .
E xe m p l e d e c l a s e d e c o m p l e xi t a t e :
O ( n2 ) : 3log ( n) + 8, 4 n2 , 5 n + 7 , 6 n2 + 9 , 2 n log ( n) ,
, 6 n6 + n4 , 5n2 + 2 n , 2n + 4n Φ
P r e ze n t ă m î n c o n t i n u a r e u n a l g o r i t m d e c a u t a r e c a r e a r e o c o m p l e xi t a t e m
a i b u n ă d e c â t a l o g o r i t m u l d e c a u t a r e s e c ve n i a l ă .
A n a l i za c o m p l e xi t ă i i .
Co n s i d e r ă m c a zu l d e f a vo r a b i l W ( n) . Presupunem că n este putere a lui 2, mai precis
c ă W ( n) = log ( n) + 1 .
Di n î n j u m ă t ă i r e a s e c ve n e i d e c ă u t a r e d e d u c e m :
)
( = n
+
0Ω
W
( 1)
n
=
W 2
1
1
0Ω ( 2) = W ( 1) + 1 = 2
0Ω ( 4) = W ( 2) + 1 = 3
0Ω ( 8) = W ( 4) + 1 = 3 +1 = 4
0Ω ( 16) = W ( 8) + 1 = 4 +1 = 5
Să demonstrăm prin induc ie că W ( n) = log ( n) + 1.
Pentru n = 1: W ( 1) = 1 = log ( 1) + 1
Presupunem W ( n) = log ( n) + 1
W ( 2 n) = W ( n) + 1 = log ( n) + 1 + 1 = log ( n) + log ( 2) + 1
=
log ( 2 n) + 1
A l g o r i t m u l d e s o r t a r e b i n a r ă e s t e u n e xe m p l u de problemă Divide-et-Im
pera ($Error! Reference source not found.).
O ( log ( n)) a p a r e c â n d o p r o b l e m ă m a i m a r e e s t e r e zo l va t ă p r i n t r a n s f o r m a r e a e i î n t r - o
problemă de dimesiune mai mică (tip logaritmic);
O ( n lg ( n)) a p a r e c â n d o p r o b l e m ă e s t e ″ s p a r t ă ″ î n m a i m ul t e s u b p r o b l e m e r e zo l va b i l e
independent, iar apoi sunt combinate solu iile (tip linearitmic);
O ( 2n ) t i p e xp o n e n i a l .
P r i m e l e t r e i c u r b e d i n s t â n g a g r a f i c u l u i d e m a i s u s r e p r e zi n t ă î n o r d i n e ( d
e l a s t â n g a l a d r e a p t a ) c o m p l e xi t ă i l e O ( 2n ) , O ( n 2 ) i O ( n lg ( n)) .
I a t ă c â t e va c a zu r i p r a c t i c e d e s t a b i l i r e a c o m p l e xi t ă i i .
Ca zu l d e r e zo l va r e a l u n e i s i n g u r e i n s t r u c i u n i c e s e e xe c u t ă o s i n g u r ă d a t ă :
O ( 1)
Ca zu l d e r e zo l va r e : f o r
i = 1 to n do
s ;
u n d e s e s t e O ( 1) . Re zu l t ă c o m p l e xi t a t e a n O ( 1) = O ( n) .
Ca zu l d e r e zo l va r e : f o r i
= 1 to n do
for j = 1 to n d
o s ;
u n d e s e s t e O ( 1) . Re zu l t ă c o m p l e xi t a t e a n O ( n) = O ( n2 ) .
Ca zu l d e r e zo l va r e :
h = 1
while (h ≤ n) d
o s ;
h←2 h
end_while
O ( log2 n)
t r e c e r i . A ve m c o m p l e xi t a t e a .
Ca zu l d e r e zo l va r e :
for i = 1 to n − 1 do
for j = i to n do
s ;
Ca zu l d e r e zo l va r e :
h = n; j =1
while j < h do
for i = 1 to n do
s;
0h ← h / 2
0e nd_while
itera i
log2n
Bucla interioară are c o m p l e xi t a t e a O ( n) iar bucla e xt e r i o a r ă e xe c u t ă i.
Co m p l e xi t a t e a e s t e d e c i O ( nlog2 n) .
1. 4. RE CU RSI VI T ATE
În general, spunem că un obiect sau o metodă este recursiv (ă) dacă se p
o a t e d e f i n i î n f u n c i e d e e l ( e a ) î n s u i ( î n s ă i ) . Ma i p r e c i s , u n a s t f e l d e o b i
ect sau metodă, se poate defini prin:
− c â t e va c a zu r i s i m p l e s a u m e t o d e s i m p l e ;
− r e g u l i c a r e t r a n s f o r m ă c a zu r i l e c o m p l e xe î n c a z u r i s i m p l e .
E xe m p l u :
− orice părinte are un strămo ;
− părin ii oricărui strămo sunt de asemenea strămo i ai persoanei considerate.
Ca zu l f u n c i i l o r :
O f u n c i e e s t e d e f i n i t ă r e c u r s i v d a c ă p o r n i n d d e l a a n u m i t e va l o r i a l e e i ,
se pot calcula alte valori prin autoapelarea func iei. Altfel spus, o func ie rec
u r s i vă e s t e p a r i a l d e f i n i t ă î n t e r m e n i d e e a î n s ă i .
De f i n i i a u n e i f u n c i i r e c u r s i ve t r e b u i e s ă s a t i s f a c ă c o n d i i a d e c o n s i s
t e n ă : va l o a r e a f u n c i e i r e c u r s i ve t r e b u i e s ă f i e d i r e c t c a l c u l a bi l ă s a u c a l c
u l a b i l ă c u aj u t o r u l u n o r va l o r i d i r e c t c a l c u l a b i l e .
Î n d e f i n i r e a u n e i f u n c i i r e c u r s i ve trebuie să apară cel pu in o condi i
e d e o p r i r e d i n r e c u r s i vi t a t e .
E xp r e s i a u n e i f i n c i i r e c u r s i ve e s t e d a t ă d e o r e l a i e d e r e c u r e n ă . F i e o s e c ve n ă {tn} n ≥1
i k N . Da c ă a ve m :
tn = a1 tn + a2 tn + .... + ak tk
+k + k−1 + k−2
a t u n c i s e c ve n a e s t e o s e c ve n ă r e c u r s i vă d e o r d i n k , iar rela ia precedent
ă e s t e o r e l a i e r e c u r s i vă d e o r d i n k .
1. 4. 1. Exem pl e de f un c i i r ecur si ve
A l g o r i t m E u c l i d s c r i s c a f u n c i e r e c u r s i vă :
function cmmdc ( m, n)
if ( n = 0) then return m
else
A g o r i t m u l E u c l i d s c r i s c a p r o c e d u r ă r e c u r s i vă
procedure cmmdc ( i n : m , n ; out result)
if ( n = 0) then result ← m
m
else cmmdc n, m − n
; result
n
end_if
end_proc.
A p e l : cmmdc ( a, b ; raspuns)
2. Func ia factorial
fact : N → N
(
) 1, daca n = 0
fact n = ( )
n fact n −1 , daca n ≥ 1
function fact ( n)
if ( n = 0) then return 1
end_if
end_func.
E xe m p l u d e c a l c u l e f e c t i v p e n t r u f u n c i a f a c t o r i a l :
factorial (3)
factorial (2)
factorial (1)
factorial (0) return (0)
return 2 1= 2
return 1 1= 1
return 3 2= 6
3. Func ia putere xn
Pentru un întreg x> 0 să se c a l c u l e ze xn , unde n ≥ 0. Vom considera func ia
( ) 1, dacă n = 0
putere x, n = ( )
x putere x, n − 1 , dacă n ≥ 1
+
Co r e c t i t u d i n e a defini iei r e zu l t ă din x0 = 1 (pasul de ve r i f i c a r e ) i xn 1 = x xn (pasul de
induc ie).
A f i r m ă m c ă f u n c i a ( 1 ) a r e c o m p l e xi t a t e a O ( n) .
No t ă m c u T ( n) t i m p u l d e e xe c u i e a f u n c i e i p u t e r e .
T ( n) = T ( n − 1) + O ( 1) , unde O ( 1) e s t e t i m p u l n e c e s a r p e n t r u a r e t u r n a va l o a r e a x .
T ( n) = T ( n − 1) + O ( 1) = T (n + 2 O
− 2) ( 1) + ....
T ( n) = T ( 0) + n O ( 1) .
Re zu l t ă c o m p l e xi t a t e a O ( n) .
E xp r i m â n d a l t f e l f u n c i a p u t e r e , vo m o b i n e u n a l g o r i t m c u o c o m p l e xi t a t e m a i Ob s e r bună.
vă m c ă x4 s e p o a t e c a l c u l a m a i u o r d a c ă a m c a l c u l a t x2 , d e o a r e c e x4 = ( x2 ) 2 .
La
fel, x6 = ( x3 ) 2 . No t ă m n / 2 = n div 2
Co n s i d e r ă m xn div 2 = putere (x,n div 2) i notăm cu sqr ridicarea la puterea doi. Atun
ci
n−
1 dacă n
( puter ( )) =
x ,
sqr e x, n div 2 impar dacă
xn ,
n par
Atunci:
0n x * sqr ( putere ( x, n div
)) , dacă n
0ξ =
sqr ( putere ( x, n div 2)) ,
impar , dacă
n par
iar algoritmul complet este:
1
, dacă n = 0
( )= ( ( ))
putere x, n x sqr putere x, n div 2 , dacă n impar
n div
sqr ( putere ( x, 2)) , dacă n par
No t ă m c u T ( n) t i m p u l d e e xe c u i e p e n t r u a c e a s t ă f o r m u l ă . F i e n = 2m . Atunci:
1, pentru n = 1
)
( =
T
n T
n
2 + 1, pentru n > 1
T ( n) = T ( 2m ) = T ( 2m −1 ) + 1 = T ( 2m − 2 ) + 2 = .... = T ( 20 ) + m = T ( 1) + m = m + 1 = log2 n + 1 Re
zu l t ă c o m p l e xi t a t e a
O ( log2 n) .
4. A l t e e xe m p l e d e f u n c i i r e c u r s i ve :
a) Fibonacci: fib : N → N
( ) 1, n = 1, n = 2
fib
n = ( ) ( )
fi + n −
b n−1 2 , n > 2
b) Ackerman:
m=
n + 1, 0
( ) = ( − ) =
ac
ack m, n k m 1, 1 , n 0
(m −1, (m n−
ack ack , 1)) , rest
c) Ma n n a − P u n e l l i
x−
( ) 1, x ≥ 12
mana n = ( ( )) [ )
f f x+ 2 , x0, 12
1. 4. 2. Ti p ur i de r e cur si e
P e n t r u e xp r i m a r e , vo m f o l o s i f u n c i i l e : f ( x) , g ( x) , h ( x) , i ( x) ,( u,v) .
a ) Re c u r s i a l i n i a r ă
(
) g ( x) , dacă p ( x) = true
f x = ( f (h ( x)) ,
i ( x)) , altfel
E xe m p l u : fact ( n)
b ) Re c u r s i a n e l i n i a r ă d e t i p c a s c a d ă
g p ( x) =
( ) ( x) , dacă true
f x = ( f (h ( x)) , f (i
( x))) , altfel
( ) 1, n = 1 sau n = 2
E xe m p l u : fib n = ( ) ( )
fi n −1 + >
b fib n−2 , altfel n 2
c ) Re c u r s i a n e l i n i a r ă d e t i p î m p a c h e t a t
g dacă p =
( ) ( x) , ( x) true
.
.
.
.
.
(
h
(
x
)
)
)
f x = f ( f ( ...... f ( h ( x))) , , ........) , altfel
E xe m p l u : mana ( n)
1. 4. 3. Ecua i i r ec ur ent e
Î n m u l t e c a zu r i , a n a l i za c o m p l e xi t ă i i a c conduce la ecua ii recure
e s t o r a . P r e ze n t ă m d o u ă t e h n i c i g e n e r a l e nte i l a r e zo l va r e a p e n t r u r
e zo l va r e a e c u a i i l o r r e c u r e n t
e.
i n i i a l e a ve m tn = 3n − 2n . e ks o lu i i distincte,
tn
recurente.
Fiecare dintre ace ti termeni trebuie introdus în solu ia generală (prin adunare).
E xe m p l u : S ă s e r e zo l ve : tn − 7 tn − 1 + 15 tn − 2 + 9 tn − 3 = 0 , t0 = 0 , t1 = 1 , t2 = 2 .
+ 15 r − 9 = 0 . Re zu l tă r1 = 1 ,
Ecua ia caracteristică este r 3 − 7 r 2 r2, 3 = 3 .
tn = −1 + 3n − n 3n −1 .