Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved...

55
1 algorithm design techniques Divide & Conquer 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 Combine solutions Examples: Mergesort, Binary Search, Strassen’s Algorithm, Quicksort (roughly)

Transcript of Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved...

Page 1: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

1

algorithm design techniques

Divide & ConquerReduce problem to one or more sub-problems of the same typeTypically, each sub-problem is at most a constant fraction of the size of the original problem

Subproblems typically disjointCombine solutionsExamples:

Mergesort, Binary Search, Strassen’s Algorithm, Quicksort (roughly)

Page 2: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

merge sort

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

C[i] = “smaller of U[a], L[b] and correspondingly a++ or b++”;Return C;}

2

A U C

L

split sort merge

Page 3: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

why balanced subdivision?

Alternative "divide & conquer" algorithm:Sort n-1Sort last 1

Merge them

T(n) = T(n-1)+T(1)+n for n > 2

T(1) = 0Solution: n + (n-1) + (n-2) … = Θ(n2)

3

Page 4: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Suppose we've already invented Bubble-Sort, taking time n2

Try Just One Level of divide & conquer:

Bubble-Sort(first n/2 elements)

Bubble-Sort(last n/2 elements)

Merge results

Time: 2 (n/2)2 + n = n2/2 + n ≪ n2

Almost twice as fast!

4

divide & conquer – the key idea

D&C in a nutshell

Page 5: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

5

d&c approach, cont.

“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.

“the more dividing and conquering, the 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!

Page 6: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

d&c approach, cont.

unbalanced division less good, but still goodBubble-sort improved with 0.1/0.9 split:(.1n)2 + (.9n)2 + n = .82n2 + 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.

6

Page 7: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

A Divide & Conquer Example:Closest Pair of Points

8

Page 8: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

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!)

Must look at all n choose 2 pairwise distances, else any one you didn’t check might be the shortest.

(… and all the rest of the (n) edges…)2

9

Page 9: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points: 1 dimensional version

Given n points on the real line, find the closest pair

Closest pair is adjacent in ordered listTime O(n log n) to sort, if needed

Plus O(n) to scan adjacent pairsKey point: do not need to calc distances between all

pairs: exploit geometry + ordering

10

Page 10: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points: 2 dimensional versionClosest 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 Θ(n2) time.

1-D version. O(n log n) easy if points are on a line.

Assumption. No two points have same x coordinate.

Just to simplify presentation

fast closest pair inspired fast algorithms for these problems

11

Page 11: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Algorithm.Divide: draw vertical line L with ≈ n/2 points on each side.

12

L

Page 12: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Algorithm.Divide: draw vertical line L with ≈ n/2 points on each side.

Conquer: find closest pair on each side, recursively.

13

12

21

L

Page 13: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Algorithm.Divide: draw vertical line L with ≈ n/2 points on each side.

Conquer: find closest pair on each side, recursively.Combine to find closest pair overall

Return best solutions.

14

12

218

L

seems like

Θ(n2) ?

Page 14: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Find closest pair with one point in each side, assuming distance < δ.

15

12

21

δ= min(12, 21)

L

Page 15: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Find closest pair with one point in each side, assuming distance < δ.

Observation: suffices to consider points within δ of line L.

16

12

21

δ

L

δ = min(12, 21)

Page 16: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

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.

17

12

21

1

2

3

45

6

7

δ

L

δ = min(12, 21)

Page 17: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Find closest pair with one point in each side, assuming distance < δ.

Observation: suffices to consider points within d of line L.Almost the one-D problem again: Sort points in 2d-strip by their y coordinate. Only check pts within 8 in sorted list!

18

12

21

1

2

3

45

6

7

δ

L

δ = min(12, 21)

Page 18: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Claim: No two points lie in the same ½δ-by-½δ box.

19

2930

31

28

26

25

δ

½δ

½δ

39

i

j

27

δ

Page 19: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Claim: No two points lie in the same ½δ-by-½δ box.

Pf: Such points would be within

20

2930

31

28

26

25

½δ

½δ

39

i

j

27

δ12!

"#$

%&2

+12!

"#$

%&2

= δ12= δ

22≈ 0.7δ < δ

δ δ

Page 20: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Claim: No two points lie in the same ½δ-by-½δ box.

Pf: Such points would be within

Def. Let si have the ith smallesty-coordinate among points in the 2δ-width-strip.

Claim: If |i – j| > 11, then the distance between si and sj is > δ.

21

2930

31

28

26

25

½δ

½δ

39

i

j

27

δ12!

"#$

%&2

+12!

"#$

%&2

= δ12= δ

22≈ 0.7δ < δ

δ δ

Page 21: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points

Claim: No two points lie in the same ½δ-by-½δ box.

Pf: Such points would be within

Def. Let si have the ith smallesty-coordinate among points in the 2δ-width-strip.

Claim: If |i – j| > 11, then the distance between si and sj is > δ.

Pf: only 11 boxes within +δ of y(si). 22

2930

31

28

26

25

½δ

½δ

39

i

j

27

δ12!

"#$

%&2

+12!

"#$

%&2

= δ12= δ

22≈ 0.7δ < δ

δ δ

Page 22: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair algorithm

23

Closest-Pair(p1, …, pn) {if(n <= ??) return ??

Compute separation line L such that half the pointsare 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..mfor k = 1…11if i+k <= m

δ = min(δ, distance(p[i], p[i+k]));

return δ.}

Page 23: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

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>1points

BUT – that’s only the number of distance calculations

What if we counted running time?

24

D(n) ≤0 n =1

2D n / 2( ) + 11n n >1

"#$

%$

&'$

($⇒ D(n) = O(n logn)

Page 24: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

closest pair of points: analysis

Analysis, II: Let T(n) be the running time in the Closest-Pair Algorithm when run on n > 1 points

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.Each recursive call returns δ and list of all points sorted by ySort by merging two pre-sorted lists.

25

T(n) ≤ 2T n /2( ) + O(n) ⇒ T(n) = O(n logn)

T (n) ≤0 n =1

T n / 2( ) + O(n logn) n >1

"#$

%$

&'$

($⇒ T (n) = O(n log2 n)

Page 25: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

plan

Recurrences

Applications: multiplying numbersmultiplying matricescomputing medians

36

Page 26: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

d & c summary

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

Applications: Many. Binary Search, Merge Sort, (Quicksort), Closest points, Integer multiply,…

37

Page 27: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Recurrences

Above: Where they come from, how to find them

Next: how to solve them

38

Page 28: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

divide and conquer – master recurrence

T(n) = aT(n/b)+cnd then

a > bd ⇒ T(n) = [many subprobs → leaves dominate]

a < bd ⇒ T(n) = Θ(nd) [few subprobs → top level dominates]

a = bd ⇒ T(n) = Θ (nd log n) [balanced → all log n levels contribute]

Fine print: a ≥ 1; b > 1; c, d ≥ 0; T(1) = c; a, b, k, t integers.

39

)( log abnΘ

Page 29: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Solve: T(n) = a T(n/b) + cnd

40

Level Num Size Work0 1=20 ncn1 2=21 n/2 2 c n/22 4=22 n/4 4 c n/4… … … …i 2i n/2i 2i c n/2i

… … … …k-1 2k-1 n/2k-1 2k-1 c n/2k-1

(add last col)

Level Num Size Work

0 1 = a0 n cnd

1 a1 n/b ac(n/b)d

2 a2 n/b2 a2c(n/b2)d

… … … …

i ai n/bi ai c (n/bi)d

… … … …

k-1 ak-1 n/bk-1 ak-1c(n/bk-1)d

k ak n/bk = 1 ak T(1)n = bk ; k = logbn

Total Work: = aic(n / bi )di=0

logb n∑

Page 30: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

a useful identity

Theorem:1 + x + x2 + x3 + … + xk = (xk+1-1)/(x-1)

proof:S = 1 + x + x2 + x3 + … + xk

xS = x + x2 + x3 + … + xk + xk+1

xS-S = xk+1 – 1S(x-1)= xk+1 - 1

S = (xk+1-1)/(x-1)

44

Page 31: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

T(1) = dT(n) = a T(n/b) + cnd , a> bd

45

= aic(n / bi )di=0

logb n∑

= cnd (a / bd )ii=0

logb n∑

= cndabd( )

logb n+1−1

abd( )−1

)n(T

Page 32: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Solve: T(1) = dT(n) = a T(n/b) + cnd , a > bd

46

cndabd( )

logb n+1−1

abd( )−1

< cndabd( )

logb n+1

abd( )−1

= c nd

bd logb n

"

#$

%

&' a

bd( ) alogb n

abd( )−1

= c abd( ) a

logb n

abd( )−1

=O(n logb a )

alogb n

= blogb a( )logb n

= blogb n( )logb a

= n logb a

nd

= blogb n( )d

= bd logb n

Page 33: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Solve: T(1) = dT(n) = a T(n/b) + cnd , a < bd

= aic(n / bi )di=0

logb n∑

= cnd ai / bidi=0

logb n∑

= cnd1− a

bd( )logb n+1

1− abd( )

< cnd 11− a

bd( )=O(nd )

)n(T

Page 34: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Solve: T(1) = dT(n) = a T(n/b) + cnd , a =bd

= aic(n / bi )di=0

logb n∑

= cnd ai / bidi=0

logb n∑=O(nd logb n)

)n(T

Page 35: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

divide and conquer – master recurrence

T(n) = aT(n/b)+cnd for n > b then

a > bd ⇒ T(n) = [many subprobs → leaves dominate]

a < bd ⇒ T(n) = Θ(nd) [few subprobs → top level dominates]

a = bd ⇒ T(n) = Θ (nd log n) [balanced → all log n levels contribute]

Fine print: a ≥ 1; b > 1; c, d ≥ 0; T(1) = c; a, b, k, t integers.

49

)( log abnΘ

Page 36: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Integer Multiplication

52

Page 37: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

integer arithmetic

Add. Given two n-bit integers a and b, compute a + b.

O(n) bit operations.

Multiply. Given two n-digit integers a and b, compute a × b.The “grade school” method:

Q(n2) bit operations.53

1

011 1

110 1+

010 1

111

010 1

011 1

100 0

10111

Add

1

1

0

0

1

1

1

0

0

1

1

1

1

0

0

1

1

1

1

0

1

0

1

0000000

1010101

1010101

1010101

1010101

1010101

100000000001011

1

0

1

1

1

1

1

0

*

Multiply

00000000

Page 38: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

integer arithmetic

Add. Given two n-bit integers a and b, compute a + b.

O(n) bit operations.

Multiply. Given two n-bit integers a and b, compute a × b.The “grade school” method:

54

1

011 1

110 1+

010 1

111

010 1

011 1

100 0

10111

Add

1

1

0

0

1

1

1

0

0

1

1

1

1

0

0

1

1

1

1

0

1

0

1

0000000

1010101

1010101

1010101

1010101

1010101

100000000001011

1

0

1

1

1

1

1

0

*

Multiply

00000000

Page 39: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

integer arithmetic

Add. Given two n-bit integers a and b, compute a + b.

O(n) bit operations.

Multiply. Given two n-bit integers a and b, compute a × b.The “grade school” method:

Θ(n2) bit operations.55

1

011 1

110 1+

010 1

111

010 1

011 1

100 0

10111

Add

1

1

0

0

1

1

1

0

0

1

1

1

1

0

0

1

1

1

1

0

1

0

1

0000000

1010101

1010101

1010101

1010101

1010101

100000000001011

1

0

1

1

1

1

1

0

*

Multiply

00000000

Page 40: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

divide & conquer multiplication: warmup

To multiply two 2-digit integers:Multiply four 1-digit integers.Add, shift some 2-digit integers to obtain result.

Same idea works for long integers –can split them into 4 half-sized ints

56

x = 10⋅ x1 + x0y = 10⋅ y1 + y0

xy = 10⋅ x1 + x0( ) 10⋅ y1 + y0( )= 100 ⋅ x1y1 + 10⋅ x1y0 + x0y1( ) + x0y0

5

2

4

3

0441

01

80

51

21

x0 × y0

x0× y1

x1×y0

x1× y1

x1 x0

y1 y0

Page 41: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

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.

57

T(n) = 4T n / 2( )recursive calls

+ Θ(n)add, shift €

x = 2n / 2 ⋅ x1 + x0

y = 2n / 2 ⋅ y1 + y0

xy = 2n / 2 ⋅ x1 + x0( ) 2n / 2 ⋅ y1 + y0( )= 2n ⋅ x1y1 + 2n / 2 ⋅ x1y0 + x0y1( ) + x0y0

1

1

0

0

1

1

0

1

1

1

0

1

1

1

1

0

1000000000010110

*

10000010

10010101

11000100

11011010

x0×y0

x0×y1

x1×y0

x1×y1

x1 x0

y1 y0

Page 42: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

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.

58

T(n) = 4T n /2( )recursive calls

+ Θ(n)add, shift ⇒ T(n) =Θ(n2 )

x = 2n / 2 ⋅ x1 + x0

y = 2n / 2 ⋅ y1 + y0

xy = 2n / 2 ⋅ x1 + x0( ) 2n / 2 ⋅ y1 + y0( )= 2n ⋅ x1y1 + 2n / 2 ⋅ x1y0 + x0y1( ) + x0y0

1

1

0

0

1

1

0

1

1

1

0

1

1

1

1

0

1000000000010110

*

10000010

10010101

11000100

11011010

x0×y0

x0×y1

x1×y0

x1×y1

x1 x0

y1 y0

Page 43: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

key trick: 2 multiplies for the price of 1:

59

x = 2n / 2 ⋅ x1 + x0

y = 2n / 2 ⋅ y1 + y0

xy = 2n / 2 ⋅ x1 + x0( ) 2n / 2 ⋅ y1 + y0( )= 2n ⋅ x1y1 + 2n / 2 ⋅ x1y0 + x0y1( ) + x0y0

α = x1 + x0

β = y1 + y0

αβ = x1 + x0( ) y1 + y0( )= x1y1 + x1y0 + x0y1( ) + x0y0

x1y0 + x0y1( ) = αβ − x1y1 − x0y0

Well, ok, 4 for 3 is more accurate…

Page 44: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

Karatsuba multiplication

To multiply two n-bit integers:Add two ½n bit integers.

Multiply three ½n-bit integers.Add, subtract, and shift ½n-bit integers to obtain result.

Theorem. [Karatsuba-Ofman, 1962] Can multiply two n-digit integers in O(n1.585) bit operations.

60

x = 2n / 2 ⋅ x1 + x0

y = 2n / 2 ⋅ y1 + y0

xy = 2n ⋅ x1y1 + 2n / 2 ⋅ x1y0 + x0 y1( ) + x0 y0

= 2n ⋅ x1y1 + 2n / 2 ⋅ (x1 + x0 ) (y1 + y0 ) − x1y1 − x0 y0( ) + x0 y0

T (n) ≤ 3T (n / 2)+O(n)

⇒ T(n) = O(n log 2 3 ) = O(n1.585 )

A B CA C

Page 45: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

multiplication – the bottom line

Naïve: Θ(n2)Karatsuba: Θ(n1.59…)Amusing exercise: generalize Karatsuba to do 5 size

n/3 subproblems → Θ(n1.46…)Best known: Θ(n log n loglog n)

"Fast Fourier Transform”

61

Page 46: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

62

Another Example:

Matrix Multiplication –

Strassen’s Method

Page 47: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

63

Multiplying Matrices

n3 multiplications, n3-n2 additions

!!!!

"

#

$$$$

%

&

!!!!

"

#

$$$$

%

&

44434241

34333231

24232221

14131211

44434241

34333231

24232221

14131211

bbbbbbbbbbbbbbbb

aaaaaaaaaaaaaaaa

!!!!

"

#

$$$$

%

&

+++++++++

+++++++++

+++++++++

+++++++++

=

444434432442144142443243224212414144314321421141

443434332432143142343233223212314134313321321131

442434232422142142243223222212214124312321221121

441434132412141142143213221212114114311321121111

babababababababababababababababababababababababababababababababababababababababababababababababa

Page 48: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

64

Simple Matrix Multiply

for i = 1 to nfor j = I to n

C[i,j] = 0for k = 1 to n

C[i,j] = C[i,j] + A[i,k] * B[k,j]

n3 multiplications, n3-n2 additions

Page 49: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

65

Multiplying Matrices

!!!!

"

#

$$$$

%

&

!!!!

"

#

$$$$

%

&

44434241

34333231

24232221

14131211

44434241

34333231

24232221

14131211

bbbbbbbbbbbbbbbb

aaaaaaaaaaaaaaaa

!!!!

"

#

$$$$

%

&

+++++++++

+++++++++

+++++++++

+++++++++

=

444434432442144142443243224212414144314321421141

443434332432143142343233223212314134313321321131

442434232422142142243223222212214124312321221121

441434132412141142143213221212114114311321121111

babababababababababababababababababababababababababababababababababababababababababababababababa

Page 50: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

66

Multiplying Matrices

!!!!

"

#

$$$$

%

&

!!!!

"

#

$$$$

%

&

44434241

34333231

24232221

14131211

44434241

34333231

24232221

14131211

bbbbbbbbbbbbbbbb

aaaaaaaaaaaaaaaa

!!!!

"

#

$$$$

%

&

+++++++++

+++++++++

+++++++++

+++++++++

=

444434432442144142443243224212414144314321421141

443434332432143142343233223212314134313321321131

442434232422142142243223222212214124312321221121

441434132412141142143213221212114114311321121111

babababababababababababababababababababababababababababababababababababababababababababababababa

Page 51: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

67

Multiplying Matrices

!!!!

"

#

$$$$

%

&

!!!!

"

#

$$$$

%

&

44434241

34333231

24232221

14131211

44434241

34333231

24232221

14131211

bbbbbbbbbbbbbbbb

aaaaaaaaaaaaaaaa

!!!!

"

#

$$$$

%

&

+++++++++

+++++++++

+++++++++

+++++++++

=

444434432442144142443243224212414144314321421141

443434332432143142343233223212314134313321321131

442434232422142142243223222212214124312321221121

441434132412141142143213221212114114311321121111

babababababababababababababababababababababababababababababababababababababababababababababababa

A11 A12

A21

A11B12+A12B22

A22

A11B11+A12B21

B11 B12

B21 B22

A21B12+A22B22A21B11+A22B21

Page 52: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

68

Multiplying Matrices

Counting arithmetic operations:T(n) = 8T(n/2) + 4(n/2)2 = 8T(n/2) + n2

A11 A12

A21

A11B12+A12B22

A22

A11B11+A12B21

B11 B12

B21 B22

A21B12+A22B22A21B11+A22B21=

Page 53: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

69

Multiplying Matrices

1 if n = 1T(n) =

8T(n/2) + n2 if n > 1

By Master Recurrence, if

T(n) = aT(n/b)+cnd & a > bd then

T(n) = )()()( 3loglog nnn 8a 2b Θ=Θ=Θ

{

Page 54: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

70

The algorithm

P1 = A12(B11+B21) P2 = A21(B12+B22) P3 = (A11 - A12)B11 P4 = (A22 - A21)B22

P5 = (A22 - A12)(B21 - B22)P6 = (A11 - A21)(B12 - B11)P7 = (A21 - A12)(B11+B22)C11= P1+P3 C12 = P2+P3+P6-P7

C21= P1+P4+P5+P7 C22 = P2+P4

Page 55: Divide & Conquer - homes.cs.washington.eduanuprao/pubs/CSE421Wi2020/05… · Bubble-sort improved with 0.1/0.9 split: (.1n)2+ (.9n)2+ n = .82n2+ n The 18% savings compounds significantly

71

Strassen’s algorithm

Strassen’s algorithmMultiply 2x2 matrices using 7 instead of 8 multiplications (and lots more than 4 additions)

T(n)=7 T(n/2)+cn2

7>22 so T(n) is Q(n ) which is O(n2.81)Fastest algorithms theoretically use O(n2.376) time

log27