mergesort cse 2320 – algorithms and data structures vassilis athitsos university of texas at...
TRANSCRIPT
![Page 1: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/1.jpg)
1
Mergesort
CSE 2320 – Algorithms and Data StructuresVassilis Athitsos
University of Texas at Arlington
![Page 2: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/2.jpg)
2
Mergesort Overview• Mergesort is a very popular sorting algorithm.• The worst-case time complexity is Θ(Ν log N).
– Remember that quicksort has a worst-case complexity of Θ(Ν2).
• Thus, mergesort is preferable if we want a theoretical guarantee that the time will never exceed O(N log N).
• Also, unlike quicksort, mergesort is stable.• A sorting method is called stable if it does not change the
order of items whose keys are equal.• Disadvantage: mergesort typically requires extra Θ(Ν) space,
to copy the data.• Quicksort on the other hand sorts in place:
– No extra memory, except for a constant amount for local variables.– This can be important, if you are sorting massive amounts of data.
![Page 3: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/3.jpg)
3
Mergesort Implementation• Top-level function:• Allocates memory for a
scratch array.– Note that the size of the
scratch array is the same as the size of the input array A.
• Then, we just call a recursive helper function that does all the work.
void mergesort(Item * A, int length){ Item * aux = malloc(sizeof(Item) * length); msort_help(A, length, aux); free(aux);}
void msort_help(Item * A, int length, Item * aux){ if (length <= 1) return; int M = length/2; Item * C = &(A[M]); int P = length-M;
msort_help(A, M, aux); msort_help(C, P, aux); merge(A, A, M, C, P, aux);}
![Page 4: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/4.jpg)
4
Mergesort Implementation• Recursive helper, basic
approach:• Split A to two halves.• Left half:
– Pointer to A.– Length M = length(A)/2.
• Right half: – Pointer C = &(A[M]).– Length P = length(A) - M.
• Sort each half.– Done via recursive call to
itself.
• Merge the results (we will see how in a bit).
void mergesort(Item * A, int length){ Item * aux = malloc(sizeof(Item) * length); msort_help(A, length, aux); free(aux);}
void msort_help(Item * A, int length, Item * aux){ if (length <= 1) return; int M = length/2; Item * C = &(A[M]); int P = length-M;
msort_help(A, M, aux); msort_help(C, P, aux); merge(A, A, M, C, P, aux);}
![Page 5: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/5.jpg)
5
Merging Two Sorted Sets• Summary:
– Assumption: arrays B and C are already sorted.
– Merges B and C, produces sorted array D:
• Result array pointer D is passed as input.– It must already have
enough memory.
void merge(Item *D, Item *B, int M, Item *C, int P, Item * aux ){ int T = M+P; int i, j, k; for (i = 0; i < M; i++) aux[i] = B[i]; for (j = 0; j < P; j++) aux[j+M] = C[j]; for (i = 0, j = M, k = 0; k < T; k++) { if (i == M) { D[k] = aux[j++]; continue; } if (j == T) { D[k] = aux[i++]; continue; } if (less(aux[i], aux[j])) D[k] = aux[i++]; else D[k] = aux[j++]; }}
![Page 6: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/6.jpg)
6
Merging Two Sorted Sets• Note that here is where
we use the aux array.• Why do we need it?
void merge(Item *D, Item *B, int M, Item *C, int P, Item * aux ){ int T = M+P; int i, j, k; for (i = 0; i < M; i++) aux[i] = B[i]; for (j = 0; j < P; j++) aux[j+M] = C[j]; for (i = 0, j = M, k = 0; k < T; k++) { if (i == M) { D[k] = aux[j++]; continue; } if (j == T) { D[k] = aux[i++]; continue; } if (less(aux[i], aux[j])) D[k] = aux[i++]; else D[k] = aux[j++]; }}
![Page 7: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/7.jpg)
7
Merging Two Sorted Sets• Note that here is where
we use the aux array.• Why do we need it?• Using aux allows for D to
share memory with B and C.
• We first copy the contents of both B and C to aux.
• Then, as we write into D, possibly overwriting B and C, aux still has the data we need.
void merge(Item *D, Item *B, int M, Item *C, int P, Item * aux ){ int T = M+P; int i, j, k; for (i = 0; i < M; i++) aux[i] = B[i]; for (j = 0; j < P; j++) aux[j+M] = C[j]; for (i = 0, j = M, k = 0; k < T; k++) { if (i == M) { D[k] = aux[j++]; continue; } if (j == T) { D[k] = aux[i++]; continue; } if (less(aux[i], aux[j])) D[k] = aux[i++]; else D[k] = aux[j++]; }}
![Page 8: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/8.jpg)
8
Merge Execution
Array D:
position 0 1 2 3 4 5 6 7 8 9
value
Array aux:
position 0 1 2 3 4 5 6 7 8 9
value
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
Initial state
![Page 9: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/9.jpg)
9
Merge Execution
Array D:
position 0 1 2 3 4 5 6 7 8 9
value
Array aux:
position 0 1 2 3 4 5 6 7 8 9
value 10 35 75 80 90
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
Step 1:
Copy B to aux.
![Page 10: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/10.jpg)
10
Merge Execution
Array D:
position k=0 1 2 3 4 5 6 7 8 9
value
Array aux:
position i=0 1 2 3 4 j=5 6 7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
Main loopinitialization
![Page 11: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/11.jpg)
11
Merge Execution
Array D:
position 0 k=1 2 3 4 5 6 7 8 9
value 10
Array aux:
position 0 i=1 2 3 4 j=5 6 7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
![Page 12: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/12.jpg)
12
Merge Execution
Array D:
position 0 1 k=2 3 4 5 6 7 8 9
value 10 17
Array aux:
position 0 i=1 2 3 4 5 j=6 7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
![Page 13: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/13.jpg)
13
Merge Execution
Array D:
position 0 1 2 k=3 4 5 6 7 8 9
value 10 17 30
Array aux:
position 0 i=1 2 3 4 5 6 j=7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
![Page 14: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/14.jpg)
14
Merge Execution
Array D:
position 0 1 2 3 k=4 5 6 7 8 9
value 10 17 30 35
Array aux:
position 0 1 i=2 3 4 5 6 j=7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
![Page 15: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/15.jpg)
15
Merge Execution
Array D:
position 0 1 2 3 4 k=5 6 7 8 9
value 10 17 30 35 40
Array aux:
position 0 1 i=2 3 4 5 6 7 j=8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
![Page 16: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/16.jpg)
16
Merge Execution
Array D:
position 0 1 2 3 4 5 k=6 7 8 9
value 10 17 30 35 40 60
Array aux:
position 0 1 i=2 3 4 5 6 7 8 j=9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
![Page 17: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/17.jpg)
17
Merge Execution
Array D:
position 0 1 2 3 4 5 6 k=7 8 9
value 10 17 30 35 40 60 70
Array aux:
position 0 1 i=2 3 4 5 6 7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
j=10
![Page 18: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/18.jpg)
18
Merge Execution
Array D:
position 0 1 2 3 4 5 6 7 k=8 9
value 10 17 30 35 40 60 70 75
Array aux:
position 0 1 2 i=3 4 5 6 7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
j=10
![Page 19: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/19.jpg)
19
Merge Execution
Array D:
position 0 1 2 3 4 5 6 7 8 k=9
value 10 17 30 35 40 60 70 75 80
Array aux:
position 0 1 2 3 i=4 5 6 7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
j=10
![Page 20: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/20.jpg)
20
Merge Execution
Array D:
position 0 1 2 3 4 5 6 7 8 9
value 10 17 30 35 40 60 70 75 80 90
Array aux:
position 0 1 2 3 4 i=5 6 7 8 9
value 10 35 75 80 90 17 30 40 60 70
Array B:
position 0 1 2 3 4
value 10 35 75 80 90
Array C:
Position 0 1 2 3 4
Value 17 30 40 60 70
j=10
k=10
k=10, so we are done!
![Page 21: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/21.jpg)
21
Mergesort Execution Tracemergesort([35, 30, 17, 10, 60])
![Page 22: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/22.jpg)
22
Mergesort Execution Tracemergesort([35, 30, 17, 10, 60]) mergesort([35, 30])
![Page 23: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/23.jpg)
23
Mergesort Execution Tracemergesort([35, 30, 17, 10, 60]) mergesort([35, 30]) [30,35] mergesort([35]) [35] mergesort([30]) [30] merge([35],[30]) [30,35]
![Page 24: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/24.jpg)
24
Mergesort Execution Tracemergesort([35, 30, 17, 10, 60]) mergesort([35, 30]) [30,35] mergesort([35]) [35] mergesort([30]) [30] merge([35],[30]) [30,35] mergesort([17, 10, 60]) mergesort([17]) [17] mergesort([10, 60])
![Page 25: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/25.jpg)
25
Mergesort Execution Tracemergesort([35, 30, 17, 10, 60]) mergesort([35, 30]) [30,35] mergesort([35]) [35] mergesort([30]) [30] merge([35],[30]) [30,35] mergesort([17, 10, 60]) mergesort([17]) [17] mergesort([10, 60]) [10, 60] mergesort([10]) [10] mergesort([60]) [60] merge([10],[60]) [10,60]
![Page 26: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/26.jpg)
26
Mergesort Execution Tracemergesort([35, 30, 17, 10, 60]) mergesort([35, 30]) [30,35] mergesort([35]) [35] mergesort([30]) [30] merge([35],[30]) [30,35] mergesort([17, 10, 60]) [10,17,60] mergesort([17]) [17] mergesort([10, 60]) [10, 60] mergesort([10]) [10] mergesort([60]) [60] merge([10],[60]) [10,60] merge([17], [10,60]) [10,17,60]
![Page 27: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/27.jpg)
27
Mergesort Execution Tracemergesort([35, 30, 17, 10, 60]) [10, 17, 30, 35, 60] mergesort([35, 30]) [30,35] mergesort([35]) [35] mergesort([30]) [30] merge([35],[30]) [30,35] mergesort([17, 10, 60]) [10,17,60] mergesort([17]) [17] mergesort([10, 60]) mergesort([10]) [10] mergesort([60]) [60] merge([10],[60]) [10,60] merge([17], [10,60]) [10,17,60] merge([30, 35], [10,17,60]) [10, 17, 30, 35, 60]
![Page 28: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/28.jpg)
28
Mergesort Complexity
• Let T(N) be the worst-case running time complexity of mergesort for sorting N items.
• What is the recurrence for T(N)?
![Page 29: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/29.jpg)
29
Mergesort Complexity
• Let T(N) be the worst-case running time complexity of mergesort for sorting N items.
• T(N) = 2T(N/2) + N.• Let N = 2n.• T(N) = 2T(2n-1) + 2n
= 22T(2n-2) + 2*2n
= 23T(2n-3) + 3*2n
= 24T(2n-4) + 4*2n
...
= 2nT(2n-n) + n*2n
= N * constant + N * lg N = Θ(N lg N).
![Page 30: Mergesort CSE 2320 – Algorithms and Data Structures Vassilis Athitsos University of Texas at Arlington 1](https://reader035.vdocuments.mx/reader035/viewer/2022081507/55162743550346c6758b499f/html5/thumbnails/30.jpg)
30
Mergesort Variations
• There are several variations of mergesort that the textbook provides, that may be useful in different cases:
• Mergesort with no need for linear extra space.– More complicated, somewhat slower.
• Bottom-up mergesort, without recursive calls.• Mergesort using lists and not arrays.• You should be aware of them, but it is not really
worth going over them in class, they reuse the basic concepts that we have already talked about.