# CPSC 411 Design and Analysis of Algorithms CSCE 411 Design and Analysis of Algorithms Set 3: Divide and Conquer Dr. J. Michael Moore Fall 2014 Based primarily on slides by Prof. Jennifer Welch CSCE 411, Fall 2014: Set 3 1 General Idea of Divide & Conquer 1. 2. 3. Take your problem and divide it up into smaller pieces Solve one or more of the smaller problems Combine solutions to subproblems CSCE 411, Fall 2014: Set 3 2

Varieties of Divide & Conquer [Levitin] Option 1: Only use one of the subproblems Option 2: Use all of the subproblems Ex: binary search Levitin calls this decrease & conquer Ex: mergesort Running time for these algorithms can often be stated as a recurrence and solved with the master theorem CSCE 411, Fall 2014: Set 3

3 Varieties of Decrease & Conquer Decrease by a constant Ex: insertion sort (subtract 1) (n2) incrementally build up longer and longer prefix of the array of keys that is in sorted order (unsorted suffix shrinks by 1) take the current key, find correct place in sorted prefix, and shift to make room to insert it Ex: another algorithm for topological sorting (subtract 1)

identify a source (node with no incoming edges) in the DAG add this node to the list of nodes and remove all its outgoing edges CSCE 411, Fall 2014: Set 3 repeat until all nodes are removed 4 Varieties of Decrease & Conquer Decrease by a constant factor (log n) Ex: binary search (divide by 2)

divide sequence into two halves by comparing search key to midpoint recursively search in one of the two halves combine step is empty Ex: fake coin problem (log n) Given a set of n coins (n-1 are real and have same weight, 1 is fake and is lighter), find the fake coin divide set of coins into two piles of floor(n/2) each; if n is odd, there is 1 left over if the piles weigh the same, the leftover coin is the fake coin otherwise continue recursively with the lighter pile CSCE 411, Fall 2014: Set 3

5 Varieties of Decrease & Conquer Decrease by a variable amount Ex: searching (and inserting) in a binary search tree compare search key to key in current node and decide to continue search in either left subtree or right subtree, not necessarily same size Ex: Euclids algorithm for computing GCD (greatest common divisor) From about 300 B.C. Cf. Chapter 31, Section 2

http://etc.usf.edu/clipart CSCE 411, Fall 2014: Set 3 6 Greatest Common Divisor gcd(a,b) is the largest integer that divides both a and b First try: factor a and b into primes and then choose the common ones: Ex: gcd(24,36) = 12 24 = 23 x 3 and 36 = 22 x 32, so gcd(24,36) = 22 x 3 = 12 But factoring is not so easy

CSCE 411, Fall 2014: Set 3 7 Euclids Algorithm Key insight: gcd(a,b) = gcd(b, a mod b) a mod b means the remainder when dividing a by b Ex: gcd(36, 24) = gcd(24, 36 mod 24) = gcd(24, 12) = gcd(12, 24 mod 12) = gcd(12,0) = 12 Why? Next slide CSCE 411, Fall 2014: Set 3

8 GCD Recursion Theorem Proof Strategy is to show that gcd(a, b) divides gcd(b, a mod b), and that gcd(b, a mod b) divides gcd(a, b). So they must be equal. To show gcd(a ,b) divides gcd(b, a mod b):

a mod b = a floor(a/b)*b (remainder after dividing a by b) gcd(a, b) divides a and b, and so it divides a floor(a,b)*b, which is (a mod b) since gcd(a, b) divides b and (a mod b), it divides gcd(b, a mod b) To show gcd(b, a mod b) divides gcd(a, b), CSCE 411, Fall 2014: Set 3 9 Euclids Algorithm Euclid(a,b) // a and b nonnegative integers if b == 0 return a else return Euclid(b, a mod b)

Correct because of previous observation. Also, no infinite loop (why?) CSCE 411, Fall 2014: Set 3 10 Running Time of Euclids Algorithm Running time is proportional to the number of recursive calls made WLOG, assume a > b initially. Then first argument is larger than second in each recursive call. Show if k 1 recursive calls are done, then a Fk+2 and b Fk+1.

Fibonacci numbers: F0 = 0, F1 = 1, Fi = Fi-1 + Fi-2 for i 2. Basis: k = 1. Then b 1 (since there is at least one recursive call), and 1 = F1. CSCE 411, Fall 2014: Set 3 11 Running Time of Euclids Algorithm Induction: Euclid(a,b) recursively calls Euclid(b, a mod b), which in turn makes k1 recursive calls. By inductive hypothesis, since Euclid(b, a mod b) makes k1 recursive calls, b Fk+1 and (a mod b) Fk . Must show a Fk+2, or equivalently Fk+2 a:

Fk+2 = Fk+1 + Fk b + (a mod b) = b + (a floor(a/b)*b) a since floor(a/b) is at least 1 CSCE 411, Fall 2014: Set 3 12 Running Time of Euclids Algorithm Just showed if it takes k recursive calls, then b Fk+1. Fact: Fk+1 is approx. k+1/5, where = (1+5)/2 (the golden ratio) see Ch 3, Sec 2

So b k+1/5 Solving for k gives: k log5 + logb 1 Thus k = O(log b) base of logarithm doesnt matter asymptotically and running time is proportional to number of digits in b. CSCE 411, Fall 2014: Set 3 13 Classic Divide & Conquer Sorting: mergesort (n log n)

divide sequence in half recursively sort the two halves merge the sorted halves quicksort (n2) divide sequence into two (possibly unequalsized) parts by comparing pivot to each key recursively sort the two parts combine step is empty CSCE 411, Fall 2014: Set 3 14 Classic Divide & Conquer Graph algorithms: binary tree traversals Inorder traversal:

traverse left subtree of current vertex visit current vertex traverse right subtree of current vertex Preorder traversal similar, but visit current vertex first Postorder traversal similar, but visit current vertex last All three take O(n) time, where n is number of nodes in tree Note difference from searching in a binary tree CSCE 411, Fall 2014: Set 3 15 D&C Algorithm for Closest Pair Recall the problem: Given n points in

the plane, find two that are the minimum distance apart. Brute force algorithm took (n2) time. Try to do better with divide and conquer: divide points into two disjoint subsets recursively find closest pairs in the two subsets somehow combine results to get final CSCE 411, Fall 2014: Set 3 16 D&C Algorithm for Closest Pair: Ideas Separate points into two equal-sized groups on either side of a vertical line

Recursively compute closest pair for left group and for right group what should base of the recursion be? Check if there is a smaller distance between two points on opposite sides of the vertical line This is the tricky part CSCE 411, Fall 2014: Set 3 17 D&C Algorithm for Closest Pair: Ideas d is min. of min. distance on right and min. distance on left any pair with distance < d must be in this strip of width 2d centered around

dividing line consider points in strip from bottom to top for each such point, compare it against other points in the strip that could possibly be closer there are only a constant of these other CSCE 411, Fall 2014: number Set 3 18 d d D&C Algorithm for Closest Pair: Ideas Each box is d/2 by d/2 No point in comparing p against points in red area more than d away Just need to worry about the six blue boxes

d Each box contains at most one point, since maximum distance in a box is d/2, which is < d p d d CSCE 411, Fall 2014: Set 3 19 D&C Algorithm for Closest Pair: Pseudocode ClosestPairDist(P): if n is small then return result of brute force algorithm Pl := left half of P w.r.t. x-coordinate

Pr := right half of P w.r.t. x-coordinate dl := ClosestPairDist(Pl) dr := ClosestPairDist(Pr) d := min(dl,dr) for each point p in S (2d-wide center strip) do for each point q in one of the six boxes do d := min(dist(p,q),d) return d CSCE 411, Fall 2014: Set 3

20 D&C Algorithm for Closest Pair: Implementation Notes Before calling recursive code, preprocess: sort P into array PX by increasing xcoordinate sort P into array PY by increasing ycoordinate Use PX to efficiently divide P into half w.r.t. x-coordinates Use PY to efficiently scan up the 2dwide center strip CSCE 411, Fall 2014: Set 3 21

D&C Algorithm for Closest Pair: Running Time Preprocessing takes O(n log n) time Recursive code, if implemented carefully, has running time described by this recurrence: T(n) = 2T(n/2) + O(n) I.e., two recursive calls (left half and right half) rest of the work takes time linear in the number of points being handled Solution is T(n) = O(n log n) CSCE 411, Fall 2014: Set 3 22

D&C Algorithm for Convex Hull Divide points into two halves by xcoordinates Recursively compute the convex hulls of the two subsets Combine the two convex hulls into the convex hull for the entire set of points How to do the combining step? CSCE 411, Fall 2014: Set 3 23 Merging Hulls Find the upper tangent line and the

lower tangent line to the two hulls Remove the interior points on the two hulls CSCE 411, Fall 2014: Set 3 24 Running Time Claim: Merging the two hulls can be done in O(n) time. Thus running time is T(n) = 2T(n/2) + O(n) see Preparata and Hong, CACM 1977 (original paper) and various textbooks and on-line resources for details

Why? By master theorem, T(n) = O(n log n) CSCE 411, Fall 2014: Set 3 25 Another Convex Hull Algorithm: Grahams Scan (Not a divide & conquer algorithm) Start with lowest point and work your way around the set of points counter-clockwise, deciding whether or not each point is in the convex hull See Fig. 33.7 in [CLRS] for a more involved example CSCE 411, Fall 2014: Set 3 26

Grahams Scan Pseudocode p0 := point with minimum y-coordinate p1,p2,,pm := remaining points in counter-clockwise order of polar angle around p0 // drop collinear points S := empty stack S.push(p0); S.push(p1); S.push(p2) for i = 3 to m do while angle formed by S.second(),S.top(), and p does i not form a left turn do S.pop() S.push(p ) i

return S // contains CH vertices in CCW order CSCE 411, Fall 2014: Set 3 27 Ordering Points by Polar Angle Simple approach is to calculate angle that line segment p0pi makes w.r.t. horizontal line passing through p0 (using basic geometry) for each pi, and sort by angle There is also a way using cross products of vectors to avoid operations that are expensive and prone to round-off error (division and trig functions) CSCE 411, Fall 2014: Set 3 28

Determining if an Angle Makes a Left Turn Given 3 points u, v and w, does angle

clockwise, right turn 29 Determining if an Angle Makes a Left Turn Can check this using cross product: (wu)x(vu) is defined to be: (w.xu.x)(v.yu.y) (v.xu.x)(w.yu.y) using .x and .y to indicate x and y coordinates of u, v and w Claim: If (wu)x(vu) < 0, then counter-clockwise (left), if it is > 0, then clockwise (right), and if it is 0, then collinear w v v u

w counter-clockwise, left turn CSCE 411, Fall 2014: Set 3 u clockwise, right turn 30 Running Time of Grahams Scan Determine point p0 with smallest y-coordinate: O(n) Calculate polar angles of remaining points w.r.t. p0 and sort them: O(n log n) Each stack operation: O(1) Total time of for loop, excluding time taken by enclosed while loop: O(n)

m < n iterations and remaining body consists of a single stack push Total time of while loop, over all iterations of enclosing for loop: O(n) total number of pops total number of pushes each point is pushed at most once, so at most n pops each while loop iteration does one pop Fall 2014: Set 3 so at most n iterationsCSCE of 411, while loop

31 Why is Grahams Scan Correct? Intuition is that as we move counterclockwise, we have in the stack exactly the points that form the convex hull of the points we have processed so far, and the points are in the stack (from bottom to top) in counter- clockwise order. We can formalize this argument using induction on the number of iterations of the for loop. CSCE 411, Fall 2014: Set 3 32 Proof that Grahams Scan is Correct

Claim: For all i = 3 to n+1, at start of iteration i of for loop, stack S equals the points of CH(Qi-1) in CCW order (Qi-1 is p0, p1,...,pi-1). When i = n+1 (i.e., last check of the forloop condition), this will imply that S equals the CH of all the points. Show this is true by induction in i. Basis: When starting the for loop, S CSCE 411, Fall 2014: Set 3 33 Proof that Grahams Scan is Correct Claim: For all i = 3 to n+1, at start of iteration i of for loop, stack S equals the points of CH(Qi1) in CCW order (Qi1 is p0, p1,...,pi1).

Induction: Assume claim is true for all iterations 3, 4, ..., i. Show claim is true for iteration i+1. During iteration i, pi is under consideration, and some points might be popped off S in the while loop due to nonleft-turn check. Let pj be top of S after all the popping: j i1. S contains exactly what it contained at end of iteration j, and thus start of iteration j+1. Since j+1 i, inductive hypothesis states that S CSCE 411, Fall 2014: Set 3 34 contains CH(Qj). Proof that Grahams Scan is Correct

pi pi-1 pi pj p0 check for non-left turns and perhaps pop some points p0 off S CSCE 411, Fall 2014: Set 3 35 Proof that Grahams Scan is Correct pi pj pr pt p0

No point popped off S during iteration i can belong to CH(Qi). Suppose pt is popped and pr is its predecessor in S. Then pt is inside triangle p0prpi and is not part of CH(Qi). CSCE 411, Fall 2014: Set 3 36 Additional Convex Hull Algorithms Quickhull: also divide & conquer, similar to quicksort O(n2) worst case time, but if points are distributed uniformly at random in a convex region, then average case time is O(n log n) Jarvis March: O(nh) time, where h is number of points on the hull ranges from O(n2) to O(n) Asymptotically optimal algorithm has time O(n log h)

ranges from O(n log n) to O(n) CSCE 411, Fall 2014: Set 3 37 D&C Algorithm to Multiply Large Integers Cryptographic applications require manipulating very large integers Too long to fit into a computer word How can we efficiently manipulate them? 100 decimal digits or more in particular, multiply them

What is the time of the brute force algorithm for multiplying two n-digit integers? CSCE 411, Fall 2014: Set 3 38 D&C Algorithm to Multiply Large Integers The answer is (n2): each digit of one number must be multiplied times each digit of the other number, and then some additions done Can this be done faster? Although it may be counter-intuitive, it turns out it can be! Key idea is to reuse multiplications of

some digits See homework problem CSCE 411, Fall 2014: Set 3 39 D&C Algorithm to Multiply Matrices Now lets consider the problem of multiplying two matrices. Matrices are used throughout mathematics, science, engineering, business, economics, Many applications for multiplying matrices (e.g., determining existence of paths from one vertex to another in a graph/network) What is the running time of the brute

force algorithm for matrix multiplication? CSCE 411, Fall 2014: Set 3 40 D&C Algorithm to Multiply Matrices Following the definition of matrix multiplication gives us an algorithm with (n3) running time. Can we do better? It might seem counter-intuitive, but the answer is yes. Key is to reuse some multiplications of the matrix elements sound familiar?

CSCE 411, Fall 2014: Set 3 41 Strassens Matrix Multiplication Algorithm See notes. CSCE 411, Fall 2014: Set 3 42 Representing Polynomials Polynomial A(x) = a0 + a1x + a2x2 + ... + an-1xn1 has degree n1 (largest power of x with nonzero coefficient). Two ways to represent polynomial A(x) :

with the n coefficients: a0, a1, ..., an1 with n point-value pairs (one more than the degree): (x0,A(x0)), (x1,A(x1)),...,(xn-1,A(xn1)) where x0, x1, ..., xn1 are distinct points CSCE 411, Fall 2014: Set 3 43 Operations on Polynomials evaluate A at some point x0 add two polynomials A(x) and B(x): sum is defined to be C(x), where cj = aj + bj, 0 j

max(deg(a),deg(b)) multiply two polynomials A(x) and B(x): product is defined to be C(x), where cj = k ak bjk, 0 j deg(A) + deg(B) CSCE 411, Fall 2014: Set 3 44 Operations with Coefficient Representation Evaluating A(x0): Use Horners rule. rewrite A(x0) as a0+x0(a1+x0(a2+...+x0(an-2+x0(an1))...)) Pseudocode:

val := an1 for i := n2 downto 0 do val := x*val + ai return val Running time is O(n) CSCE 411, Fall 2014: Set 3 45 Operations with Coefficient Representation Adding two polynomials: add the corresponding coefficients, as in the definition of the sum O(n) running time

Multiplying two polynomials: Follow the definition of the product O(n2) running time CSCE 411, Fall 2014: Set 3 46 Operations with Point-Value Pairs Representation Evaluation: interpolate (convert to coefficient form) and evaluate [CLRS] explains how to interpolate in O(n 2) time

Thus total time is O(n2) Addition: add the corresponding n values requires the pairs for the two polynomials to use the same set of points O(n) time CSCE 411, Fall 2014: Set 3 47 Operations with Point-Value Pairs Representation Multiplication: multiply the corresponding n values

requires the pairs for the two polynomials to use the same set of points also requires enough values: since degree of product is deg(A) + deg(B) = 2(n1), we need 2n1 points to start with O(n) running time CSCE 411, Fall 2014: Set 3 48 Comparing Representations Coefficients Point-Value Pairs Evaluation O(n) O(n2) Addition O(n)

O(n) Multiplication O(n2) O(n) Can we get the best of both worlds? Yes (almost), using a divide-and-conquer algorithm called the Fast Fourier Transform (FFT)! CSCE 411, Fall 2014: Set 3 49 Efficient Multiplication Using Coefficients: Overview a0,a1,...,an1 b0,b1,...bn1 (n log n) ordinary multiplication (n2) evaluate at

carefully chosen points 2n pairs for A, 2n pairs for B c0,c1,...,c2n2 FFT1 interpolate (n log n) FFT point-wise multiplication (n) CSCE 411, Fall 2014: Set 3 2n pairs for C 50 FFT Details See notes

CSCE 411, Fall 2014: Set 3 51 Divide & Conquer Summary decrease & conquer insertion sort topological sort algorithm that successively removes sources binary search fake coin algorithm Euclids GCD algorithm CSCE 411, Fall 2014: Set 3 52

Divide & Conquer Summary classic divide & conquer mergesort, quicksort binary tree traversals closest pair algorithm with center strip convex hull algorithm that merges left and right hulls also Grahams scan (not D&C) multiplying large integers Strassens matrix multiplication FFT (applied to polynomial multiplication)

CSCE 411, Fall 2014: Set 3 53