Sunteți pe pagina 1din 32

1.

AL GO RIT MI SI CO MPLEXI T AT E

1. 1. AL G O RI TM I

Defini ie: Un algoritm este o procedur ă (o mul ime finit ă de reguli bi


ne definite) care îndepline te un obiectiv precis. Algoritmul pleac ă de la
o stare ini ială i se termină într-o stare finală.

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

e t " . E xi s t ă d e f i n i i i a l e n o i u n i i d e a l g o r i t m i c a r e î i l e a g ă d e " Ma ina Turing" ($1.2).

Defini ie: Un algoritm este un proces de calcul definit de către o ma ină Turing (Gurevich,
2000).

De o a r e c e p r o c e s e a ză informa ie, algoritmul cite te date de la un di s p o zi t i v i poate înregistra


( s a l va ) d a t e n e c e s a r e a l t o r p r o c e s ă r i . Da t e l e s a l va t e s u n t p r i vi t e c a o p a r t e a s t ă r i i i n t e r n e a a l g o
ritmului. În practică astfel de stări sunt înregistrate în "structuri d e d a t e " . Un a l g o r i t m n e c e s i t ă
i date interne pentru opera ii specifice. Acestea se numesc

"tipuri de date abstracte".

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 ă

de numere. Limbaj natural:

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 :

Intrare: O listă L de elemente nevidă

Ie ire: Cel mai mare element din lis


ta L cel_mai_mare ← L0
for element în L >1 do

if (element > cel_mai_mare) then cel_


mai_mare ← element

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

else return cmmdc(b, a mo

d b) end_if

sau

function cmmdc(a, b)

while a ≠b do

if a >b then a←a−b


else b ← b− a
end_if end

_while

Vom demonstra corectitudinea acestui algoritm.

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.

1. 1. 2. Cl asi f i car e a al gor i t m i l or

Î n m u l t e c a zu r i s e d o r e t e a s e r e c u n o a t e , p e n t r u u n a l g o r i t m d a t , s u n t n e ccâte resurse particu


esare (timp de e xe c u i e , memorie de stocare). E s t e a l g o r i t m i l o r " . A cl a r e vo r b a despre
easta depinde de "clasificarea algoritmilor". " a n a l i za
Clas if ic ar e f u nc ie d e im plem en tar e :
ユ r e c u r s i v i ( s e i n vo c ă p e e i î n i i ) ⁄ iterativi (au con
s t r u c i i r e p e t i t i ve ) ; ユ logici (controleaz ă deduc ii logi
ce);
ユ seriali (un singur procesor i o singur ă i n s t r u c i u n e e xe c u t a t ă la un
moment dat) ⁄ p a r a l e l i ( m a i m u l t e p r o c e s o a r e c a r e e xe c u t a i n s t r u c i u n i î n a c e l a i t i m
p) ;
ユ deterministici ( o d e c i zi e e xa c t ă la fiecare pas)/ nedetermi
nistici ( r e zo l v ă problema plecând de la presupuneri);

Clas if ic ar e f uc ie de "des ig n " (m et od ă) , ex. :


0• îm
e mp ar
ai t e i s tă p ân e te (îm pa rt e pr ob lem a în un a sa u m ai m ult e ins ta n
0m ici);
0• pr ogr a m ar e di n a mic ă (ca ut ă str uct ur i o pt im ale - o so lu ie o pt im a lă
a pr ob lem ei po a te f i co nstr u ită p le cân d d e la s o lu iile op tim a le a le
su b pro b lem e lor) ;
0• m et o da ″G r ee dy ″ ( cau t ă to t str uct ur i o p tim a le c u d eos e b ire a
c ă so lu iile la sub pr o blem e n u tr e b u ie s ă f ie cu n osc ut e la f iec
ar e pas ; a le g ere a ″G r ee dy ″ se ref er ă la ″c e ar a t ă″ m a i b in e la u n
m om ent da t).

Clas if ic ar e f u nc ie d e dom en iu l d e s tu d iu – a lgor itm ii su nt :


de c ă ut ar e, de so rtar e , n um eric i, a lg or itm i de gr af ur i, de g eom etr ie
com put a io na lă, de î n vă ar e au t om ată , d e cr ipt o graf ie , etc .

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} .

Defini ia 2. Un cuvânt peste Σ este un t -uplu x= σ i1σ i2 ....σ ik s a u m a i s i m p l u σi1σi2 ....σ ik .

Defini ia 3. Un limbaj L peste Σ este o submul ime a lui Σ . Complementul lui


L este Lc = Σ L . Cuvintele în Σ pot fi puse în ordine lexicografică. Astfel:

− pentru n N cuvintele de lungime n precedă cuvintele de lun


gime ( n + 1) ; − pentru orice lungime, ordinea este alfabetică.
Ma i n a Tu r i n g c o n s t ă d i n u r m ă t o a r e l e :
a. k≥1 b e n zi i n f i n i t e î n d o u ă d i r e c i i . B e n zi l e s u n t c o n s t i t u i t e d i n t r - u n n u m ă r i n f i n i t d e c
elule în ambele direc ii. Fiecare band ă are o celulă distinctă, ″celula de start″ sau ″cel ula 0″.
Î n f i e c a r e c e l u l ă a f i e c ă r e i b e n zi , s e p o a t e s c r i e u n s i m b o l a l u n u i a l f a b e t Σ. Se poate ad
mite i ″celula goală″, care con ine ″simbolul nul″ al alfabetului.

b . F i e c a r e b a n d ă a r e u n c a p d e c i t i r e/ s c r i e r e i fiecare pas al acestuia se


f a c e p e b a n d ă . De p l a s a r e a p o a t e f i L e f t , R i g h t , S t a y .
c. O unitate centrală care este un automat finit. Stările acestuia sunt din mul imea Q.

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

(simbolurile cu r e n t e ) . Ie irea este r e p r e ze n t a t ă de alte k si m b o l u r i pe care

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 .

Obs: Pe o bandă, simbolul curent i cel nou nu sunt neapărat diferite.

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;

Σ : m u l i m e f i n i t ă − a l f a b e t u l ( u n d eΣ este simbolul nul);

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 ;

s′ = (s1', s2' ,..., sk' ) : c e l e k simboluri care trebuie scrise;

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.

P r e ze n t ă m c â t e va e xe m p l e ( s t a r e _ c u r e n t a , s i m b o l _ c u r e n t ) de ma ini Tu r i n descrie instruc iun


ile astfel:
g. Vom → (stare_
noua, simbol_nou, increment).
E x e p l u l 1 . Ma i n ă Tu r i n g c a r e n u are la intrare niciun cuvânt iar la i
e i r e t i p ă r e t e c u vâ n t u l “ HE L L O” .

Stare Simbol Stare nouă Simbol nou Increment


curentă curent

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 }.

Stare curentă Simbol curent S


tare nouă Simbol nou I
ncrement
s0 0 q0 + 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.

Teorema 1. Pentru orice k ≥ 1 i orice alfabet Σ, există o ma ină Turing cu ( k + 1) b e n zi .

Teorema 2. Pentru orice ma ină Turing S cu k b e n zi , există o ma ină Turing T cu


o bandă care înlocuie te pe S în următorul sens: pentru orice cuvânt x Σ , ma ina S s
e opre te într-un num ăr finit de pa i la intrarea x dacă i numai dac ă T se opre te
la intrarea x i, la oprire, acela i lucru este scris pe ultima band ă a lui S i pe banda lu
i T . Mai mult, dacă S face N pa i, atunci: T face O ( N2 ) pa i.

O ma ină Tu r i n g c a r e e s t e c a p a b i l ă s ă s i m u l e ze o r i c e a l t ă ma ină Tu r i n g , s e nume te


″ Ma ină Turing Universală″.

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 .

Măsura statică este bazată pe structura algoritmului.


M ă s u r a d i n a m i c ă e s t e b a za t ă p e c a l i t a t e a a l g o r i t m u l u i , i n t r ă r i l e lui,
c o m p o r t a m e n t u l c a l c u l a t o r u l u i î n t i m p u l e xe c u i e i a l g o r i t m u l u i .
De i n t e r e s e s t e m ă s u r a d i a m i c ă .
Î n g e n e r a l , o m ă s u r ă a c o m p l e xi t ă i i Φ e s t e i n d e p e n d e n t ă d e m o d e l u l c o m p u t a i
o n a l d a c ă , î n r a p o r t c u o m u l i m e {Pi} d e a l g o r i t m i , a r e p r o p r i e t ă i l e :

1. i domeniul lui Φi este acela i cu al lui Pi , i a r c o d o m e n i u l e s t e i n c l


us în N , u n d e Φi e s t e măs u r a l u i Pi ;
2 . E xi s t ă u n p r e d i c a t M , a s t f e l î n c â t : M ( i, x, m) ↔ Φi ( x) = m , i, x, m .

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

if (loca ie > n) then

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.

2. B ( n) = 1x se află în primul element.

3. T ( n) nu se calculează deoarece opera iile de bază n u s u n t e xe c u t a t e d e a c e l a i


număr de ori pentru toate instan ele de dimensiune n.
4. Pentru A ( n) :

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

Da c ă x s e a f l ă p e p o zi i a k , vo m a ve a k treceri prin buclă, iar dacă x nu apar ine


A ( n) =
p+ ( 1− p) = p
∑n k + n ( 1− p) =
∑n k
k n
n
t a b l o u l u i , vo m a ve a n t r e c e r i . A t u n c i =1 n k= 1

+ 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

Exemplul 2. Sortarea unui tablou s= [ 1,..., n] prin metoda interschimbării.

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 .

mul imea func iilor g ( n) , c


Defini ia 1. Pentru o func ie f ( n) notăm cu O( 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 ≥ 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

Defini ia 2. Pentru o func ie

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) ,

5 n2 + 2 n Ω ( n2) : 4n2 , 4n3 + 3n2 , 6 n2 +9

, 6 n6 + n4 , 5n2 + 2 n , 2n + 4n Φ

( n2) : 4n2 , 6 n2 +9 , 5n2 + 2 n

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 ă .

Căutarea binară în tabloul s [ 1, ... ,n ] .


begin
min ← 1; max ← n; loca ie ← 0;
w h i l e ( m i n ≤ m a x) a n d ( l o c a i e = 0) do mi
j l o c ← ( m i n + m a x) d i v 2 ;
if (x = s [mijloc]) then loca ie ← mijloc
else if (x < s [mijloc]) then max ← mi
jloc−1 else min ← mijloc + 1
end_if e
nd_if
end_while
end

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

n = 2k . Prima instruc iune din buclă înjumătă e te dimensiunea tabloului de căutare.


Aceasta se întâmplă de fiecare dată când se trece prin buclă.
P e n t r u c a zu l c â n d x e s t e m a i m i c s a u m a i m a r e d e c â t t o a t e e l e m e n t e l e d i n l i s t ă vo m a r ă t a

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

Î n c a zu l c â n d n ≠ 2k a ve m î n g e n e r a l c o m p l e xi t a t e a log (n) + 1 + 1 = O (log (n)) .

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.).

1. 3. 1. Ti p ur i de pr obl em e i com pl exi t at e a l or

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) apare când fiecare element al problemei necesită un mic effort (timp) de


procesare (tip linear);

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 ( n2 ) apare când algoritmul p r o c e s e a ză toate perechile de elemente ale unei


mul imi (tip quadratic);

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

a i c i va r i a b i l a h i a va l o r i l e 1 , 2 , 4 , 8 … , până când d e p ă e t e p e n . Re zu l t ă c ă s u n t 1+ log2 n

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 ;

Bucla interioară se e xe c u t ă de i ori unde i = 1,2,…,n. Nu m ă r u l de e xe c u i i este


O ( n2 ) .
n n(n2+ 1), dec i com p lex ita t ea e ste

i = 1 i=

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

1. Formulă recursivă pentru algoritmul lui Euclid


cmmdc ( m, n) = cmmdc ( n, r1)
P e n t r u m, n N , m > n a ve m , unde r1
este restul împăr irii lui m
la n. De c i r1 = m − n m/n .

A t u n c i cmmdc ( m, n) = cmmdc ( n, m − n m/n ).

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

return cmmdc ( n, m − n m/n )


end_if
end_func
Apel: răspuns ← cmmdc ( a,
b)

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

else return n fact ( n − 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

putere ( x, = 1. A t u n c i , e xp r e s i a r e c u r e n tă a func iei est


putere ( x, n) : N ᅲ N → N . E vi d e n t 0) e:

( ) 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.

Teorema 1. Fie ecua ia recur


entă, omogenă i liniară cu coeficie
n i constan i,
a0 tn + a1 tn + .... + ak tn = 0 . tn = c1 r1n + c2 r2n + .... + ck rkk = 0 .
− 1 − k
+ a
Da c ă ecua ia sa caracteristică, a0 rk .... + a
E xe m p l u : tn − 5 tn −1 + 6 tn −1
r1, r2 , ... , rk ,
atunci singurele solu ii ale = 0 , t0 = 0 , t1 = 1 .
Ecua ia caracteristică este r2 − 5 r + 6 = 0 .

Re zu l t ă r1 = 3 , tn = c1 3n + c2 2n i din condi iile = 0 , ar

i n i i a l e a ve m tn = 3n − 2n . e ks o lu i i distincte,

recurente sunt de forma

r2 = 2 . Solu ia generală est


e

Teorema 2. Fie r rădăcina de multiplicitate m pentru ecua ia


caracterist ică a unei ecua ii omogene, liniare i recurente cu c
oeficien i constan i:
=
a0 tn + a1 tn + .... + ak tn 0
− 1 − k
− 1
= n2rn , ..... , tn = nm rn sunt toate solu ii ale
ecua ii
Atunci tn = rn , tn = nrn ,

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 .

Solu ia generală este tn = c1 1n + c2 3n + c3 n 3n i din condi ia ini ială, selectăm solu ia

tn = −1 + 3n − n 3n −1 .

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