2. NoNo iuni introductiveiuni introductive Divide et Impera
(mparte i Stpnete) este o metod de programare care se aplic
problemelor care pot fi descompuse n subprobleme independente,
similare problemei iniiale, de dimensiuni mai mici i care pot fi
rezolvate foarte uor. Metoda presupune: Descompunerea problemei
iniiale n subprobleme independente; Rezolvarea subproblemelor;
Construirea rezultatului prin compunerea soluiilor problemelor de
dimensiuni mici.
3. Metoda DIVIDE ET IMPERA se poate aplica n rezolvarea unei
probleme care ndeplinete urmtoarele condiii : se poate descompune
n( dou sau mai multe) subprobleme; aceste subprobleme sunt
independente una fa de alta (o subproblema nu se rezolv pe baza
alteia i nu se folosete rezultatele celeilalte); aceste subprobleme
sunt similare cu problema iniial; la rndul lor subproblemele se pot
descompune (dac este necesar) n alte subprobleme mai simple; aceste
subprobleme simple se pot soluiona imediat prin algoritmul
simplificat.
4. Cutarea binarCutarea binar Algoritmul de cutare binar este
un algoritm de cutare folosit pentru a gsi un element ntr-o list
ordonat. Algoritmul funcioneaz pe baza tehnicii divide et impera.
Valoarea cutat este comparat cu cea a elementului din mijlocul
listei. Dac e egal cu cea a acelui element, algoritmul se termin.
Dac e mai mare dect acea valoare, algoritmul se reia, de la
mijlocul listei pn la sfrit, iar dac e mai mic, algoritmul se reia
pentru elementele de la nceputul listei pn la mijloc. ntruct la
fiecare pas cardinalul mulimii de elemente n care se efectueaz
cutarea se njumtete, algoritmul are complexitate logaritmic.
5. ProgramulProgramul program cautare_binara; var
a:array[1..100] of integer; n,x:integer; function
cautb(s,d,x:integer):integer; var m:integer; begin if s>d then
cautb:=-1 else begin m:=(s+d)div 2; if a[m]=x then cautb:=m else if
x>a[m] then cautb:=cautb(m+1,d,x) else cautb:=cautb(s,m-1,x);
end; end;
6. Continuare programContinuare program procedure citire; var
f:text; begin assign(f,'cautb.txt');reset(f);n:=0; while not eof(f)
do begin n:=n+1; readln(f,a[n]); end; close(f); end; begin citire;
readln(x); writeln(cautb(1,n,x)); end.
7. AplicaiiAplicaii 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 subir oarecare de cel mult 2 elemente vom avea
urmtoarele etape: mprim irul iniial x [ p . . q ] n dou subiruri x
[ p . . m] i x [ m+1 . . q], unde m este mijlocul irului:
m=[(p+q)/2]. Cele dou subiruri pot fi mprite la rndul lor n alte
dou iruri pn se ajunge la un subir de dimensiune 1. Notm cu x [p .
. q] subirul format din toate elementele irului dintre x[p] i x[q].
Se determin recursiv elementul maxim pentru cele dou subiruri (a i
b). Se combin cele dou maxime obinute pentru aflarea maximului din
irul iniial.
9. Subprogramul maximSubprogramul 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;
10. Programul principalProgramul 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.
11. Aplicaii grilAplicaii gril 1. Ce va afia programul urmtor?
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
12. Aplicaii grilAplicaii gril 2. Ce va afia programul pentru n
= 10 ? var n : integer; function s ( a , b : integer ) : longint ;
var m : byte; begin if a