Académique Documents
Professionnel Documents
Culture Documents
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)