CSE 421 Algorithms: Divide and Conquer

Similar documents
5.4 Closest Pair of Points

Closest Pair of Points. Kleinberg and Tardos Section 5.4

Closest Pair Problem

CSE373: Data Structures and Algorithms Lecture 3: Math Review; Algorithm Analysis. Linda Shapiro Winter 2015

Dynamic Programming. Lecture Overview Introduction

Algorithms. Margaret M. Fleck. 18 October 2010

Kapitel 1 Multiplication of Long Integers (Faster than Long Multiplication)

28 Closest-Point Problems

Many algorithms, particularly divide and conquer algorithms, have time complexities which are naturally

Introduction to Algorithms March 10, 2004 Massachusetts Institute of Technology Professors Erik Demaine and Shafi Goldwasser Quiz 1.

! Solve problem to optimality. ! Solve problem in poly-time. ! Solve arbitrary instances of the problem. !-approximation algorithm.

! Solve problem to optimality. ! Solve problem in poly-time. ! Solve arbitrary instances of the problem. #-approximation algorithm.

Approximation Algorithms

Faster deterministic integer factorisation

Computational Geometry. Lecture 1: Introduction and Convex Hulls

The Tower of Hanoi. Recursion Solution. Recursive Function. Time Complexity. Recursive Thinking. Why Recursion? n! = n* (n-1)!

Chapter Load Balancing. Approximation Algorithms. Load Balancing. Load Balancing on 2 Machines. Load Balancing: Greedy Scheduling

Lecture 1: Course overview, circuits, and formulas

Near Optimal Solutions

8 Primes and Modular Arithmetic

Data Structures. Algorithm Performance and Big O Analysis

Lecture 3: Finding integer solutions to systems of linear equations

PYTHAGOREAN TRIPLES KEITH CONRAD

Computational Geometry: Line segment intersection

In mathematics, it is often important to get a handle on the error term of an approximation. For instance, people will write

CSC148 Lecture 8. Algorithm Analysis Binary Search Sorting

Euclidean Minimum Spanning Trees Based on Well Separated Pair Decompositions Chaojun Li. Advised by: Dave Mount. May 22, 2014

Quantum Computing Lecture 7. Quantum Factoring. Anuj Dawar

CS473 - Algorithms I

Lecture 13 - Basic Number Theory.

Data Structures and Algorithms Written Examination

Lecture 3. Linear Programming. 3B1B Optimization Michaelmas 2015 A. Zisserman. Extreme solutions. Simplex method. Interior point method

A Note on Maximum Independent Sets in Rectangle Intersection Graphs

Binary Multiplication

ALGEBRA. sequence, term, nth term, consecutive, rule, relationship, generate, predict, continue increase, decrease finite, infinite

Applied Algorithm Design Lecture 5

CSE 326, Data Structures. Sample Final Exam. Problem Max Points Score 1 14 (2x7) 2 18 (3x6) Total 92.

Guessing Game: NP-Complete?

MATH Fundamental Mathematics IV

11 Multivariate Polynomials

Activity 1: Using base ten blocks to model operations on decimals

MBA Jump Start Program

Reminder: Complexity (1) Parallel Complexity Theory. Reminder: Complexity (2) Complexity-new

Why? A central concept in Computer Science. Algorithms are ubiquitous.

Algorithm Design and Analysis Homework #1 Due: 5pm, Friday, October 4, 2013 TA === Homework submission instructions ===

Outline BST Operations Worst case Average case Balancing AVL Red-black B-trees. Binary Search Trees. Lecturer: Georgy Gimel farb

11. APPROXIMATION ALGORITHMS

Math Workshop October 2010 Fractions and Repeating Decimals

Common Core Unit Summary Grades 6 to 8

MATH 60 NOTEBOOK CERTIFICATIONS

ALGEBRAIC APPROACH TO COMPOSITE INTEGER FACTORIZATION

Planar Curve Intersection

Binary Division. Decimal Division. Hardware for Binary Division. Simple 16-bit Divider Circuit

Efficiency of algorithms. Algorithms. Efficiency of algorithms. Binary search and linear search. Best, worst and average case.

Public Key Cryptography: RSA and Lots of Number Theory

csci 210: Data Structures Recursion

Recursive Algorithms. Recursion. Motivating Example Factorial Recall the factorial function. { 1 if n = 1 n! = n (n 1)! if n > 1

5544 = = = Now we have to find a divisor of 693. We can try 3, and 693 = 3 231,and we keep dividing by 3 to get: 1

Analysis of Binary Search algorithm and Selection Sort algorithm

Why Use Binary Trees?

Answer: (a) Since we cannot repeat men on the committee, and the order we select them in does not matter, ( )

Unit 1 Number Sense. In this unit, students will study repeating decimals, percents, fractions, decimals, and proportions.

Session 7 Fractions and Decimals

This Unit: Floating Point Arithmetic. CIS 371 Computer Organization and Design. Readings. Floating Point (FP) Numbers

EE602 Algorithms GEOMETRIC INTERSECTION CHAPTER 27

Definition 8.1 Two inequalities are equivalent if they have the same solution set. Add or Subtract the same value on both sides of the inequality.

Discrete Mathematics, Chapter 4: Number Theory and Cryptography

Core Maths C1. Revision Notes

Part 2: Community Detection

CS473 - Algorithms I

Discrete Mathematics Problems

The Chinese Remainder Theorem

Analysis of Algorithms I: Optimal Binary Search Trees

RSA Question 2. Bob thinks that p and q are primes but p isn t. Then, Bob thinks Φ Bob :=(p-1)(q-1) = φ(n). Is this true?

6. Standard Algorithms

Sorting revisited. Build the binary search tree: O(n^2) Traverse the binary tree: O(n) Total: O(n^2) + O(n) = O(n^2)

Zabin Visram Room CS115 CS126 Searching. Binary Search

a 11 x 1 + a 12 x a 1n x n = b 1 a 21 x 1 + a 22 x a 2n x n = b 2.

CALCULATIONS & STATISTICS

Georgia Standards of Excellence Curriculum Map. Mathematics. GSE 8 th Grade

Converting a Number from Decimal to Binary

Mathematical Induction. Lecture 10-11

Factorization Methods: Very Quick Overview

Lecture 2 Mathcad Basics

WRITING PROOFS. Christopher Heil Georgia Institute of Technology

CS321. Introduction to Numerical Methods

Modélisation et résolutions numérique et symbolique

Randomized algorithms

SECTION 10-2 Mathematical Induction

COMP 250 Fall 2012 lecture 2 binary representations Sept. 11, 2012

2x + y = 3. Since the second equation is precisely the same as the first equation, it is enough to find x and y satisfying the system

3. INNER PRODUCT SPACES

SIMS 255 Foundations of Software Design. Complexity and NP-completeness

Faster polynomial multiplication via multipoint Kronecker substitution

The Euclidean Algorithm

How do you compare numbers? On a number line, larger numbers are to the right and smaller numbers are to the left.

Systems of Linear Equations

The Goldberg Rao Algorithm for the Maximum Flow Problem

Transcription:

CSE 421 Algorithms: Divide and Conquer Summer 2011 Larry Ruzzo Thanks to Paul Beame, James Lee, Kevin Wayne for some slides

hw2 empirical run times e n Plot Time vs n Fit curve to it (e.g., with Excel) Note: Higher degree polynomials fit better Plotting Time/(growth rate) vs n may be more sensitive should be flat, but small n may be unrepresentative of asymptotics 2

biconnected components: time vs #edges 1500 1000 time_ms 500 0 0 50000 100000 150000 200000 250000 e 3

Outline: General Idea algorithm design paradigms: divide and conquer Review of Merge Sort Why does it work? Importance of balance Importance of super-linear growth Some interesting applications Closest points Integer Multiplication Finding & Solving Recurrences 4

Divide & Conquer algorithm design techniques Reduce problem to one or more sub-problems of the same type Typically, each sub-problem is at most a constant fraction of the size of the original problem Subproblems typically disjoint Often gives significant, usually polynomial, speedup Examples: Mergesort, Binary Search, Strassen s Algorithm, Quicksort (roughly) 5

MS(A: array[1..n]) returns array[1..n] { If(n=1) return A; New U:array[1:n/2] = MS(A[1..n/2]); New L:array[1:n/2] = MS(A[n/2+1..n]); Return(Merge(U,L)); } Merge(U,L: array[1..n]) { New C: array[1..2n]; a=1; b=1; For i = 1 to 2n merge sort A U C C[i] = smaller of U[a], L[b] and correspondingly a++ or b++ ; Return C; } L split sort merge 6

why balanced subdivision? Alternative "divide & conquer" algorithm: Sort n-1 Sort last 1 Merge them T(n) = T(n-1)+T(1)+3n for n 2 T(1) = 0 Solution: 3n + 3(n-1) + 3(n-2) = "(n 2 ) 7

Suppose we've already invented DumbSort, taking time n 2 Try Just One Level of divide & conquer: DumbSort(first n/2 elements) DumbSort(last n/2 elements) Merge results Time: 2 (n/2) 2 + n = n 2 /2 + n n 2 Almost twice as fast divide & conquer the key idea D&C in a nutshell 8

d&c approach, cont. Moral 1: two halves are better than a whole Two problems of half size are better than one full-size problem, even given O(n) overhead of recombining, since the base algorithm has super-linear complexity. Moral 2: If a little's good, then more's better Two levels of D&C would be almost 4 times faster, 3 levels almost 8, etc., even though overhead is growing. " Best is usually full recursion down to some small constant size (balancing "work" vs "overhead"). In the limit: you ve just rediscovered mergesort 9

d&c approach, cont. Moral 3: unbalanced division less good: (.1n) 2 + (.9n) 2 + n =.82n 2 + n The 18% savings compounds significantly if you carry recursion to more levels, actually giving O(nlogn), but with a bigger constant. So worth doing if you can t get 50-50 split, but balanced is better if you can. This is intuitively why Quicksort with random splitter is good badly unbalanced splits are rare, and not instantly fatal. (1) 2 + (n-1) 2 + n = n 2-2n + 2 + n Little improvement here. 10

mergesort (review) Mergesort: (recursively) sort 2 half-lists, then merge results. T(n) = 2T(n/2)+cn, n2 T(1) = 0 Solution: "(n log n)" (details later) Log n levels O(n)" work" per" level 11

A Divide & Conquer Example: Closest Pair of Points 12

closest pair of points: non-geometric version Given n points and arbitrary distances between them, find the closest pair. (E.g., think of distance as airfare definitely not Euclidean distance) ( and all the rest of the ( n ) edges ) 2 Must look at all n choose 2 pairwise distances, else " any one you didn t check might be the shortest. Also true for Euclidean distance in 1-2 dimensions? 13

closest pair of points: 1 dimensional version Given n points on the real line, find the closest pair Closest pair is adjacent in ordered list Time O(n log n) to sort, if needed Plus O(n) to scan adjacent pairs Key point: do not need to calc distances between all pairs: exploit geometry + ordering 14

closest pair of points: 2 dimensional version Closest pair. Given n points in the plane, find a pair with smallest Euclidean distance between them. Fundamental geometric primitive. Graphics, computer vision, geographic information systems, molecular modeling, air traffic control. Special case of nearest neighbor, Euclidean MST, Voronoi. Brute force. Check all pairs of points p and q with "(n 2 ) comparisons. 1-D version. O(n log n) easy if points are on a line. fast closest pair inspired fast algorithms for these problems Assumption. No two points have same x coordinate. Just to simplify presentation 15

closest pair of points. 2d, Euclidean distance: 1 st try Divide. Sub-divide region into 4 quadrants. 16

closest pair of points: 1st try Divide. Sub-divide region into 4 quadrants. Obstacle. Impossible to ensure n/4 points in each piece. 17

Algorithm. closest pair of points Divide: draw vertical line L with # n/2 points on each side. L 18

Algorithm. closest pair of points Divide: draw vertical line L with # n/2 points on each side. Conquer: find closest pair on each side, recursively. L 21 12 19

Algorithm. closest pair of points Divide: draw vertical line L with # n/2 points on each side. Conquer: find closest pair on each side, recursively. Combine: find closest pair with one point in each side. Return best of 3 solutions. L seems " like " "(n 2 )? 8 21 12 20

closest pair of points Find closest pair with one point in each side, assuming distance < $. L 21 12 $ = min(12, 21) 21

closest pair of points Find closest pair with one point in each side, assuming distance < $. Observation: suffices to consider points within $ of line L. L 21 12 $ = min(12, 21) 22 $

closest pair of points Find closest pair with one point in each side, assuming distance < $. Observation: suffices to consider points within $ of line L. Almost the one-d problem again: Sort points in 2$-strip by their y coordinate. 7 6 4 L 5 21 12 3 $ = min(12, 21) 1 2 $ 23

closest pair of points Find closest pair with one point in each side, assuming distance < $. Observation: suffices to consider points within $ of line L. Almost the one-d problem again: Sort points in 2$-strip by their y coordinate. Only check pts within 8 in sorted list 7 6 4 L 5 21 12 3 $ = min(12, 21) 1 2 $ 24

Def. Let s i have the i th smallest" y-coordinate among points " in the 2$-width-strip. Claim. If i j > 8, then the " distance between s i and s j " is > $. Pf: No two points lie in the " same #$-by-#$ box: " 2 2 # " 1 2 $ & % + 1 $ # & " 2 % = 1 2 = 2 2 ' 0.7 <1 closest pair of points only 8 boxes within +$ of y(s i ). 25 i 29 26 $ 27 39 31 30 25 $ 28 j #$ #$

closest pair algorithm Closest-Pair(p 1,, p n ) { if(n <=??) return?? Compute separation line L such that half the points are on one side and half on the other side. $ 1 = Closest-Pair(left half) $ 2 = Closest-Pair(right half) $ = min($ 1, $ 2 ) Delete all points further than $ from separation line L Sort remaining points p[1] p[m] by y-coordinate. for i = 1..m k = 1 while i+k <= m && p[i+k].y < p[i].y + $ $ = min($, distance between p[i] and p[i+k]); k++; } return $. 26

closest pair of points: analysis Analysis, I: Let D(n) be the number of pairwise distance calculations in the Closest-Pair Algorithm when run on n 1 points BUT that s only the number of distance calculations D(n) " # 0 n =1& $ % 2D( n /2) + 7n n >1 ' ( What if we counted comparisons? ) D(n) = O(n log n) 28

closest pair of points: analysis Analysis, II: Let C(n) be the number of comparisons between coordinates/distances in the Closest-Pair Algorithm when run on n 1 points C(n) " # $ % 2C n /2 Q. Can we achieve O(n log n)? A. Yes. Don't sort points from scratch each time. Sort by x at top level only. 0 n =1& ' ( ( ) + O(n logn) n >1 ) C(n) = O(n log 2 n) Each recursive call returns $ and list of all points sorted by y Sort by merging two pre-sorted lists. T(n) " 2T( n/2) + O(n) # T(n) = O(n log n) 29

Going From Code to Recurrence 30

going from code to recurrence Carefully define what you re counting, and write it down Let C(n) be the number of comparisons between sort keys used by MergeSort when sorting a list of length n 1 In code, clearly separate base case from recursive case, highlight recursive calls, and operations being counted. Write Recurrence(s) 31

merge sort MS(A: array[1..n]) returns array[1..n] { If(n=1) return A; New L:array[1:n/2] = MS(A[1..n/2]); New R:array[1:n/2] = MS(A[n/2+1..n]); Return(Merge(L,R)); } Merge(A,B: array[1..n]) { New C: array[1..2n]; a=1; b=1; For i = 1 to 2n { C[i] = smaller of A[a], B[b] and a++ or b++ ; Return C; } Base Case Recursive calls One" Recursive Level Operations being counted 32

C(n) = # $ % Base case Recursive calls Total time: proportional to C(n) (loops, copying data, parameter passing, etc.) the recurrence 0 if n =1 2C(n /2) + (n "1) if n >1 One compare per element added to merged list, except the last. 33

going from code to recurrence Carefully define what you re counting, and write it down Let D(n) be the number of pairwise distance calculations" in the Closest-Pair Algorithm when run on n 1 points In code, clearly separate base case from recursive case, highlight recursive calls, and operations being counted. Write Recurrence(s) 34

Basic operations: distance calcs closest pair algorithm Closest-Pair(p 1,, p n ) { if(n <= 1) return % Base Case 0 Compute separation line L such that half the points are on one side and half on the other side. $ 1 = Closest-Pair(left half) $ 2 = Closest-Pair(right half) $ = min($ 1, $ 2 ) Recursive calls (2) 2D(n / 2) } Delete all points further than $ from separation line L Sort remaining points p[1] p[m] by y-coordinate. for i = 1..m k = 1 while i+k <= m && p[i+k].y < p[i].y + $ return $. Basic operations at this recursive level $ = min($, distance between p[i] and p[i+k]); k++; One " recursive " level O(n) 35

closest pair of points: analysis Analysis, I: Let D(n) be the number of pairwise distance calculations in the Closest-Pair Algorithm when run on n 1 points BUT that s only the number of distance calculations D(n) " # 0 n =1& $ % 2D( n /2) + 7n n >1 ' ( What if we counted comparisons? ) D(n) = O(n log n) 36

going from code to recurrence Carefully define what you re counting, and write it down Let D(n) be the number of comparisons between coordinates/distances in the Closest-Pair Algorithm " when run on n 1 points In code, clearly separate base case from recursive case, highlight recursive calls, and operations being counted. Write Recurrence(s) 37

Basic operations: comparisons closest pair algorithm Closest-Pair(p 1,, p n ) { if(n <= 1) return % Base Case Compute separation line L such that half the points are on one side and half on the other side. $ 1 = Closest-Pair(left half) $ 2 = Closest-Pair(right half) $ = min($ 1, $ 2 ) Recursive calls (2) Delete all points further than $ from separation line L Sort remaining points p[1] p[m] by y-coordinate. 0 O(n log n) 2C(n / 2) 1 O(n) O(n log n) } for i = 1..m Basic operations at this recursive level k = 1 while i+k <= m && p[i+k].y < p[i].y + $ $ = min($, distance between p[i] and p[i+k]); k++; return $. O(n) One " recursive " level 38

closest pair of points: analysis Analysis, II: Let C(n) be the number of comparisons of coordinates/distances in the Closest-Pair Algorithm " when run on n 1 points C(n) " # $ % 2C n /2 Q. Can we achieve time O(n log n)? A. Yes. Don't sort points from scratch each time. Sort by x at top level only. 0 n =1& ' ( ( ) + O(n logn) n >1 ) C(n) = O(n log 2 n) Each recursive call returns $ and list of all points sorted by y Sort by merging two pre-sorted lists. T(n) " 2T( n/2) + O(n) # T(n) = O(n log n) 39

Integer Multiplication 40

Add. Given two n-bit " integers a and b, " compute a + b. O(n) bit operations. Add Multiply. Given two n-digit " integers a and b, " compute a $ b." The grade school method: 1 1 integer arithmetic 1 1 1 1 1 0 1 0 1 1 0 1 + 0 1 1 1 0 0 1 1 Multiply 1 1 * 1 0 1 1 1 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 "(n 2 ) bit operations. 0 1 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 41 0 1

Add. Given two n-bit " integers a and b, " compute a + b. O(n) bit operations. Add Multiply. Given two n-bit " integers a and b, " compute a $ b." The grade school method: 1 1 integer arithmetic 1 1 1 1 1 0 1 0 1 1 0 1 + 0 1 1 1 0 0 1 1 Multiply 1 1 * 1 0 1 1 1 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 "(n 2 ) bit operations. 0 1 0 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 42 0 1

divide & conquer multiplication: warmup To multiply two 2-digit integers: Multiply four 1-digit integers. Add, shift some 2-digit integers to obtain result. x = 10" x 1 + x 0 y = 10" y 1 + y 0 xy = 10" x 1 + x 0 ( ) ( 10" y 1 + y 0 ) ( ) + x 0 y 0 = 100 " x 1 y 1 + 10" x 1 y 0 + x 0 y 1 Same idea works for long integers can split them into 4 half-sized ints 4 3 1 0 8 1 5 1 2 1 4 4 5 2 0 0 43 y 1 y 0 x 1 x 0 x 0 &y 0 x 0 &y 1 x 1 &y 0 x 1 &y 1

divide & conquer multiplication: warmup To multiply two n-bit integers: Multiply four #n-bit integers. Add two #n-bit integers, and shift to obtain result. x = 2 n / 2 " x 1 + x 0 y = 2 n / 2 " y 1 + y 0 xy = ( 2 n / 2 " x 1 + x 0 ) 2 n / 2 " y 1 + y 0 = 2 n " x 1 y 1 + 2 n / 2 " x 1 y 0 + x 0 y 1 ( ) T(n) = 4T n /2 # "# $ + "(n) " $ # T(n) = "(n2 ) recursive calls add, shift ( ) ( ) + x 0 y 0 0 0 1 1 0 1 1 0 1 0 1 1 0 0 0 0 1 1 1 0 0 0 1 0 * 1 0 0 1 0 0 1 1 1 0 0 0 0 1 0 0 1 0 1 1 0 1 1 0 0 1 0 0 1 1 0 0 0 0 0 0 1 1 1 1 y 1 y 0 x 1 x 0 x 0 &y 0 x 0 &y 1 x 1 &y 0 x 1 &y 1 assumes n is a power of 2 44

key trick: 2 multiplies for the price of 1: x = 2 n / 2 " x 1 + x 0 y = 2 n / 2 " y 1 + y 0 xy = 2 n / 2 " x 1 + x 0 ( ) ( 2 n / 2 " y 1 + y 0 ) Well, ok, 4 for 3 is more accurate ( ) + x 0 y 0 = 2 n " x 1 y 1 + 2 n / 2 " x 1 y 0 + x 0 y 1 " = x 1 + x 0 # = y 1 + y 0 "# = ( x 1 + x 0 ) ( y 1 + y 0 ) = x 1 y 1 + x 1 y 0 + x 0 y 1 ( x 1 y 0 + x 0 y 1 ) = "# $ x 1 y 1 $ x 0 y 0 ( ) + x 0 y 0 45

To multiply two n-bit integers: Add two #n bit integers. Multiply three #n-bit integers. Karatsuba multiplication Add, subtract, and shift #n-bit integers to obtain result. = 2 n " x 1 y 1 + 2 n /2 "( (x 1 + x 0 )(y 1 + y 0 ) # x 1 y 1 # x 0 y 0 ) + x 0 y 0 A B A C C Theorem. [Karatsuba-Ofman, 1962] Can multiply two n-digit integers in O(n 1.585 ) bit operations. x = 2 n /2 " x 1 + x 0 y = 2 n /2 " y 1 + y 0 ( ) + x 0 y 0 xy = 2 n " x 1 y 1 + 2 n /2 " x 1 y 0 + x 0 y 1 ( # $ ) + T % n /2& ( ) + T( 1+ % n /2& ) T(n) " T n /2 #######" ####### $ recursive calls Sloppy version : T(n) " 3T(n /2) + O(n) ( T(n) = O(n log 2 3 ) = O(n 1.585 ) + '(n) # "# $ add, subtract, shift 46

multiplication the bottom line Naïve: "(n 2 ) Karatsuba: "(n 1.59 ) Amusing exercise: generalize Karatsuba to do 5 size " n/3 subproblems "(n 1.46 ) Best known: "(n log n loglog n) "Fast Fourier Transform" but mostly unused in practice (unless you need really big numbers - a billion digits of ', say) High precision arithmetic IS important for crypto 47

Idea: Two halves are better than a whole d & c summary if the base algorithm has super-linear complexity. If a little's good, then more's better repeat above, recursively Applications: Many. Binary Search, Merge Sort, (Quicksort), Closest points, Integer multiply, 48

Recurrences Above: Where they come " from, how to find them" Next: how to solve them 49

mergesort (review) Mergesort: (recursively) sort 2 half-lists, then merge results. T(n) = 2T(n/2)+cn, n2 T(1) = 0 Solution: "(n log n)" (details later) now Log n levels O(n)" work" per" level 50

Solve: T(1) = c T(n) = 2 T(n/2) + cn Level Num Num Size Size Work 0 0 1 = 2 0 1=2 n 0 n cn 1 cn 2 = 2 1 n/2 2cn/2 2 1 4 = 2=2 2 2 1 n/2 n/4 2 c 4cn/4 n/2 2 4=2 2 n/4 4 c n/4 i 2 i n/2 i 2 i c n/2 i i 2 i n/2 i 2 i c n/2 i k-1 2 k-1 n/2 k-1 2 k-1 c n/2 k-1 n = 2 k ; k = log k k-1 22 k k-1 n/2 = k-1 1 2 k-1 2 k c T(1) n/2 k-1 2 n Total Work: c n (1+log 2 n) (add last col) 51

Solve: T(1) = c T(n) = 4 T(n/2) + cn......... n = 2 k ; k = log 2 n Total Work: T(n) = Level Num Size Work 0 0 1 = 1=4 4 0 0 n n cn cn 1 1 4 = 4=4 4 1 1 n/2 n/2 4 c 4cn/2 2 2 16 16=4 = 4 2 2 n/4 n/4 16 16cn/4 c i i 4 i 4 i n/2 4 i c 4 i n/2 c n/2 i k-1 4 k-1 n/2 k-1 4 k-1 c n/2 k-1 k k 4 k 4 k n/2 = k =1 1 4 k T(1) 4 k T(1) Level Num Size Work k-1 4 k-1 n/2 k-1 4 k-1 c n/2 k-1 k " 4 i cn / 2 i = O(n 2 ) i =0 4 k = (2 2 ) k = 52 (2 k ) 2 = n 2

Solve: T(1) = c T(n) = 3 T(n/2) + cn......... n = 2 k ; k = log 2 n Total Work: T(n) = k i = Level Num Size Work 0 1=3 0 n cn 1 3=3 1 n/2 3 c n/2 2 9=3 2 n/4 9 c n/4 i 3 i n/2 i 3 i c n/2 i k-1 3 k-1 n/2 k-1 3 k-1 c n/2 k-1 k 3 k n/2 k =1 3 k T(1) Level Num Size Work 0 1 = 3 0 n cn 1 3 = 3 1 n/2 3cn/2 2 9 = 3 2 n/4 9cn/4 i 3 i n/2 i 3 i c n/2 i k-1 3 k-1 n/2 k-1 3 k-1 c n/2 k-1 k 3 k n/2 k = 1 3 k T(1) 0 3 i cn / 2 i 53

a useful identity Theorem: 1 + x + x 2 + x 3 + + x k = (x k+1-1)/(x-1) proof: y = 1 + x + x 2 + x 3 + + x k xy = x + x 2 + x 3 + + x k + x k+1 xy-y= x k+1-1 y(x-1)= x k+1-1 y = (x k+1-1)/(x-1) 54

Solve: T(1) = c T(n) = 3 T(n/2) + cn (cont.) T(n) = k 3 i cn / 2 i i=0 = cn k 3 i / 2 i i=0 k i=0 = cn 3 2 ( ) i ( 2 = cn 3 ) k+1 "1 ( ) "1 3 2 55

Solve: T(1) = c T(n) = 3 T(n/2) + cn (cont.) ( 3 ) k+1 1 cn 2 ( ) 1 = 2cn ( 2 3 ) k+1 1 3 2 ( ) < 2cn( 2 3 ) k+1 = 3cn( 2 3 ) k = 3cn 3k 2 k 56

Solve: T(1) = c T(n) = 3 T(n/2) + cn (cont.) 3cn 3k 2 k = 3cn 3log2 n 2 log 2 n = 3cn 3log 2 n n = 3c3 log 2 n = 3c( n log 2 3 ) = O( n 1.59... ) a log b n = ( b log b a ) log b n = ( b log b n ) log b a = n log b a 57

T(n) = at(n/b)+cn k for n > b then divide and conquer master recurrence a > b k ( T(n) = ( n log b a ) [many subprobs ) leaves dominate] a < b k ( T(n) = "(n k ) a = b k ( T(n) = " (n k log n) [few subprobs ) top level dominates] [balanced ) all log n levels contribute] Fine print: " a " 1; b > 1; c, d, k " 0; T(1) = d; n = b t for some t > 0; " a, b, k, t integers. True even if it is *n/b+ instead of n/b. 58

master recurrence: proof sketch Expanding recurrence as in earlier examples, to get" T(n) = n g ( d + c S ) " log b n where%%g = log b (a) and S = x j, where x = b k /a. j=1 If c = 0 the sum S is irrelevant, and T(n) = O(n g ): all the work happens in the base cases, of which there are n g, one for each leaf in the recursion tree. If c > 0, then the sum matters, and splits into 3 cases (like previous slide):%% if x < 1, then S < x/(1-x) = O(1). %[S is just the first log n terms of the infinite series with that sum].%% if x = 1, then S = log b (n) = O(log n). %%[all terms in the sum are 1 and there are that many terms].%% if x > 1, then S = x * (x 1+log b (n) -1)/(x-1). %After some algebra, " n g * S = O(n k ) 59

another d&c example: fast exponentiation Power(a,n) Input: integer n and number a Output: a n Obvious algorithm n-1 multiplications Observation: if n is even, n = 2m, then a n = a m a m 60

divide & conquer algorithm Power(a,n) " if n = 0 then return(1) if n = 1 then return(a) x, Power(a,-n/2.)" x, x x if n is odd then x, a x return(x) 61

Let M(n) be number of multiplies Worst-case " recurrence: By master theorem M(n) = O(log n) & ( M(n) = ' )( More precise analysis: (a=1, b=2, k=0) analysis 0 n 1 M ("# n / 2$% ) + 2 n >1 M(n) = -log 2 n. + (# of 1 s in n s binary representation) - 1 Time is O(M(n)) if numbers < word size, else also depends on length, multiply algorithm 62

a practical application - RSA Instead of a n want a n mod N a i+j mod N = ((a i mod N) (a j mod N)) mod N same algorithm applies with each x y replaced by ((x mod N) (y mod N)) mod N In RSA cryptosystem (widely used for security) need a n mod N where a, n, N each typically have 1024 bits Power: at most 2048 multiplies of 1024 bit numbers relatively easy for modern machines Naive algorithm: 2 1024 multiplies 63

Idea: Two halves are better than a whole if the base algorithm has super-linear complexity. If a little's good, then more's better repeat above, recursively d & c summary Analysis: recursion tree or Master Recurrence Applications: Many. Binary Search, Merge Sort, (Quicksort), Closest points, Integer multiply, exponentiation, 64