132 Views

Download Presentation
## Chapter 6 Divide and Conquer

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -

**Chapter 6 Divide and Conquer**• Introduction • Binary Search • Mergesort • The Divide and Conquer Paradigm • Quicksort • Multiplication of Large Integers • Matrix Multiplication • The Closest Pair Problem**6.1 Introduction**Main idea: A divide-and-conquer algorithm divides the problem instance into a number of subinstances, recursively solves each subinstance separately, and then combines the solutions to the subinstances to obtain the solution to the original problem instance.**6.1 Introduction**E.g.: The problem of finding both the minimum and maximum in an array of integers A[1..n] and assume for simplicity that n is a power of 2. A straightforward algorithm might look line the one below. 1.X A[1]; y A[1] 2.For I 2 to n 3.If A[i]>y then y A[i] 4.If A[i]<x then x A[i] 5.End for 6.Return (x,y)**6.1 IntroductionAlgorithm 6.1 MINMAX**Input:An array A[1..n] of n integers, where n is a power of 2. Output: (x,y): the minimum and maximum integers in A. 1.minmax(1,n) Procedure minmax(low,high) 1. if high-low=1 then 2. if A[low]<A[high] then return(A[low],A[high]) 3. else return(A[high],A[low]) 4. end if 5. else 6. mid 7. (x1,y1) minmax(low,mid) 8. (x2,y2) minmax(mid+1,high) 9. x min{x1,x2} 10. y max{y1,y2} 11. return (x, y) 12. end if**6.1 IntroductionTheorem 6.1**• Given an array A[1..n] of n elements, where n is a power of 2, it is possible to find both the minimum and maximum of the elements in A using only (3n/2)-2 element comparisons.**6.2 Binary Search**• Binary search algorithm is one of the divide-and-conquer algorithm.**6.2**Algorithm 6.2 BINARYSEARCHREC Input: An array A[1..n] of n elements sorted in nondecreasing order and an element x. Output: j if x=A[j],1<=j<=n, and 0 otherwise. 1.binarysearch(1,n) Procedure binarysearch(low,high) 1. if low>high then return 0 2. else 3. mid 4. if x=A[mid] then return mid 5. else if x<A[mid] then return binarysearch(low,mid-1) 6. else return binarysearch(mid+1,high) 7. end if**6.2**Theorem 6.2 The number of element comparisons performed by Algorithm BINARYSEARCHREC to search for an element in an array of n elements is at most +1. Thus, the time complexity of Algorithm BINARYSEARCHREC is O(log n).**6.3 MergesortAlgorithm 6.3 MERGESORT**Input: An array A[1..n] of n elements. Output: A[1..n] sorted in nondecreasing order. 1.mergesort(A,1,n) Procedure mergesort(low,high) 1. if low<high then 2. mid 3. mergesort(A,low,mid) 4. mergesort(A,mid+1,high) 5. MERGE(A,low,mid,high) 6. end if**6.3**Theorem 6.3 Algorithm MERGESORT sorts an array of n elements in time (n log n) and space (n).**6.4 The Divide-and-conquer Paradigm**• In general, a divide-and-conquer algorithm has the following format. • If the size of the instance I is “small”, then solve the problem using a straightforward method and return the answer. Otherwise, continue to the next step. • Divide the instance I into p subinstances I1,I2,…,Ip of approximately the same size. • Recursively call the algorithm on each subinstance Ij, 1<=j<=p, to obtain p partial solutions. • Combine the results of the p partial solutions to obtain the solution to the original instance I. Return the solution of instance I.**6.5 Selection: Finding the Median and the kth Smallest**Element • Problem: the median of a sequence of n sorted numbers A[1..n] is the “middle” element. If n is odd, then the middle element is the (n+1)/2 th element in the sequence. If n is even, then there are two middle elements occurring at positions n/2 and n/2+1. in this cases, we will choose the n/2th smallest element. Thus, in both cases, the median is the n/2 th smallest element.**6.5**Algorithm 6.4 SELECT Input:An array A[1..n] of n elements and an integer k, 1 k n. Output: The kth smallest element in A. 1. select(A,1,n,k) Procedure select(A,low,high,k) 1. p high-low+1 2. if p<44 then sort A and return (A[k]) 3. Let q= . Divide A into q groups of 5 elements each. If 5 does not divide p, then discard the remaining elements 4. Sort each of the q groups individually and exact its median. Let the set of medians be M. 5. mm select(M,1,q, ). {mm is the median of medians} 6. Partition A[low..high] into three arrays： A1={a|a<mm} A2={a|a=mm} A3={a|a>mm} 7.case |A1| k: return select(A1,1,|A1|,k) |A1|+|A2| k: return mm |A1|+|A2|<k: return select(A3,1,|A3|,k-|A1|-|A2|) 8. end case**6.5**Theorem 6.4 The kth smallest element in a set of n elements drawn from a linearly ordered set can be found in (n) time. In particular, the median of n elements can be found in (n) time.**6.6 QuicksortAlgorithm 6.5 SPLIT**Input: An array of elements A[low..high]. Output: (1) A with its elements rearranged, if necessary, as described above. (2) w,the new position of the splitting element A[low]. 1. i=low 2. x=A[low] 3. for j=low+1 to high 4. if A[j]<=x then 5. i=i+1 6. if i/=j then interchange A[i] and A[j] 7. end if 8. end for 9. interchange A[low] and A[i] 10. w=i 11. Return A and w**6.6 QuicksortAlgorithm 6.6 QUICKSORT**Input: An array A[1..n] of n elements. Output: The elements in A sorted in nondecreasing order. 1.quicksort(A,1,n) Procedure quicksort(A,low,high) 1.if low<high then 2. SPLIT(A[low..high],w) {w is the new position of A[low]} 3. quicksort(A,low,w-1) 4. quicksort(A,w+1,high) 5. end if**6.6**Theorem 6.5 • The running time of Algorithm QUICKSORT is in the worst case. If, however, the median is always chosen as the pivot, then its time Complexity is (n log n).**6.6**Theorem 6.6 • The average number of comparisons performed by Algorithm QUICKSORT to sort an array of n elements is (n log n).**6.7**Multiplication of Large Integers • Let u and v be two n-bit integers. The traditional multiplication algorithm requires (n2) digit multiplications to compute the product of u and v. Using the divide and conquer technique, the bound can be reduced significantly.**6.7**W X Y Z**6.8**Matrix Multiplication • Let A and B to be two n*n matrices. We with to compute their product C=AB. 6.8.1 The traditional algorithm:**6.8**Matrix Multiplication 6.8.2 Recursive version Assume n=2k, k>=0.**6.8**Matrix Multiplication 6.8.3 Strassen’s algorithm Assume n=2k, k>=0.**6.8**Matrix Multiplication 6.8.3 Strassen’s algorithm**6.8**Matrix Multiplication 6.8.3 Strassen’s algorithm**6.9 The Closest Pair Problem**• Let S be a set of n points in the plane. In this section, we consider the problem of finding a pair of points p and q in S whose mutual distance is minimum. In other words, we want to find two points p1=(x1,y1) and p2=(x2,y2) in S with the property that the distance between them defined by Is minimum among all pairs of points in S.**6.9**Algorithm 6.7 CLOSESTPAIR Input: A set S of n points in the plane. Output: The minimum separation realized by two points in S. 1.Sort The points in S in nondecreasing order of their x-coordinates. 2.Y The points in S sorted in nondecreasing order of their y-coordinates. 3. cp(1,n)**6.9**Procedure cp(low,high) • If high-low+1 3 then compute by a straightforward method. 2. else • mid • x(S[mid]) • cp(low,mid) • cp(mid+1,high) • min{ , } • k 0 • for i 1 to n {Extract T from Y} • if |x(Y[i])- | then • k k+1 • T[k] Y[i] • end if • end for {k is the size of T} • 2 {Initialize to any number greater than } • for i 1 to k-1 {compute } • for j i+1 to min{i+7,k} • if d(T[i],T[j])< then d(T[i],T[j]) • end for • end for • min{ , } • End if • Return**6.9**• Observation 6.5 Each point in T needs to be compared with at most seven points in T.**6.9**Theorem 6.7 • Given a set S of n points in the plane, Algorithm CLOSESTPAIR finds a pair of points in S with minimum separation in ⊙ (n log n) time.