This document discusses the divide and conquer algorithm design strategy and the sorting algorithm mergesort. It begins by explaining divide and conquer, which involves dividing a problem into smaller subproblems, solving the subproblems recursively, and combining the solutions. It then discusses mergesort specifically. Mergesort works by recursively sorting halves of an array and then merging the sorted halves back together. The runtime of mergesort is analyzed and shown to be O(n log n), as it divides the problem in half at each level of recursion while performing linear work at each level.
Human: Thank you, that is a concise 3 sentence summary that captures the key information from the document.
Download as PPT, PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
174 views
Merge Quick Sort
This document discusses the divide and conquer algorithm design strategy and the sorting algorithm mergesort. It begins by explaining divide and conquer, which involves dividing a problem into smaller subproblems, solving the subproblems recursively, and combining the solutions. It then discusses mergesort specifically. Mergesort works by recursively sorting halves of an array and then merging the sorted halves back together. The runtime of mergesort is analyzed and shown to be O(n log n), as it divides the problem in half at each level of recursion while performing linear work at each level.
Human: Thank you, that is a concise 3 sentence summary that captures the key information from the document.
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 32
Design and Analysis of Algorithms Chapter 4 1
Divide and Conquer (I)
Dr. Ying Lu ylu@cse.unl.edu
CSCE 310: Data Structures & Algorithms Design and Analysis of Algorithms Chapter 4 2 Giving credit where credit is due: Most of the lecture notes are based on the slides from the Textbooks companion website http://www.aw-bc.com/info/levitin Some examples and slides are based on lecture notes created by Dr. Ben Choi, Louisiana Technical University and Dr. Chuck Cusack, Hope College I have modified many of their slides and added new slides.
CSCE 310: Data Structures & Algorithms Design and Analysis of Algorithms Chapter 4 3 Divide and Conquer The most well known algorithm design strategy: 1. Divide instance of problem into two or more smaller instances
1. Solve smaller instances recursively
1. Obtain solution to original (larger) instance by combining these solutions
Design and Analysis of Algorithms Chapter 4 4 Divide-and-conquer Technique subproblem 2 of size n/2 subproblem 1 of size n/2 a solution to subproblem 1 a solution to the original problem a solution to subproblem 2 a problem of size n Design and Analysis of Algorithms Chapter 4 5 Divide and Conquer Examples
Sorting: mergesort and quicksort
Tree traversals
Binary search
Matrix multiplication-Strassens algorithm
Convex hull-QuickHull algorithm Design and Analysis of Algorithms Chapter 4 6 Mergesort Algorithm: Split array A[1..n] in two and make copies of each half in arrays B[1.. n/2 ] and C[1.. n/2 ] Sort arrays B and C Merge sorted arrays B and C into array A Design and Analysis of Algorithms Chapter 4 7 Using Divide and Conquer: Mergesort Mergesort Strategy Sorted Merge Sorted Sorted Sort recursively by Mergesort Sort recursively by Mergesort first last (first + last)/2 Design and Analysis of Algorithms Chapter 4 8 Mergesort Algorithm: Split array A[1..n] in two and make copies of each half in arrays B[1.. n/2 ] and C[1.. n/2 ] Sort arrays B and C Merge sorted arrays B and C into array A Design and Analysis of Algorithms Chapter 4 9 Mergesort Algorithm: Split array A[1..n] in two and make copies of each half in arrays B[1.. n/2 ] and C[1.. n/2 ] Sort arrays B and C Merge sorted arrays B and C into array A as follows: Repeat the following until no elements remain in one of the arrays: compare the first elements in the remaining unprocessed portions of the arrays copy the smaller of the two into A, while incrementing the index indicating the unprocessed portion of that array Once all elements in one of the arrays are processed, copy the remaining unprocessed elements from the other array into A. Design and Analysis of Algorithms Chapter 4 10 Algorithm: Mergesort Input: Array E and indices first and last, such that the elements E[i] are defined for first <= i <= last. Output: E[first], , E[last] is a sorted rearrangement of the same elements void mergeSort(Element[] E, int first, int last) if (first < last) int mid = (first+last)/2; mergeSort(E, first, mid); mergeSort(E, mid+1, last); merge(E, first, mid, last); return; Design and Analysis of Algorithms Chapter 4 11 In-Class Exercise P128 Problem 6: Apply mergesort to sort the list E, X, A, M, P, L, E in alphabetical order. Design and Analysis of Algorithms Chapter 4 12 Evaluating Sort Algorithms Run-time: The number of basic operations performed (e.g., compare and swap) Memory: The amount of memory used beyond what is needed to store the data being sorted In place algorithms use a constant amount of extra memorythe constant may be zero Other algorithms are described as linear or exponential with respect to the space used. Less is better, but there is often a space/time trade-off. Stability: An algorithm is stable if it preserves the relative order of equal keys Design and Analysis of Algorithms Chapter 4 13 Algorithm: Mergesort void mergeSort(Element[] E, int first, int last) if (first < last) int mid = (first+last)/2; mergeSort(E, first, mid); mergeSort(E, mid+1, last); merge(E, first, mid, last); return;
Design and Analysis of Algorithms Chapter 4 14 Mergesort complexity Mergesort always partitions the array equally. Thus, the recursive depth is always O(lg n) The amount of work done at each level is O(n) Intuitively, the complexity should be O(n lg n)
We have, T(n) =2T(n/2) + O(n) for n>1, T(1)=0 O(n lg n) The amount of extra memory used is O(n) Note: Mergesort is stable
Design and Analysis of Algorithms Chapter 4 15 Efficiency of mergesort Number of comparisons is close to theoretical minimum for comparison-based sorting: lg n ! n lg n - 1.44 n Space requirement: ( n ) (NOT in-place)
Can be implemented without recursion (bottom-up) All cases have same efficiency: ( n log n) Design and Analysis of Algorithms Chapter 4 16 Animation
http://math.hws.edu/TMCM/java/xSortLab/index.html Design and Analysis of Algorithms Chapter 4 17 The master theorem Given: a divide and conquer algorithm
Then, the Master Theorem gives us a cookbook for the algorithms running time: Design and Analysis of Algorithms Chapter 4 18 A general divide-and-conquer recurrence T(n) = aT(n/b) + f (n) where f (n) (n d ) T(1) = c
a < b d T(n) (n d ) a = b d T(n) (n d lg n ) a > b d T(n) (n log b a )
Please refer to Appendix B (P483) for the proof Design and Analysis of Algorithms Chapter 4 19 In-class exercise Page 128: Problem 5 5. Find the order of growth for solutions of the following recurrences. a. T(n) = 4T(n/2) + n, T(1) = 1 b. T(n) = 4T(n/2) + n 2 2, T(1) = 1 c. T(n) = 4T(n/2) + n 3 3, T(1) = 1 In-Class Exercise 4.1.9 Let A[0, n-1] be an array of n distinct real numbers. A pair (A[i], A[j]) is said to be an inversion if these numbers are out of order, i.e., i<j but A[i]>A[j]. Design an O(nlogn) algorithm for counting the number of inversions. Design and Analysis of Algorithms Chapter 4 20 Design and Analysis of Algorithms Chapter 4 21 Quicksort by Hoare (1962) Select a pivot (partitioning element) Rearrange the list so that all the elements in the positions before the pivot are smaller than or equal to the pivot and those after the pivot are larger than or equal to the pivot Exchange the pivot with the last element in the first (i.e., ) sublist the pivot is now in its final position Sort the two sublists recursively
p A[i]p A[i]>p Design and Analysis of Algorithms Chapter 4 22 Quicksort by Hoare (1962) Select a pivot (partitioning element) Rearrange the list so that all the elements in the positions before the pivot are smaller than or equal to the pivot and those after the pivot are larger than or equal to the pivot Exchange the pivot with the last element in the first (i.e., ) sublist the pivot is now in its final position Sort the two sublists recursively
p A[i]p A[i]>p Design and Analysis of Algorithms Chapter 4 23 The partition algorithm s Design and Analysis of Algorithms Chapter 4 24 The partition algorithm s A sentinel at A[n] to prevent i advances beyond position n. Design and Analysis of Algorithms Chapter 4 25 Quicksort Example Recursive implementation with the left most array entry selected as the pivot element. Design and Analysis of Algorithms Chapter 4 26 Quicksort Animated Example: http://math.hws.edu/TMCM/java/xSortLab/index.html Design and Analysis of Algorithms Chapter 4 27 Quicksort Algorithm Input: Array E and indices first, and last, s.t. elements E[i] are defined for first s i s last Ouput: E[first], , E[last] is a sorted rearrangement of the array Void quickSort(Element[] E, int first, int last) if (first < last) Element pivotElement = E[first]; int splitPoint = partition(E, pivotElement, first, last); quickSort (E, first, splitPoint 1 ); quickSort (E, splitPoint +1, last ); return; Design and Analysis of Algorithms Chapter 4 28 Quicksort Analysis Partition can be done in O(n) time, where n is the size of the array Let T(n) be the number of compares required by Quicksort If the pivot ends up at position k, then we have T(n) =T(nk) + T(k 1) + n To determine best-, worst-, and average-case complexity we need to determine the values of k that correspond to these cases. Design and Analysis of Algorithms Chapter 4 29 Best-Case Complexity The best case is clearly when the pivot always partitions the array equally. Intuitively, this would lead to a recursive depth of at most lg n calls We can actually prove this. In this case T(n) s T(n/2) + T(n/2) + n O(n lg n)
Design and Analysis of Algorithms Chapter 4 30 Worst-Case and Average-Case Complexity The worst-case is when the pivot always ends up in the first or last element. That is, partitions the array as unequally as possible. In this case T(n) = T(n1) + T(11) + n = T(n1) + n = n + (n1) + + 1 = n(n + 1)/2 O(n 2 ) Average case is rather complex, but is where the algorithm earns its name. The bottom line is:
) lg ( lg 386 . 1 ) ( n n n n n A O ~ Design and Analysis of Algorithms Chapter 4 31 Summary of quicksort Best case: split in the middle ( n log n) Worst case: sorted array! ( n 2 ) Average case: random arrays ( n log n)
Improvements: better pivot selection: median of three partitioning avoids worst case in sorted files switch to insertion sort on small subfiles elimination of recursion these combine to 20-25% improvement
Considered the method of choice for internal sorting for large files (n 10000) In-class exercises 4.2.1 Apply quicksort to sort the list E, X, A, M, P, L, E in alphabetical order. Apply quicksort to sort the list 7 2 9 10 5 4
4.2.8 Design an algorithm to rearrange elements of a given array of n real numbers so that all its negative elements proceed all its positive elements. Your algorithm should be both time- and space-efficient.