Documente Academic
Documente Profesional
Documente Cultură
1
Comunicarea noilor cunotine:
S se determine elementul maxim dintr-un ir de n numere ntregi, folosind metoda Divide et
Impera.
Se urmrete modelul general i valorile din ir se memoreaz ntr-un vector
(x[0], x[1],...,x[n-1]).
Se descompune problema n dou probleme de acelai tip, se mparte vectorul n doi vectori
aproximativ egali ca numr de elemente; primul vector va conine elementele aflate pn la poziia
de mijloc inclusiv, iar al doilea vector va fi alctuit din elementele de dup poziia de mijloc.
Se determin elementul maxim al fiecruia dintre cei doi subvectori, apoi maximul ntregului
vector va fi cea mai mare dintre cele dou valori maxime.
Dac primul subvector nu s-a redus la un singur element, el trebuie descompus la rndul lui n
dou jumti; la fel i la al doilea vector. Procedeul continu pn se obin numai subvectori cu un
singur element. Maximul unui subvector cu un singur element este chiar elementul respectiv. Un
vector cu un singur element va fi considerat problem elementar.
Se consider c la un anumit pas se prelucreaz subvectorul: (x[p],...,x[q]), ce conine
elementele cuprinse ntre poziiile p i q. Se pornete de la vectorul dat (x[0], x[1],...,x[n-1]), deci
iniial capetele intervalului sunt p=0 i q=1. Poziia de mijloc care determin vectorii descompunerii
este mij=[(p+q)/2], iar subvectorii vor fi x1= (x[p],...,x[mij]) i x2=(x[mij+1],...,x[q]).
Se face exemplificare pe vectorul x=(-1,2,8,-3,1,9,6), avnd n=7 elemente.
Procesul de descompunere ncepe cu vectorul iniial:
x: p=0 1 2 3 4 5 6=q
-1 2 8 -3 1 9 6
- se calculeaz mij=[(p+q)/2]=[(0+6)/2]=3
- vectorul x1 este cuprins ntre poziiile p i mij, mij devine noul q
p=0 1 2 3=q
-1 2 8 -3
- vectorul x2 este cuprins ntre poziiile mij +1 i q, iar mij+1 devine noul p
p= 4 5 6=q
1 9 6
-1 2 8 -3
Pentru x2, mij=6 i se obin subvectorii:
x21 x22
p=4 5 =q p=6 =q
1 9 6
Urmtoarele descompuneri ale vectorilor conduc la probleme elementare:
x11 x111: -1 i x112: 2
x12 x121: 8 i x122: -3
x21 x211: 1 i x212: 9
x22 este 6, problem elementar.
Determinarea maximului se face combinnd problemele astfel:
- valoarea maxim a lui x11 este maximul dintre x111 i x112, adic 2;
- valoarea maxim a lui x12 este maximul dintre x121 i x122, adic 8;
- valoarea maxim a lui x21 este maximul dintre x211 i x212, adic 9;
- valoarea maxim a lui x22 este 6;
2
n continuare:
- maximul dintre x11 i x12 este 8, adic maximul lui x1 este 8;
- maximul dintre x21 i x22 este 9, adic maximul lui x2 este 9;
- maximul dintre maximul lui x1 i maximul lui x2 este 9.
Se definete o funcie recursiv care returneaz valoarea maxim a subvectorului
(x[p],...x[q]) :
- dac subvectorul conine un singur element, adic p=q, atunci acel element va fi maximul
i va fi returnat de ctre funcie;
- n caz contrar:
se determin poziia de mijloc;
se determin valoarea maxim a subvectorului (x[p],,x[mij]), max1;
se determin valoarea maxim a subvectorului (x[mij+1],,x[q]), max2;
se recombin cele dou probleme, maximul din tot vectorul, max, va fi
cea mai mare dintre cele dou valori maxime:max1 i max2.
int div_imp(int p, intq)
{int mij, max1, max2;
if(p==q)
return x[p];
else
{mij=(p+q)/2;
max1=div_imp(p,mij);
max2=div_imp(mij+1,q);
if(max1>max2)
return max1;
else
return max2;
}
}
Fia de lucru
S se editeze n limbajul C++ algoritmul studiat (inclusiv declaratiile necesare rezolvarii
acestuia)
S se completeze tabelul de variaie urmtor pentru un vector ales,cu maxim 8 elemente, apoi
s se verifice cu rezultatele obinute prin rularea programului pentru aceleai valori.
S se ruleze programul i n varianta pas cu pas (step over).
3
Fia de lucru
S se editeze n limbajul C++ algoritmul studiat (inclusiv declaratiile necesare rezolvarii
acestuia)
S se completeze tabelul de variaie urmtor pentru un vector ales,cu maxim 8 elemente, apoi
s se verifice cu rezultatele obinute prin rularea programului pentru aceleai valori.
S se ruleze programul i n varianta pas cu pas (step over).
Fia de lucru
S se editeze n limbajul C++ algoritmul studiat (inclusiv declaratiile necesare rezolvarii
acestuia)
S se completeze tabelul de variaie urmtor pentru un vector ales,cu maxim 8 elemente, apoi
s se verifice cu rezultatele obinute prin rularea programului pentru aceleai valori.
S se ruleze programul i n varianta pas cu pas (step over).