comp250: more recursion examples. merge sort.jeromew/teaching/250/w2018/... · 2018-01-26 · merge...
TRANSCRIPT
![Page 1: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/1.jpg)
COMP250: More Recursion examples. Merge sort.
Jérôme WaldispühlSchool of Computer Science
McGill UniversityBased on slides from (Snoeyink,2004)
![Page 2: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/2.jpg)
Designing recursive algorithms
• To write a recursive algorithm:– Find how the problem can be broken up in one or more
smaller problems of the same nature– Remember the base case!
• Usually, better running times are obtained when the size of the sub-problems are approximately equal:– power(a,n) = a * power(a,n-1) Þ O(n) operations– power(a,n) = (power(a,n/2))2 Þ O(log n) operations
– Naïve Fibonacci Þ O(!n) operations– Better Fibonacci Þ O(log n) operations
![Page 3: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/3.jpg)
Sorting problemProblem: Given a list of n elements from a totally ordered universe, rearrange them in ascending order.
Classical problem in computer science with many different algorithms (bubble sort, merge sort, quick sort, etc.)
![Page 4: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/4.jpg)
Insertion sort6 3 1 5 2 4
6 3 1 5 2 4
3 6 1 5 2 4
1 3 6 5 2 4
1 3 5 6 2 4
1 2 3 5 6 4
1 2 3 4 5 6
![Page 5: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/5.jpg)
Insertion sort
1 3 5 6 2 4
n elements already sorted
New element to sort
1 2 3 5 6 4
n+1 elements sorted
![Page 6: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/6.jpg)
Insertion sort
For i ← 1 to length(A) - 1j ← iwhile j > 0 and A[j-1] > A[j]
swap A[j] and A[j-1]j ← j - 1
end whileend for
• Iterative method to sort objects.• Relatively slow, we can do better using a recursive approach!
![Page 7: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/7.jpg)
Divide and Conquer
Recursive in structure – Divide the problem into sub-problems that are
similar to the original but smaller in size– Conquer the sub-problems by solving them
recursively. If they are small enough, just solve them in a straightforward manner.
– Combine the solutions to create a solution to the original problem
![Page 8: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/8.jpg)
An Example: Merge SortSorting Problem: Sort a sequence of n elements into
non-decreasing order.
• Divide: Divide the n-element sequence to be sorted into two subsequences of n/2 elements each.
• Conquer: Sort the two subsequences recursively using merge sort.
• Combine: Merge the two sorted subsequences to produce the sorted answer.
![Page 9: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/9.jpg)
Merge Sort - Example
4 3 2 1
4 3 2 1
4 3 2 1
3 4 1 2
1 2 3 4
Divide&
Conquer
Merge
![Page 10: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/10.jpg)
434232269 8 6 1
Merge/combine – Example
… …A
6 8 26 32 1 9 42 43¥ ¥6 8 26 32 1 9 42 43L R
Idea: If we have 2 lists L and R already sorted, we can easily (i.e. quickly) build a sorted list A with all elements of L and R.
![Page 11: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/11.jpg)
Merge sort (principle)
• Unsorted array A with n elements
• Split A in half ® 2 arrays L and R with n/2 elements
• Sort L and R
• Merge the two sorted arrays L and R
Recu
rsiv
e ca
se
Base case: Stop the recursion when the array is of size 1.Why? Because the array is already sorted!
![Page 12: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/12.jpg)
Merge Sort – (bigger) Example
18 26 32 6 43 15 9 1
18 26 32 6 43 15 9 1
18 26 32 6 43 15 9 1
2618 6 32 1543 1 9
18 26 32 6 43 15 9 1
18 26 32 6 43 15 9 1
18 26 326 15 43 1 9
6 18 26 32 1 9 15 43
1 6 9 15 18 26 32 43
18 26
18 26
18 26
32
32
6
6
32 6
18 26 32 6
43
43
15
15
43 15
9
9
1
1
9 1
43 15 9 1
18 26 32 6 43 15 9 1
18 26 6 32
6 26 3218
1543 1 9
1 9 15 43
1 6 9 1518 26 32 43
Original Sequence Sorted Sequence
![Page 13: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/13.jpg)
Merge-Sort (A, p, r)
INPUT: a sequence of n numbers stored in array AOUTPUT: an ordered sequence of n numbers
MergeSort (A, p, r) // sort A[p..r] by divide & conquer1 if p < r2 then q¬ ë(p+r)/2û3 MergeSort (A, p, q)4 MergeSort (A, q+1, r)5 Merge (A, p, q, r) // merges A[p..q] with A[q+1..r]
Initial Call: MergeSort(A, 1, n)
![Page 14: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/14.jpg)
Procedure MergeMerge(A, p, q, r)1 n1 ¬ q – p + 12 n2 ¬ r – q3 for i ¬ 1 to n14 do L[i] ¬ A[p + i – 1]5 for j ¬ 1 to n26 do R[j] ¬ A[q + j]7 L[n1+1] ¬¥8 R[n2+1] ¬¥9 i ¬ 110 j ¬ 111 for k ¬p to r12 do if L[i] £ R[j]13 then A[k] ¬ L[i]14 i ¬ i + 115 else A[k] ¬ R[j]16 j ¬ j + 1
Sentinels, to avoid having tocheck if either subarray isfully copied at each step.
Input: Array containing sorted subarrays A[p..q] and A[q+1..r].
Output: Merged sorted subarray in A[p..r].
![Page 15: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/15.jpg)
Running time of Merge Sort
Running time T(n) of Merge Sort:
• Base case: constant time c
• Divide: computing the middle takes constant time c’
• Conquer: solving 2 subproblems takes 2T(n/2)
• Combine: merging n elements takes k · n (i.e. time proportional
to the number of elements to merge)
• Total:
T(n) = c if n = 1T(n) = 2T(n/2) + k ·n + c’ if n > 1
Example: Let c=1, c’=1 and k=1
n 1 2 4 8 16 32 64 … n
T(n) 1 5 15 39 95 223 511 … ?
![Page 16: COMP250: More Recursion examples. Merge sort.jeromew/teaching/250/W2018/... · 2018-01-26 · Merge sort. JérômeWaldispühl School of Computer Science McGill University Based on](https://reader033.vdocuments.us/reader033/viewer/2022043003/5f80c1e034dd7c7c0873c942/html5/thumbnails/16.jpg)
0
500
1000
1500
2000
2500
3000
3500
4000
4500
0 10 20 30 40 50 60 70
T(n)
linear time
quadratic
Running time of Merge Sort