“Divide et Impera”
Descrierea metodei
Etapele metodei
Aplicaţii
Exemplu numeric
Subprogramul maxim
Programul principal
Aplicaţii grilă
Aplicaţii grilă
Probleme propuse
836.00K
Категория: МатематикаМатематика

Divide et impera. Metodei şi aplicaţii

1. “Divide et Impera”

PREZENTAREA METODEI
ŞI APLICAŢII

2. Descrierea metodei

Metoda Divide Et Impera constă în împărţirea
problemei de rezolvat în două sau mai multe
probleme similare celei iniţiale, dar de dimensiune
mai mică şi apoi combinarea soluţiilor pentru a creea
o soluţie a problemei iniţiale.
Procedeul se reia pentru fiecare din subproblemele
obţinute până când (în urma descompunerilor
repetate) se ajunge la probleme ce admit rezolvare
imediată.
OBS: Deoarece problemele rezultate sunt similare
celei iniţiale, metoda se poate exprima recursiv, dar
admite şi varianta iterativă.

3. Etapele metodei

1.
2.
3.
Divide: Se împarte problema în subprobleme de acelaşi
tip, dar de dimensiune mai mică;
Impera: Se rezolvă fiecare dintre subprobleme – direct
dacă acestea sunt simple – sau continuă cu divide prin
reducerea acestora la alte subprobleme, recursiv;
Impera: Se combină soluţiile subproblemelor, pentru
obţinerea soluţiei problemei iniţiale.
Obs: Procesul de descompunere în subprobleme se
opreşte când acestea permit o rezolvare directă. Această
metodă se aplică în general, pentru prelucrarea
vectorilor dar şi a altor tipuri de date.

4. Aplicaţii

Să se determine cea mai mare valoare dintr-un şir de n
numere întregi, folosind metoda Divide et Impera.
Rezolvare:
Dacă şirul are un singur element, acesta va fi elementul
maxim. Pentru un subşir oarecare de cel mult 2 elemente vom
avea următoarele etape:
Împărţim şirul iniţial x [ p . . q ] în două subşiruri x [ p . . m]
şi x [ m+1 . . q], unde m este mijlocul şirului: m=[(p+q)/2].
Cele două subşiruri pot fi împărţite la rândul lor în alte două
şiruri până se ajunge la un subşir de dimensiune 1. Notăm cu x
[p . . q] subşirul format din toate elementele şirului dintre x[p]
şi x[q].
Se determină recursiv elementul maxim pentru cele două
subşiruri (a şi b).
Se combină cele două maxime obţinute pentru aflarea
maximului din şirul iniţial.

5. Exemplu numeric

5
12
15
7
s1
5
23
9
15
23
9
15
s2
12
s11
5
14
15
7
s12
12
r11= 12
15
14
s21
7
r12 = 15
14
s22
23
r21 = 23
r1 = 15
r11 = 15
r2 = 23
r = 23
9
15

6. Subprogramul maxim

Type vector=array[1..100] of integer;
Var x:vector;
i,n:integer;
function maxim ( p , q : integer ) : integer;
var m, a, b : integer;
begin
if p < q then begin
m := ( p + q ) div 2;
a := maxim ( p , m );
b := maxim ( m + 1 , q ) ;
if a > b then maxim := a
else maxim := b;
end
else maxim := x [ p ];
end;

7. Programul principal

begin
write(‘n=‘); readln(n);
for i:=1 to n do
begin
write(‘x[‘, i ,’]=‘);
readln ( x[i] );
end;
writeln (‘ maximul=‘, maxim ( 1, n ));
readln;
end.

8. Aplicaţii grilă

1. Ce va afişa programul următor?
var v : array [ 1 . . 50 ] of integer ; i : integer;
function s ( a , b : byte ): longint;
begin
if a > b then s := 0
else if a=b then s := v [ a ]
else s := s ( a , ( a + b ) div 2 ) + s ( ( a + b ) div 2 + 1 , b );
end;
begin
for i := 1 to 20 do v [ i ] := i;
writeln ( s ( 5 , 9 ) );
readln;
end.a) 29 b) 35 c) 45 d) 14

9. Aplicaţii grilă

2. Ce va afişa programul pentru n = 10 ?
var n : integer;
function s ( a , b : integer ) : longint ;
var m : byte;
begin
if a <= b then
begin
m := ( a + b ) div 2;
s := m + s ( a , m-1 ) + s ( m+1 , b );
end
else s := 0;
end;
begin readln(n);
writeln ( s ( 1 , n ) );
end. a) 29 b) 35 c) 41 d) 45

10. Probleme propuse

1. Se citeşte n un număr natural. Să se calculeze
produsul primelor n numere naturale
P=1*2*...*n, folosind metoda Divide et Impera.
2. Se dau cele n elemente ale unui vector. Să se
determine cu metoda Divide et Impera suma
elementelor din vector.
3. Se citesc cele n elemente ale unui vector cu valori
întregi. Să se determine maximul dintre
elementele impare din vector, cu metoda
Divide et Impera.
English     Русский Правила