Mergesort
Teorema Master
Metoda Master
Pentru a sorta cu mergesort folosim paradigma divide-et-impera:
Este prea complicat sa sortam un vector oarecare, dar stiu sa interclasez doi vectori deja-sortati crescator luand mereu minimul dintre cele doua siruri si punandu-l in rezultat.
Pentru a putea interclasa, trebuie sa produc probleme mai simple din problema mea complicata initiala: varianta imediata este prin impartire binara:
Impart problema in doua pana cand bucatile devin triviale: adica 1 element: adica vector sortat!
Interclasez bucatile astfel obtinute, pana cand recompun solutia problemei initiale.
Interclasarea a doi vectori de lungime n:
n citiri vector1
+ n citiri vector2
+ n comparatii v1[i]<v2[j]
+ 2n scrieri in vectorul rezultat
+ (2n incrementari de indecsi)
+ (2n comparatii de indecsi cu n)
= O( n )
Fie T(n) numarul de operatii al lui MergeSort.
La fiecare apel recursiv pe dimensiunea n:
cream doua subprobleme de dimensiune n/2
apoi solutia subproblemelor n/2 produce solutia problemei de dimensiune n prin interclasare in O(n)
Prin urmare:
T(n) = 2 T(n/2) + O(n)
T(n) = O(???)
Raspunsul este: T(n) = O( n log n )
Dorim un mecanism prin care sa aflam mai repede complexitatea functiilor recursive!
Enunt (a nu se utiliza sub aceasta forma):
Teorema master ne ofera o metoda unitara pentru determinarea timpului de rulare pentru toate functiile recursive de forma:
T(n) = aT(n/b) + f(n)
unde:
T(n) -> este o problema rezolvata recursiv prin impartire in subprobleme si combinarea solutiilor
T(n/b) -> este o subproblema
a -> este numarul de subprobleme
b -> controleaza dimensiunea subproblemei
f(n) -> reprezinta tot timpul necesar impartirii in subprobleme sau recombinarii solutiilor subproblemelor.