2 MergeSort n informatic, merge sort este un exemplu de algoritm de tip divide et impera ,inventat de John von Neumann n 1945. 3 MergeSort Algorithm -se imparte vectorul in secvente din ce in ce mai mici, astfel incat fiecare secventa sa fie ordonata la un moment dat si interclasata cu o alta secventa din vector corespunzatoare. -practic interclasarea va incepe cand se ajunge la o secventa formata din doua elemente. Aceasta odata ordonata se va interclasa cu o alta corespunzatoare. Cele doua secvente vor alcatui in subsir ordonat din vector mai mare care la randul lui se va interclasa cu subsirul corespunzator samd. 4 Cum MERGE (functioneaza) ? Avem aici doua liste pe care vrem sa le sortam: Prima lista: (12, 16, 17, 20, 21, 27) A doua lista: (9, 10, 11, 12, 19) Comparam 12 si 9 Prima lista: (12, 16, 17, 20, 21, 27) A doua lista : (10, 11, 12, 19) Elementul selectat: (9) Comparam 12 si 10 Prima lista: (12, 16, 17, 20, 21, 27) A doua lista : (11, 12, 19) Elementele slectate: (9, 10) 5 Cum MERGE ? Comparam 12 si 11 Prima lista : (12, 16, 17, 20, 21, 27) A doua lista : (12, 19) Elementele slectate: (9, 10, 11) Comparam 12 si 12 Prima lista : (16, 17, 20, 21, 27) A doua lista : (12, 19) Elementele slectate: (9, 10, 11, 12) 6 Cum MERGE ? Compare 16 and 12 Prima lista : (16, 17, 20, 21, 27) A doua lista : (19) Elementele slectate: (9, 10, 11, 12, 12) Compare 16 and 19 Prima lista : (17, 20, 21, 27) A doua lista : (19) Elementele slectate: (9, 10, 11, 12, 12, 16) 7 Cum MERGE ? Compare 17 and 19 Prima lista : (20, 21, 27) A doua lista : (19) Elementele slectate : (9, 10, 11, 12, 12, 16, 17)
7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 11 Cum a fost plantat acel copac ? De data aceasta va fi un exemplu la o scara mai mare Vectorul initial 72943861 este impartit in 2 segmente 7 2 9 4 3 8 6 1 12 Pentru prima segventa se procedeaza astfel 7 2 9 4 7 2 9 4 3 8 6 1 13 Dupa o noua impartire se obtine 7 2 9 4 7 2
7 2 9 4 3 8 6 1 14 Se incepe interclasarea. Se considera ca avem doi vectori de lungime 1 care se interclaseaza: 7 2 9 4 7 2 7 7 7 2 9 4 3 8 6 1 15 Se incepe interclasarea. Se considera ca avem doi vectori de lungime 1 care se interclaseaza:
7 2 9 4 7 2 7 7 2 2 7 2 9 4 3 8 6 1 16 Rezulta 2 7 7 2 9 4 7 2 2 7 7 7 2 2 7 2 9 4 3 8 6 1 17 La fel si pentru secventa 9 4 7 2 9 4 7 2 2 7 9 4 4 9 7 7 2 2 7 2 9 4 3 8 6 1 9 9 4 4 18 Se considera ca avem iar doi vectori de lungime 1 care se interclaseaza: 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 7 2 9 4 3 8 6 1 19 Se procedeaza la fel si cu secventa 3 8 6 1 7 2 9 4 2 4 7 9 3 8 6 1 1 3 6 8 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 7 2 9 4 3 8 6 1 20 7 2 9 4 2 4 7 9 3 8 6 1 1 3 6 8 7 2 2 7 9 4 4 9 3 8 3 8 6 1 1 6 7 7 2 2 9 9 4 4 3 3 8 8 6 6 1 1 7 2 9 4 3 8 6 1 1 2 3 4 6 7 8 9 Cele doua secvente se interclaseaza din nou obtinand: 21 Complexity of MergeSort Pass Number Number of merges Merge list length # of comps / moves per merge 1 2 k-1 sau n/2 1 sau n/2 k 2 1 2 2 k-2 sau n/4 2 sau n/2 k-1 2 2 3 2 k-3 sau n/8 4 sau n/2 k-2 2 3 . . . . . . . . . . . . k 1 2 1 sau n/2 k-1 2 k-2 sau n/4 2 k-1 k 2 0 sau n/2 k 2 k-1 sau n/2 2 k
k = log n 22 Multiplying the number of merges by the maximum number of comparisons per merge, we get: (2 k-1 )2 1 = 2 k (2 k-2 )2 2 = 2 k
(2 1 )2 k-1 = 2 k (2 0 )2 k = 2 k Complexity of MergeSort k passes each require 2 k comparisons (and moves). But k = lg n and hence, we get lg(n) n comparisons or O(n lgn)