Académique Documents
Professionnel Documents
Culture Documents
Metoda Divide Et Impera
Metoda Divide Et Impera
+
=
3
+ *
m
, Vom *0a EPS=4
deoae-e e#te 0$o de #-i# o po-ed0% PREL -ae #% odo'e1e 0'
#0+$i de tip0*
{ }
4
,
+ i i
a a
, Po-ed0a COM< va i'te-*a#a #0+$i0i*e
de>a #otate
{ }
m *
a a ,,,,,
$i
{ }
+ m
a a ,,,,,
4 + 20'i1&'d e10*tat0* #0+$i0*0i
{ }
+ *
a a ,,,,,
,
II, A!"oritm iterativ pe#tr$ metoda Divide et impera
6' -e*e -e 0mea1% vom pe1e'ta 0' a*)oitm 'ee-0#iv pe't0
ta'#p0'eea metodei Divide et impea!, a*)oitm -o'#tit0it de
po-ed0a ?,
6' po-ed0a ?, RE@P e#te o #tiv% .' -ae #e p%#tea1%
e10*tate*e pa/ia*e, ia PAR e#te o #tiv% .' -ae #e p%#tea1% *imite*e
p, B a*e #e-ve'/e*o -e 0mea1% a 2i pe*0-ate, pe-0m $i '0m%0*
'at0a* a -%0i #em'i2i-a/ie -a 2i pe-i1at% mai >o#,
4 procedure ?"n, 0PS(
3 stack RE@P, PAR
C *1) +n) RE@P: PAR"n/1, /, 0(
D do
E while + . * 1 0PS
F call DIV"*, +) m(
G "m/1, +, 0( PAR: + m
H repeat
I call PREL"*, +, (
4J "*, +, r( PAR
44 for i21,r:
43 RE@P: call COM<", , (
4C repeat
4D RE@P
4E if PAR = J then return
4F else
( ) ( ) PAR 4 , B , p PAR: , B , p
4 4 4 4 4 4
+
4G endif
4H repeat
4I end
6'ai'te de a demo'#ta va*a+i*itatea a*)oitm0*0i, vom e5p*i-a
mod0* .' -ae e* *0-ea1% $i a'0me pe't0 n 2 16 $i
+
=
3
+ *
m
,
Se-ve'/e*e de>a pe*0-ate .' #tiva RE@P vo 2i epe1e'tate pi'tKo
pee-Le -o'#t&'d di' i'di-ii pim0*0i $i 0*tim0*0i e*eme't di'
#e-ve'/%, Vom *0a EPS=4, Pe1e't%m .' -o'ti'0ae va*oaea 0*timei
#e-ve'/e pe*0-ate $i -o'/i'0t0i*e #tive*o RE@P $i PAR imediat
d0p% e5e-0/ia i'#t0-/i0'ii de pe *i'ia I,
Metoda Divide et impea! #e poate epe1e'ta #0+ 2oma 0'0i
a+oe +i'a #ti-t .' -ae %d%-i'a e#te eti-Letat% -0 "4, M(,
de#-e'de'/ii #%i -0 "4, N(, "NM4, M(, ia 2ie-ae v&2 -oe#p0'1%to
#e-ve'/ei
{ }
+ *
a a ,,,,,
pi' "*, +(,
RE@P PAR
"4,3(
"C,D,J(, "E,H,J(, "I,4F,J(, "4G,M,J(
"C,D(
"4,3(
"E,H,4(, "I,4F,J(, "4G,M,J(
"E,F(
"4,D(
"G,H,J(, "I,4F,4(, "4G,M,J(
"G,H(
"E,F(, "4,D(
"I,4F,3(, "4G,M,J(
"I,4J(
"4,H(
"44,43,J(, "4C,4F,J(, "4G,M,J(
"44,43(
"I,4J(, "4,H(
"4C,4F,4(, "4G,M,J(
"4C,4D(
"I,43(, "4,H(
"4E,4F,J(, "4G,M,J(
"4E,4F(
"4C,4D(, "I,43(, "4,H(
"4G,M,J(
De#-e'de'/ii 0'0i v&2 eti-Letat -0 "*, +( #0't eti-Leta/i -0 "*,
m( $i "m/1, +( pe't0 0' a'0me m. V&20i*e temi'a*e #0't eti-Letate
-0 "*, +( 0'de * . + 0PS. Pe't0 e5emp*0 -o'#ideat, a+oe*e
ata$at e#te 0m%to0*8
Va*a+i*itatea a*)oitm0*0i e10*t% di' 2apt0* -% imediat d0p%
2ie-ae e5e-0/ie a i'#t0-/i0'ii de pe *i'ia I #e a>0')e .' 0m%toaea
#it0a/ie "da-% #tiva PAR -o'/i'e -e* p0/i' do0% e*eme'te(8
4( #0'tem .'tK0' v&2 2i'a* -ae #0--ede .' po#todi'e
v&20*0i 2i'a* *a -ae #Ka a>0'# d0p% pe-ede'ta e5e-0/ie a
i'#t0-/i0'ii de pe *i'ia I,
3( pee-Li*e "p, B( di' #tiva RE@P ".' odi'e de *a +a1% *a v&2(
di' $i di' #tiva PAR ".' odi'e de *a v&2 *a +a1%( -oe#p0'd 0'ei
pati/ii
{ }
4
,,,,, 4 +
,
{ }
3 3
,,,,, + *
, ,,,,,
{ } 3 *
s
,,,,,
,
{ } ,,,, 4 + 3
a *0i N, -0
4
4
+ =
+ 4 4
+ *
pe't0 N 9 4, ,,,, # 9 4,
C( #tiva RE@P -o'/i'e .' odi'e ".' odi'e de *a v&2 *a +a1%(
2a/ii #t&')i ai v&20i*o a2*ate pe d0m0* -e *ea)% v&20* temi'a*
de %d%-i'%, 6' p*0# pee-Li*e "p, B( di' RE@P -oi'-id -0 #e-ve'/e*e
{ }
+ *
a a ,,,,,
de>a pe*0-ate,
"4, M(
"4G, M(
"4, 4F(
"4, H(
"I, 4F(
"4, D(
"E, H(
"I,43( "4C,4F(
"4, 3( "E, F( "G, H( "I,4J( "44,43( "4C,4D( "4E,4F( "C, D(
D( tip*ete*e "p, B, ( di' #tiva PAR ".' odi'e de *a v&2 *a +a1%(
-o'/i' .' "p,B( 2a/ii dep/i ai v&20i*o a2*ate pe d0m0* -e *ea)%
v&20* temi'a* de %d%-i'%, Oie "p,B( 2ate*e dept a* 0'0i v&2
"p,B( de pe a-e#t d0m: at0'-i #e memoea1% "p, B, ( 0'de e#te
'0m%0* pede-e#oi*o 2%% 2ate dept ai *0i "p,B(,
III. %&emp!e de pro'!eme re(o!vate $ a)$tor$!
metodei Divide et Impera
*. Mi#im$! $#$i vetor.
Se -ite$te 0' ve-to -0 n -ompo'e'te '0mee .'te)i, Se -ee #%
#e tip%ea#-% -e* mai mi- e*eme't a* #%0,
O a#t2e* de po+*em% poate 2i e1o*vat% 0ti*i1&'d 0' a*)oitm
-*a#i- de -a*-0* a* mi'im0*0i 0'0i ve-to, .'#% pe't0 a #-0ta timp0*
de )%#ie a mi'im0*0i e#te e-oma'dat a #e 2o*o#i metode apide -0m
e#te $i metoda P5ivi5e et im*eraP,
program minim;
const eps=3;
type vector=array[1..100] of integer;
var a:vector;
i,j,m,n,p,q,alfa,beta,gama:integer;
procedre citeste;
begin
!rite"#$ati nr. de componente ale vectorli
n=#%;readln"n%;
!riteln"#&ntrodceti componentele vectorli:#%;
for i:=1 to n do
begin
!rite"#a[#,i,#]=#%;readln"a[i]%;
end;
end;
procedre prel"p,q:integer;var alfa:integer%;
begin
if a[p]'a[q] t(en alfa:=a[p] else alfa:=a[q];
end;
procedre $ivide"p,q:integer;var m:integer%;
begin
m:="p)q% div *;
end;
procedre +ombina"beta,gama:integer;var
alfa:integer%;
begin
if beta'gama t(en alfa:=beta else alfa:=gama;
end;
procedre $iv,t&mp"p,q:integer; var alfa:integer%;
begin
if q-p'eps t(en prel"p,q, alfa%
else
begin
$ivide"p,q,m%;
$iv,t&mp"p,m,beta%;$iv,t&mp"m)1,q,gama%;
+ombina"beta,gama,alfa%;
end;
end;
begin
citeste;
p:=1;q:=n;
$iv,t&mp"p,q,alfa%;
!riteln"alfa%;
readln
end.
+. C,$tare 'i#ar,
Se -ite#- n '0mee .'te)i #otate -e#-%to, De a#eme'ea #e
-ite$te 0' '0m% .'te) ', Se -ee #% #e de-id% da-% ', #e )%#e$te .'
$i0* -e*o n '0mee -itite,
C%0taea #e e2e-t0ea1% .'te '0mee*e e/i'0te de -ompo'e'te*e
de i'di-e .'te va*oi*e e/i'0te de do0% vaia+i*e li $i ls "i'i/ia* li = 4
$i ls = '(,
Oii'd date li $i ls po-ed%m a#t2e*8
#e -a*-0*ea1% i'di-e*e -ompo'e'tei di' mi>*o-, .' -a10* .' -ae '
e#te impa, #a0 a 0'eia di' -e*e do0% p*a#ate .' mi>*o-, .' -a10* .'
-ae n e#te pa "4 2 ,li/ls- 5iv 2(:
apa tei po#i+i*it%/i8
va*oaea e/i'0t% de -ompo'e'ta de i'di-e -a*-0*at e#te e)a*% -0
' "-a1 .' -ae -%0taea #e temi'% -0 #0--e#(:
va*oaea e/i'0t% de -ompo'e'ta de i'di-e -a*-0*at e#te mai
mi-% de-&t ' "-a1 .' -ae '0m%0* va 2i -%0tat .'te
-ompo'e'te*e de i'di-e li 2 4/1 $i ls(:
va*oaea e/i'0t% de -ompo'e'ta de i'di-e -a*-0*at e#te mai
mae de-&t ' "-a1 .' -ae '0m%0* va 2i -%0tat .'te
-ompo'e'te*e de i'di-e li $i ls 2 4 -1 (,
C%0taea #e temi'% -&'d '0m%0* a 2o#t ide'ti2i-at #a0 -&'d li 1 ls
"-%0tae -0 #0--e#(,
program catare;
type vector=array[1..100] of integer;
var a:vector;
n,i,li,ls,.,nr:integer;
gasit:boolean;
begin
!rite"#n=#%;readln"n%;
for i:=1 to n do
begin
!rite"#a[#,i,#]=#%;
readln"a[i]%;
end;
!rite"#nr=#%;readln"nr%;
li:=1; ls:=n; gasit:=false;
repeat
.:="li)ls% div *;
if a[.]=nr
t(en
begin
!riteln"#gasit pe po/itia #,.%;
gasit:=tre;
end
else
if a[.]'nr
t(en li:=.)1
else ls:=.-1
ntil "li0ls% or gasit;
if li0ls t(en !riteln"#negasit#%;
readln
end.
-. Sortarea pri# i#ter!asare.
A*)oitm0* de sortare pri# i#terasare -o'#tit0ie 0' e5emp*0
epe1e'tativ pe't0 2o*o#iea metodei P5ivi5e et im*eraP .'
po)amae, A#t2e*, da-% avem de #otat 0' ve-to, at0'-i .* .mp%/im
.' do0%, #ot%m 9 *a 2e* K -e*e do0% p%/i a*e ve-to0*0i, apoi *e
i'te-*a#%m, Da-% $i ve-toii e10*ta/i d0p% .mp%/ie #0't de#t0* de
mai "mai m0*t de-&t 0' #i')0 e*eme't(, at0'-i po-ed%m *a
.mp%/iea $i a a-e#t0i ve-toi $i tot a$a,
A#t2e*, vom #-ie o po-ed0% 1ort&nterclas"2ncept,
sfarsit: &nteger%; -ae va #ota ve-to0* 6 .'te po1i/ia
nceput $i po1i/ia sfarsit. Po-ed0a va detemi'a po1i/ia di'
mijloc $i #e va a0toape*a pe't0 nceput $i mijloc, apoi pe't0
mijloc)1 $i sfrit, d0p% -ae vo i'te-*a#a -e*e do0% p%/i a*e
ve-to0*0i,
program 1ortare3rin&nterclasare;
const ma4=10;
var a: array[1..ma4] of integer;i,n: 1..ma4;
procedre &nterclasea/a"start,mijloc,finis:integer%;
var b: array[1..ma4] of integer; i,j,.:integer;
begin
.:=start ; i:=start;j:=mijloc)1;
!(ile "i'=mijloc% and "j'=finis% do
if a[i]'a[j] t(en begin b[.]:=a[i]; i:=i)1;
.:=.)1 end
else begin b[.]:=a[j]; j:=j)1; .:=.)1 end;
if i'=mijloc t(en for j:=i to mijloc do begin
b[.]:=a[j];
.:=.)1 end
else for i:=j to finis do begin b[.]:=a[i]; .:=.)1
end;
for i:=start to finis do a[i]:=b[i]
end;
procedre 1ort&nterclas"incept,sfarsit: &nteger%;
var centr:&nteger;
begin
if incept ' sfarsit t(en
begin
centr:="incept)sfarsit% div *;
1ort&nterclas"incept,centr%;
1ort&nterclas "centr)1, sfarsit %;
&nterclasea/a "incept,centr,sfarsit%
end
end;
begin
5rite"#n=#%; readln"n%;
for i:=1 to n do begin !rite"#a[#,i,#]=#%;
readln"a[i]% end;
1ort&nterclas"1,n%; for i:=1 to n do
!rite"a[i],#,#%; readln
end.
.. Sortarea rapid, /0$i1 2 sort/
U' a*t e5emp*0 .* -o'#tit0ie a-e#t a*)oitm ava'#at de #otae,
-ae 2o*o#e$te o po-ed0% Po7i8ionea7. A-ea#t% po-ed0% #e o-0p%
de o a'0mit% pate di' ve-to0* de #otat 6, -0pi'#% .'te i'di-ii start
$i "inis, Ea po1i/io'ea1% -ompo'e'ta de pe po1i/ia start pe o a'0mit%
po1i/ie 4, .'te start $i "inis, po1i/ie pe -ae e#pe-tiv0* e*eme't va
%m&'e p&'% *a 2i'a*, a#t2e* .'-&t toate e*eme'te*e de pe po1i/ii .'te
start $i 4K4 #% 2ie mai mi-i #a0 e)a*e -0 694:, ia toate e*eme'te*e de
pe po1i/ii .'te 4M4 $i "inis #% 2ie mai mai #a0 e)a*e -0 694:.
6' po-ed0a de #otae, ;<i(4, d0p% -e #Ka ea*i1at
po1i/io'aea, .' -o'2omitate -0 teL'i-a P5ivi5e et im*eraP, #e va
a0toape*a a-ea#t% po-ed0% pe't0 -e*e do0% p%/i %ma#e 'e#otate,
di'ai'te $i de d0p% e*eme't0* po1i/io'at 694:.
6' po-ed0a Po7i8ionea7 #e -ompa%, .' mod epetat, do0%
e*eme'te, -e*e de pe po1i/ii*e i $i e#e-tiv j di' ve-to, I'i/ia* i e#te
start, ia j e#te "inis, La 2ie-ae pa#, da-% 69i: 1 69j: #e i'te#-Lim+%
69i: -0 69j: $i #e te-e 2ie *a m%iea *0i i -0 o 0'itate, 2ie *a
mi-$oaea *0i j -0 o 0'itate, A#t2e*, p&'% -&'d i devi'e e)a* -0 j,
po1i/ii*e i $i j #e apopie, 0'a de a*ta, odat% -0 eve't0a*e*e
i'te#-Lim+%i 'e-e#itate de e*a/ia e5i#te't% .'te e*eme'te*e de pe
-e*e do0% po1i/ii, Modi2i-%i*e *0i i $i j #e ea*i1ea1% -0 a>0to0*
vaia+i*ei 5, -ae ia pe &'d va*oi*e J $i 4, ia a#0pa *0i i #e e5e-0t% o
i'-eme'tae -0 5, ia a#0pa *0i j o de-eme'tae -0 5,
program 6ic.1ort;
const ma4=10;
type vector=array[1..ma4] of integer; var a: vector;
i,n: integer;
procedre 3o/itionea/a"start,finis:integer; var .
:integer;var a:vector%;
procedre 1c(imba "var 4,y: integer%;
var a4: integer; begin a4:=4; 4:=y; y:=a4 end;
var i,j,d: integer;
begin
d :=0; i:=start; j:= finis;
!(ile i' j do
begin
if a[i]0a[j] t(en begin
1c(imba"a[i],a[j]%; d:=1-d end;
&nc"i,d%; $ec"j,1-d%
end;
.:=i
end;
procedre 6ic."incept,sfarsit: integer; var a :
vector%;
var . : integer ;
begin
if incept 'sfarsit t(en
begin
po/itionea/a "incept, sfarsit,.,a%;
6ic."incept,.-1,a%; 6ic.".)1,sfarsit,a%
end
end;
begin
!riteln"#6ic.-sort#%; !rite"#dati n=#%; readln"n%;
for i:=1 to n do begin !rite "#a[#,i,#]=#%;
readln"a[i]% end;
6ic."1,n,a%;
!riteln"#7ectorl sortat este:#%;
for i:=1 to n do !rite"a[i],#,#%;
readln
end.
3. T$r#$ri!e di# 4a#oi
Se #p0'e -% .' Viet'am0* a'ti-, .' ?a'oi, ea0 tei t0'0i, pe 0'0*
di' e*e 2ii'd p0#e, .' odi'ea de#-e#-%toae a diamete*o *o, mai
m0*te "opt( di#-0i de a0, Di' motive o+ie-tive, 'i$te -%*0)%i, -ae
*e avea0 .')i>%, te+0ia0 #% a$e1e di#-0i*e pe -e* deKa* doi*ea t0', .'
a-eea$i odi'e, Ei p0tea0 #% 2o*o#ea#-%, eve't0a*, t0'0* a* tei*ea,
deoae-e, a*t2e* di#-0i*e '0 a 2i av0t #ta+i*itate, Di#-0i*e p0tea0 2i
m0tate 0'0* -&te 0'0*, De a#eme'ea, #e e'0'/a di' #tat *a ideea de a
a$e1a 0' di#- mai mae pe#te 0'0* mai mi-, deoae-e e5i#ta i#-0* -a
#% #e #ti-e di#-0i*e, di' -a01a di2ee'/ei mai de ma#%,
De$i, apae't #imp*%, d0p% -&teva .'-e-%i, -0 0' pototip .'
2a/%, #e va -o'#tata -% po+*ema '0 e +a'a*%, 6'#% e#te po#i+i*% o
e1o*vae optim% a ei "-0 '0mai 4 3
n
m0t%i, de-i 3EE, pe't0 '=H(,
2o*o#i'd teL'i-a e-0#iv% Pdivide et impeaP,
Po+*ema e#te de a m0ta ' di#-0i de *a t0'0* 4 *a t0'0* 3,
Pe't0 a o e1o*va, #% vedem -0m #e m0t%, .' )e'ea*, m di#-0i de *a
0' t0' * *a 0' t0' +, Se m0t% pime*e mM4 di#-0i de pe r, r 2ii'd
t0'0* a05i*ia, apoi #i')00* di#- %ma# pe * "di#-0* -e* mae( #e
m0t% de pe * pe +, d0p% -ae -e*e mK4 di#-0i #0't m0tate de pe r pe
+, Oie$te, m0taea -e*o mK4 di#-0i e#te -oe-t%, deoae-e e5i#te'/a
di#-0i*o de diamete mai mai, *a +a1e*e -e*o tei t0'0i '0
a2e-tea1% -0 'imi- m0t%i*e di#-0i*o mai mi-i,
6' -a10* *imit% m=4, avem doa o m0tae a di#-0*0i di' v&20*
t0'0*0i * #pe +.
Po)am0* de mai >o# #o*0/io'ea1% "-0 a'ima/ie( po+*ema
de#-i#%, pe't0 n=H, Po-ed0a de +a1% e#te =an, ia -e*e*a*te
po-ed0i #0't pe't0 mi$-aea di#-0*0i -0e't, E5i#t% $i do0%
po-ed0i -0 #t0-t0% i'edit%, E*e #0't #-i#e .' *im+a> de a#am+*ae,
Oo*o#i'd .'te0peea 4J', ea*i1ea1% a#-0'deea, e#pe-tiv ea2i$aea
-0#o0*0i te5t,
program 8rnrile$in9anoi;
ses crt;
const pa/a=10; forma=:*1;;
varf:array[1..3] of byte="13,**,**%;
procedre 9ide+rsor; assembler; <ascnde crsorl
palpaitor, in modl te4t=
asm >?7 @A, B0100; >?7 +A, B*C0D; &E8 B10 end;
procedre 1(o!+rsor; assembler; <reafisea/a
crsorl=
asm >?7 @A, B0100; >?7 +A, B0F0C; &E8 B10 end;
fnction +ol8ija"tija:byte%:byte;<stabileste coloana
nei tije=
begin +ol8ija:=*GHtija-I end;
procedre >ta$reapta"disc, tija1, tija*: byte%;
var i,.:byte;
begin
for i:=+ol8ija"tija1%-disc to 3red"+ol8ija"tija*%-
disc% do
begin
$elay"3a/a%; if Jey3ressed t(en 9alt"1%;
goto4y"i,3%; for .:=0 to disc do 5rite"# #%;
goto4y"i)1,3%; for .:=0 to *Hdisc do
5rite"forma%;
end
end;
procedre >ta1tanga"disc, tija1, tija* :byte%;
var i,.:byte;
begin
for i:=+ol8ija"tija1%-disc do!nto
scc"+ol8ija"tija*%-disc% do
begin
$elay"3a/a%; if Jey3ressed t(en 9alt"1%;
goto4y"i,3%; for .:=0 to disc do 5rite"# #%;
goto4y"i-1,3%; for .:=0 to *Hdisc do
5rite"forma%;
end
end;
procedre +oboara"disc, tija:byte%;
var i,.:byte;
begin
for i:=3 to 3red"7arf[tija]-1% do
begin
$elay"3a/a%; if Jey3ressed t(en 9alt"1%;
goto4y"+ol8ija"tija%-disc,i%;
for .:=0 to disc do 5rite"# #%;
goto4y"+ol8ija"tija%-disc,i)1%;
for .:=0 to *Hdisc do 5rite"forma%;
end;
$ec"7arf[tija]%
end;
procedre Kidica"disc, tija:byte%;
var i,.:byte;
begin
for i:=7arf[tija] do!nto G do
begin
$elay"3a/a%; if Jey3ressed t(en 9alt"1%;
goto4y"+ol8ija"tija%-disc,i%;
for .:=0 to disc do 5rite"# #%;
goto4y"+ol8ija"tija%-disc,i-1%;
for .:=0 to *Hdisc do 5rite"forma%;
end;
&nc"7arf[tija]%
end;
procedre >ta"disc, tija1, tija*:byte%;
begin
Kidica"disc,tija1%;
if "tija1'tija*% t(en
>ta$reapta"disc,tija1,tija*%;
+oboara"disc, tija*%
end;
procedre 9an"n, tija1, tija*, tija3:byte%;
begin
if "n=1% t(en >ta"1,tija1,tija*%
else
begin
9an"n-1, tija1, tija3, tija*%;
>ta"n, tija1,tija*%;
9an"n-1, tija3, tija*,tija1%
end
end;
procedre &nitiali/ari;
var .,disc:byte;
begin
9ide+rsor; +lrscr;
for disc:=1 to ; do
begin
goto4y"+ol8ija"1%-disc,varf[1])disc-1%;
for .:=0 to *Hdisc do
!rite"forma%;
end
end;
begin
&nitiali/ari; goto4y"*I,1%; !riteln"#- 8rnrile din
9anoi -#%;
9an"I,1,*,3%; 1(o!+rsor;
readln
end.