Vous êtes sur la page 1sur 27

rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 1/61




D|v|de et Impera





rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 2/61

r|nc|p|u|
metode|


MeLod ce poaLe fl apllcaL acelor probleme
care accepL o modallLaLe de descompunere
succeslv in subprobleme de aceea| natur
de dlmenslunl mal mlcl

rocedeul de impr(lre (d|v|de) conLlnu
pn cnd se a[unge la subprobleme a
cror rezolvare esLe lmedlaL (n=1, 2)
Solu(la problemel lnl(lale se ob(lne prln
comblnarea solu(lllor subproblemelor de
dlmenslunl mal mlcl (|mpera)


rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 3/61

Lxemp|u

Determ|narea va|or|| max|me
lle un ;lr de numere inLregl de dlmenslune n. S
se gseasc elemenLul de valoare maxlm dln
acesL ;lr.

Intrare Ie|re
7
3 1 8 2 7 3 3
8










rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 4/61

kezo|vare:
lmpr(lm ;lrul de dlmenslune n in dou sub;lrurl (n/2)
ueLermlnm valoarea maxlm dln prlmul sub;lr (max
1
)
ueLermlnm valoare maxlm dln al dollea sub;lr (max
2
)
valoarea maxlm a ;lrulul lnl(lal va fl max(max
1
, max
2
)
8epeLm impr(lrea ;lrulul pn cnd a[ungem la dlmenslunl
penLru care rezolvarea esLe lmedlaL (n = 1,2)





rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 3/61




rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 6/61






rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 7/61



seudo
cod
procedura Maxlm(a, p, q)
dac p == q atunc|
|ntoarce a[p]
a|tfe|
max1 Maxlm(a, p, (p + q) / 2)
max2 Maxlm(a, (p + q) / 2 + 1, q)
|ntoarce max1 < max2 ? max2 : max1
sf.procedur


Ape|: Maxlm(a, 0, n-1)








rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 8/61

2 etape de rezo|vare:

1) D|v|de: problema lnl(lal esLe descompus inLr-un numr de
k subprobleme de aceea| natur ins de d|mens|un| ma| m|c|.
rocedeul conLlnu de naLur recurslv pn cnd se a[unge la
probleme de dlmenslunl elemenLare care poL fl rezolvaLe
lmedlaL (n = 1, 2,...).

2) Impera: problemele de dlmenslunl elemenLare sunL rezolvaLe
dlrecL lar solu(llle lor sunL comblnaLe penLru a ob(lne solu(llle
subproblemelor de dlmenslunl mal marl.


rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 9/61


seudo
cod
procedura ulvldeLLlmpera(rob|ema , d|mens|une n)
*) problema poaLe fl rezolvaLa dlrecL?
dac n <= c atunc|
solu(le 8ezolvaulrecL(, n)
|ntoarce solu(le
a|tfe|
*) imparLe in k subprobleme
(,n) = (
1
,n
1
) u (
2
,n
2
) u ... u (
k
,n
k
)
*) rezolv subproblemele
pentru l = 1, k execut
solu(le
l
ulvldeLLlmpera(
l
,n
l
)
*) combln solu(llle subproblemelor penLru
*) a ob(lne solu(la problemel
solu(le Combln
(
solu(le
1
,
solu(le
2
,
...
solu(le
k
)
|ntoarce solu(le
sf.procedur
rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 10/61



#1: naLura Lehnlcll de a impr(l problema lnl(lal in
subprobleme permlLe o lmplemenLare recurslv

#2: nu LoaLe problemele poL fl rezolvaLe foloslnd
Lehnlca ulvlde eL lmpera cl numal acelea care
permlL o descompunere in subprob|eme de aceea|
natur

#3: un dezavanLa[ al meLodel esLe foloslrea
mecanlsmulul recurslvlL(ll ce deLermln incrcarea
sLlvel apllca(lel




rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 11/61


Lxemp|u
Cutarea b|nar
lle un ;lr a de n elemenLe ordonaLe crescLor ;l fle
o valoare x. ueLermlna(l dac valoarea x se
regse;Le inLre elemenLele ;lrulul.

Lxemplu:
n = 3
2, 7, 1, 8, 4
x = 1
x = 9
2
-1




rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 12/61


seudo
cod
0
1
2
3
4
3
procedura CuLareSecvenLlal(a, n, x)
pentru l 0, n-1 execut
dac a[l] == x atunc|
|ntoarce l
|ntoarce -1
sf.procedur

ComplexlLaLe spa(lal: ?
ComplexlLaLe Lemporal: ?
Cul ?
Cl ?
CM?


rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 13/61

CuLarea blnar se apllc penLru un ;lr care a fosL in prealabll
sorLaL crescLor:
vom compara lnl(lal elemenLul x cu cu elemenLul aflaL la
ml[locul ;lrulul a.
ln func(le de rezulLaLul compara(lel lum declzla de a
resLrnge domenlul de cauLare in una dln cele dou [umL(l
(lnferloar, superloar).








rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 14/61


seudo
cod
0
1
2
3
4
3
6
7
procedura CuLare8lnar(a, p, q, x)
dac p > q atunc| |ntoarce -1
m (p + q) / 2
dac a[m] == x atunc| |ntoarce m
a|tfe|
dac x < a[m] atunc| |ntoarce CuLare8lnar(a,p,m-1,x)
a|tfe| |ntoarce CuLare8lnar(a,m+1,q,x)
sf. procedur

Ape|: CuLare8lnar(a, 0, n-1, x)








rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 13/61


seudo
cod
0
1
2
3
4
3
6
7
8
9
10
procedura CuLare8lnarlLeraLlv(a, n, x)
p 0
q n - 1
ct t|mp p <= q execut
m (p + q) / 2
dac a[m] == x atunc| |ntoarce m
a|tfe|
dac x < a[m] atunc| q m - 1
a|tfe| p m + 1
|ntoarce -1
sf.procedur







rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 16/61

Cutarea b|nar: comp|ex|tate
numrul maxlm de
dlvlzlunl k a.i.

1 2 =
k
n
?

x x x < 1

k k k
n n n
2 2
1
2

<

k k
n n
2
1 1
2
<

<
k
k
n
n
2
1
2
2

<
) log(
1 ) log(
n k
k n

) log( 1 ) log( n k n <

) log(n k =

Comp|ex|tate:
) (log n


rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 17/61

Determ|nare max|m: comp|ex|tate


seudo
cod
procedura Maxlm(a, p, q)
dac p == q atunc|
|ntoarce a[p]
a|tfe|
max1 Maxlm(a, p, (p + q) / 2)
max2 Maxlm(a, (p + q) / 2 + 1, q)
|ntoarce max1 < max2 ? max2 : max1
sf.procedur








rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 18/61

Determ|nare max|m: comp|ex|tate

rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 19/61


seudo
cod
procedura Maxlm(a, p, q)
dac p == q atunc|
|ntoarce a[p]
a|tfe|
max1 Maxlm(a, p, (p + q) / 2)
max2 Maxlm(a, (p + q) / 2 + 1, q)
|ntoarce max1 < max2 ? max2 : max1
sf.procedur

> + +
=
=
1 ) ( ) ( ) 2 / ( 2
1 ) 1 (
) (
n n I n D n T
n
n T

) 1 ( ) ( = n D
,
) 1 ( ) ( = n I

> +
=
=
1 ) 1 ( ) 2 / ( 2
1 ) 1 (
) (
n n T
n
n T


rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 20/61


) log(
1
2
2
2
1
) 1 ( ) 1 (
) 1 ( ) 2 / ( ) 2 / (
) 1 ( ) 4 / ( 2 ) 2 / (
) 1 ( ) 2 / ( 2 ) (
n
i i i
T
n T n T
n T n T
n T n T

=
+ =
+ =
+ =
+




) 1 ( 2 ) 1 ( 2 ) (
) log(
0
) log(

|
|

\
|
+ =

=
n
i
i n
n T


) ( ) 1 ( ) 1 2 ( ) 1 (
1 2
1 2
) 1 ( ) (
1 ) log(
n n n n n T
n
= + =

+ =
+


Comp|ex|tate determ|nare max|m:
) (n


rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 21/61

Comp|ex|tatea a|gor|tm||or D|v|de et Impera

1ehnlca ulvlde eL lmpera poaLe fl descrls prln apelurl recurslve
la subprobleme de aceea;l naLur de dlmenslunl mal mlcl ceea
ce face ca Llmpul de execu(le s poaL fl descrls deasemenea
prlnLr-o rela(le de recuren(.

> + +

=
c n n I n D b n T a
c n
n T
) ( ) ( ) / (
) 1 (
) (







rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 22/61

1eorema Master


lle
1 a
;l
1 > b
consLanLe, f(n) o func(le ;l 1(n) deflnlL
prln recuren(a:
) ( ) / ( ) ( n f b n T a n T + =

ALuncl 1(n) poaLe fl dellmlLaL aslmpLoLlc asLfel:
1. uac
) ( ) (
log
=
a
b
n O n f
pL.
0 >
aLuncl
) ( ) (
log a
b
n n T =

2. uac
) ( ) (
log +
=
a
b
n n f
pL.
0 >
;l dac
) ( ) / ( n f c b n f a
pL.
1 < c
aLuncl
)) ( ( ) ( n f n T =

3. uac
) ( ) (
log a
b
n n f =
aLuncl
) log ( ) (
log
n n n T
a
b
=






rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 23/61

Lxemp|u

n n T n T + = ) 3 / ( 9 ) (

a=9, b = 3, f(n) = n
2 9 log log
3
n n n
a
b
= =

Cum
) ( ) (
2
= n O n f

) ( ) (
2
n n T =
(cazul 1)


Lxemp|u

1 ) 3 / 2 ( ) ( + = n T n T

a=1, b = 3/2, f(n) = 1
1
1 log log
2 / 3
= = n n
a
b

Cum
) 1 ( ) ( = n f

) (log ) ( n n T =
(cazul 3)

Lxemp|u

n n n T n T log ) 4 / ( 3 ) ( + =

a=3, b = 4, f(n) = nlog(n)
79 . 0 3 log log
4
n n n
a
b
= =

Cum
) ( ) (
79 . 0 +
= n n f

) log ( ) ( n n n T =
(cazul 2)
rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 24/61

Determ|nare max|m: comp|ex|tate

> +
=
=
1 ) 1 ( ) 2 / ( 2
1 ) 1 (
) (
n n T
n
n T










rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 23/61

Determ|nare max|m: comp|ex|tate

> +
=
=
1 ) 1 ( ) 2 / ( 2
1 ) 1 (
) (
n n T
n
n T


a=2, b = 2,
) 1 ( ) ( = n f

n n n
a
b
= =
2 log log
2

) ( ) ( n O n f =

) ( ) ( n n T =
(cazul 1)




rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 26/61

Cutarea b|nar: comp|ex|tate

> +
=
=
1 ) 1 ( ) 2 / (
1 ) 1 (
) (
n n T
n
n T










rolecLarea AlgorlLmllor

hLLp://www.eed.usv.ro/~vaLavu 27/61

Cutarea b|nar: comp|ex|tate

> +
=
=
1 ) 1 ( ) 2 / (
1 ) 1 (
) (
n n T
n
n T


a=1, b = 2,
) 1 ( ) ( = n f

1
1 log log
2
= = n n
a
b

) 1 ( ) ( = n f

) (log ) ( n n T =
(cazul 3)

Vous aimerez peut-être aussi