divide and conquer
DESCRIPTION
Divide and Conquer. Recall. Complexity Analysis Comparison of algorithm Big O Simplification From source code Recursive. Today Topic. Divide and Conquer. Divide and Conquer. Algorithm Design Technique. Divide and Conquer. Mathematical Induction Analogy Solve the problem by - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/1.jpg)
Divide and Conquer
![Page 2: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/2.jpg)
Recall
• Complexity Analysis– Comparison of algorithm– Big O• Simplification• From source code
– Recursive
![Page 3: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/3.jpg)
Today Topic
• Divide and Conquer
![Page 4: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/4.jpg)
DIVIDE AND CONQUERAlgorithm Design Technique
![Page 5: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/5.jpg)
Divide and Conquer
• Mathematical Induction Analogy
• Solve the problem by – Divide it into smaller parts– Solve the smaller parts recursively– Merge the result of the smaller parts
![Page 6: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/6.jpg)
Induction
• Prove the smallest case (the basis step)• Relate how the result from the smaller case
constitutes the proof of the larger case (the induction step)– What is the relation ?• (n-1) n? (basic induction)• (n-m)n? (complete induction)
![Page 7: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/7.jpg)
Induction Example
• Show that– 1+2+3+4+…+n = n(n+1)/2
• The basis step– 1 = 1(1+1)/2 true
![Page 8: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/8.jpg)
The Inductive Step
• The inductive step– Assume that it is true for (n-1)– Check the case (n)• 1 + 2 + 3 +… + n = (1 + 2 + 3 + … + (n-1) ) + n• = (n-1)(n) / 2 + n• = n((n-1)/2 + 1)• = n(n/2-1/2 + 1)• = n(n/2 + 1/2) • = n(n+1)/2
![Page 9: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/9.jpg)
The Inductive Step
• The inductive step– Assume that it is true for (n-1)– Check the case (n)• 1 + 2 + 3 +… + n = (1 + 2 + 3 + … + (n-1) ) + n• = (n-1)(n) / 2 + n• = n((n-1)/2 + 1)• = n(n/2-1/2 + 1)• = n(n/2 + 1/2) • = n(n+1)/2
By using (n-1)
![Page 10: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/10.jpg)
The Induction
• By using the result of the smaller case• We can proof the larger case
![Page 11: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/11.jpg)
Key of Divide and Conquer
• Divide into smaller parts (subproblems)• Solve the smaller parts recursively
• Merge the result of the smaller parts
![Page 12: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/12.jpg)
Steps in D&C
• Questions– What if we has the solution of the
subproblem (smaller problem)?• What is the subproblem? (how to divide?)• What can we do with the result? (how to
conquer?)
• If we know the answer, the rest comes automatically from the recursion
![Page 13: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/13.jpg)
Code Example
ResultType DandC(Problem p) { if (p is trivial) { solve p directly return the result } else { divide p into p1,p2,...,pn
for (i = 1 to n) ri = DandC(pi) combine r1,r2,...,rn into r return r }}
![Page 14: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/14.jpg)
Code Example
ResultType DandC(Problem p) { if (p is trivial) { solve p directly ts
return the result } else { divide p into p1,p2,...,pn
td
for (i = 1 to n) tr ri = DandC(pi) combine r1,r2,...,rn into r tc return r }}
Trivial Case
Divide
Recursive
Combine
![Page 15: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/15.jpg)
Examples
• Let’s see some examples
![Page 16: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/16.jpg)
MERGE SORT
![Page 17: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/17.jpg)
The Sorting Problem
• Given a sequence of numbers– A = [a1,a2,a3,…,an]
• Output– The sequence A that is sorted from min to max
![Page 18: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/18.jpg)
The Question
• What if we know the solution of the smaller problem?– What is the smaller problem?• Try the same problem sorting
• What if we know the result of the sorting of some elements?
![Page 19: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/19.jpg)
The Question
• How to divide?– Let’s try sorting of the smaller array• Divide exactly at the half of the array
• How to conquer?– Merge the result directly
![Page 20: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/20.jpg)
Idea
• Simplest dividing– Divide array into two array of half size
• Laborious conquer– Merge the result
![Page 21: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/21.jpg)
Divide
![Page 22: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/22.jpg)
Divide Θ(1)
![Page 23: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/23.jpg)
Solve by Recursion T(N/2)
![Page 24: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/24.jpg)
Merge
![Page 25: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/25.jpg)
MergeΘ(N)
![Page 26: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/26.jpg)
Analysis
• T(n) = 2T(n/2) + O(n)
• Master method– T(n) = O(n lg n)
![Page 27: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/27.jpg)
QUICK SORT
![Page 28: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/28.jpg)
The Sorting Problem (again)
• Given a sequence of numbers– A = [a1,a2,a3,…,an]
• Output– The sequence A that is sorted from min to max
![Page 29: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/29.jpg)
Problem of Merge Sort
• Need the use of external memory for merging
• Are there any other way such that conquering is not that complex?
![Page 30: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/30.jpg)
The Question
• How to divide?– Try doing the same thing as the merge sort– Add that every element in the first half is less
than the second half• Can we do that?
• How to conquer?– The sorted result should be easier to merge?
![Page 31: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/31.jpg)
Idea
• Laborious dividing– Divide array into two arrays• Add the requirement of value of the array
• Simplest conquer– Simply connect the result
![Page 32: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/32.jpg)
Is dividing scheme possible?
• Can we manage to have two subproblems of equal size– That satisfy our need?
• Any trade off?
![Page 33: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/33.jpg)
The Median
• We need to know the median– There are n/2 elements which are not more
than the median– There are another n/2 elements which are not
less than the median
• Can we have the median?– Hardly possible at this step
![Page 34: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/34.jpg)
Simplified Division
• Can we simplify?– Not using the median?
• Using kth member– There are k elements which are not more than
the median– There are another (n-k) elements which are not
less than the median
• Simply pick any member and use it as a “pivot”
![Page 35: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/35.jpg)
Divide Θ(N)
partitioning
First k element
Other n- k element
![Page 36: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/36.jpg)
Solve by Recursion
sorting
T(K) + T(N – K)
![Page 37: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/37.jpg)
Conquer O(1)
Do nothing!
![Page 38: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/38.jpg)
Analysis
• T(n) = T(k) + T(n – k) + Θ(n)
• There can be several cases– Up to which K that we chosen
![Page 39: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/39.jpg)
Analysis : Worst Case
• K always is 1st
What should be our T(N) ?
What is the time complexity
![Page 40: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/40.jpg)
Analysis : Worst Case
• K always is 1st
T(n) = T(1) + T(n – 1) + Θ(n) = T(n – 1) + Θ(n) = ΣΘ(i) = Θ(n2)
Not good
![Page 41: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/41.jpg)
Analysis : Best Case
• K always is the median
What should be our T(N) ?
What is the time complexity
![Page 42: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/42.jpg)
Analysis : Best Case
• K always is the median
T(n) = 2T(n/2) + Θ(n) = Θ(n log n)
The same as the merge sort(without the need of external memory)
![Page 43: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/43.jpg)
Fixing the worst case
• When will the worst case happen?– When we always selects the smallest element as
a pivot– Depends on pivot selection strategy
• If we select the first element as a pivot– What if the data is sorted?
![Page 44: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/44.jpg)
Fixing the worst case
• Select wrong pivot leads to worst case.• There will exist some input such that for any
strategy of “deterministic” pivot selection leads to worst case.
![Page 45: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/45.jpg)
Fixing the worst case
• Use “non-deterministic” pivot selection– i.e., randomized selection
• Pick a random element as a pivot• It is unlikely that every selection leads to
worst case• We can hope that, on average, – it is O(n log n)
![Page 46: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/46.jpg)
MODULO EXPONENTIAL
![Page 47: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/47.jpg)
The Problem
• Given x, n and k• Output: the value of xn mod k
![Page 48: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/48.jpg)
Naïve method
res = x mod k;for (i = 2 to n) do { res = res * x; res = res mod k;}
Θ(n)
Using basic facts: (a * b) mod k = ((a mod k) * (b mod k)) mod k
![Page 49: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/49.jpg)
The Question
• What if we knows the solution to the smaller problem?– Smaller problem smaller N– xn ?? from x(n-e)?
• Let’s try x(n/2)
![Page 50: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/50.jpg)
The Question
• How to divide?– xn = xn/2 * xn/2 (n is even)– xn = xn/2 * xn/2 * x (n is odd)
• How to conquer?– Compute xn/2 mod k• Square and times with x, if needed,• mod k afterward
![Page 51: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/51.jpg)
Analysis
• T(n) = T(n/2) + Θ(1)• = O(log n)
![Page 52: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/52.jpg)
Example 292 mod 10
• 292 = 246 × 246
• 246 = 223 × 223
• 223 = 211 × 211 × 2• 211 = 25 × 25 × 2• 25 = 22 × 22 × 2• 22 = 21 × 21
= 4×4 mod 10 = 6
= 8×8 mod 10 = 4
= 8×8×2 mod 10 = 8
= 2×2×2 mod 10 = 8
= 4×4×2 mod 10 = 2
= 2×2 mod 10 = 4
![Page 53: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/53.jpg)
MAXIMUM CONTIGUOUS SUM OF SUBSEQUENCE (MCS)
![Page 54: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/54.jpg)
The MCS Problem
• Given a sequence of numbers– A = [a1,a2,a3,…,an]• There are n members
• Find a subsequence s = [ai,ai+1,ai+2,…,ak]– Such that the sum of the element in s is
maximum
![Page 55: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/55.jpg)
Example
4 -3 5 -2 -1 2 6 -2
Sum = 11
![Page 56: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/56.jpg)
Naïve approach
• Try all possible sequences– How many sequence?– How much time does it use to compute the
sum?
![Page 57: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/57.jpg)
Naïve approach
• Try all possible sequences– There are Θ(n2) sequence– Each sequence takes O(n) to compute the sum
• Hence, it’s O(n3)
• Can be improved by– Remembering the summation– Using DP (will be discussed in their respective
lecture)
![Page 58: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/58.jpg)
The DC Approach
• What if we know the solution of the smaller problem– What if we know MSS of the first half and the
second half?
![Page 59: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/59.jpg)
The Question
• How to divide?– By half of the member
• How to conquer?– Does the result of the subproblems can be used
to compute the solution?– Let’s see
![Page 60: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/60.jpg)
Combining the result from sub MSS
4 -3 5 -2 -1 2 6 -2
![Page 61: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/61.jpg)
Combining the result from sub MSS
4 -3 5 -2 -1 2 6 -2
![Page 62: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/62.jpg)
4 -3 5 -2 -1 2 6 -2
Combining the result from sub MSS
Sum = 6 Sum = 8
Shall this be our answer?
![Page 63: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/63.jpg)
Combining the result from sub MSS
Do we consider all possibilities?
4 -3 5 -2 -1 2 6 -2
![Page 64: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/64.jpg)
Combining the result from sub MSS
Considered all pairs in each half
But not the pair including member from both half There are
(n/2)2
additional pairs4 -3 5 -2 -1 2 6 -2
![Page 65: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/65.jpg)
Compute max of cross over
• Consider this
• The max sequence from the green part is always the same, regardless of the pink part
• The sequence always start at the left border
4 -3 5 -2 -1 2 6 -2
![Page 66: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/66.jpg)
Compute max of cross over
• Similarly
• The max sequence from the pink part is always the same, regardless of the green part
• The sequence always start at the right border
4 -3 5 -2 -1 2 6 -2
![Page 67: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/67.jpg)
4 -3 5 -2 -1 2 6 -2
Compute max of cross over
• Just find the marginal max from each part
Sum = -1
![Page 68: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/68.jpg)
Compute max of cross over
• Just find the marginal max from each part
4 -3 5 -2 -1 2 6 -2Sum = 1
![Page 69: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/69.jpg)
Compute max of cross over
• Just find the marginal max from each part
4 -3 5 -2 -1 2 6 -2Sum = 7
![Page 70: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/70.jpg)
Compute max of cross over
• Just find the marginal max from each part
Less than previous
4 -3 5 -2 -1 2 6 -2Sum = 5
![Page 71: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/71.jpg)
Compute max of cross over
• Just find the marginal max from each part
4 -3 5 -2 -1 2 6 -2Sum = -2
![Page 72: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/72.jpg)
Compute max of cross over
• Just find the marginal max from each part
4 -3 5 -2 -1 2 6 -2Sum = 3
![Page 73: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/73.jpg)
4 -3 5 -2 -1 2 6 -2
Compute max of cross over
• Just find the marginal max from each part
Sum = 0
![Page 74: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/74.jpg)
4 -3 5 -2 -1 2 6 -2
Compute max of cross over
• Just find the marginal max from each part
Sum = 4
This is max
![Page 75: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/75.jpg)
4 -3 5 -2 -1 2 6 -2
Compute max of cross over
• Just find the marginal max from each part
Sum = 7Sum = 4
Total = 11
takes Θ(n/2)takes Θ(n/2)
![Page 76: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/76.jpg)
Combine
• Max from the three parts– The left half– The right half– The cross over part
• Use the one that is maximum
![Page 77: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/77.jpg)
Analysis
• T(n) = 2 T(n/2) + Θ(n)• = Θ(n log n)
• a = 2, b = 2, c = log22=1, f(n) = O(n)
• nc=n2= Θ(n)– f(n) = (nΘ c) this is case 1 of the master’s method
• Hence, T(n) = Θ(n log n)
Left and right parts
Cross over part
![Page 78: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/78.jpg)
CLOSEST PAIR
![Page 79: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/79.jpg)
The Problem
• Given– N points in 2D• (x1,y1), (x2,y2), … ,(xn,yn)
• Output– A pair of points from the given set• (xa,ya), (xb,yb) 1 <= a,b <= n
• Such that the distance between the points is minimal
![Page 80: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/80.jpg)
Input Example
![Page 81: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/81.jpg)
Output Example
![Page 82: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/82.jpg)
The Naïve Approach
• Try all possible pairs of points– There are n(n+1)/2 pairs– Compute the distance of each pair• Takes Θ(1) for each pair
• In total, it is Θ(n2)
![Page 83: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/83.jpg)
DC approach
• What if we know the solution of the smaller problem– What if we know the Closest Pair of half of the
points?• Which half?
![Page 84: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/84.jpg)
Divide by X axis
Find closest pair of the left side
Find closest pair of the right side
![Page 85: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/85.jpg)
Conquer
• Like the MSS problem– Solutions of the subproblems do not cover every
possible pair of points– Missing the pairs that “span” over the boundary
![Page 86: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/86.jpg)
Divide by X axis
Find closest pair of the left side
Find closest pair of the right side
![Page 87: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/87.jpg)
Conquer
• Like the MSS problem– Solutions of the subproblems do not cover every
possible pair of points– Missing the pairs that “span” over the boundary
– There are (n/2)2 such pairs – Again, if we simply consider everything, it
would be• O(n2), still quadratic running time
– Can we do better?
![Page 88: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/88.jpg)
Find Closest Spanning Pair
Should we consider this one? Why?
![Page 89: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/89.jpg)
Find Closest Spanning Pair
• Should not consider the pair on the far left with that on the far right
• Should consider only the “nearer” pairs– How we know that they are surely too far away
– Anything that we can use to guarantee that some particular pairs should not be considered
![Page 90: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/90.jpg)
Possible Spanning Pair
a
b
2b
Consider pairs only in this stripOne point from the left sideAnother point from the right side
Any point outside the strip, if paired, its distance will be more than b
![Page 91: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/91.jpg)
Point in Strips
• How many points in the strip?– Should be less than n?– It is, in the previous example
– Well? Is it true?2b
![Page 92: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/92.jpg)
Point in Strips is O(N)
• Bad news– N points are possible– Consider a set of vertically aligned
point• Each are b unit apart
– So, every point will be in the strip of 2b width
• The problem– If we check every pair of points, we
still stuck with O(n2) time
2b
b
![Page 93: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/93.jpg)
The Solution
• Think Vertically– Do we have to check for every pair in the
strip?
– Do we need to consider this pair?• No, just like the case of X-axis• Don’t consider pairs that is surely further than b
![Page 94: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/94.jpg)
Spanning Pair to be considered
• X-value must be in the strip– Check only point in the left
side to point in the right side
• Y-value – For points in the strip• Check only point whose y-
value is not more than b unit apart
![Page 95: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/95.jpg)
Question is still remains
• How many pair to be checked?
A point to check
There are, at worse, 7 more points for each starting point
3 of them are on the same side, and we need not to check
![Page 96: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/96.jpg)
Implementation Detail
• In practice, to check just only those 4 points lying on the opposite side
• If we loops over every button first to test whether the y-value falls within range– That is still O(n)!!!!
• The points must be sorted!!!– ??? Additional work ????
![Page 97: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/97.jpg)
Naïve approach
• Sort every time we do recursive call• Each step requires additional O(n lg n)– That would result in O(n lg2 n)
![Page 98: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/98.jpg)
Better Approach• Sorting a point• Point must be sorted in x-value so that dividing can be done
in O(1)• Point must also be sorted in y-value
– When checking point in the strip, when y-value is to far, we can stop immediately
• Both sorting can be done in O(n lg n) at the preprocess step• Data is passed to the function in two separated list, one is x-
sorted another one is y-sorted– When divide, both list are separated
– Can be done in O(n)
![Page 99: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/99.jpg)
Analysis
• T(n) = 2 T(n/2) + 4O(n) + O(n)• = Θ(n log n)
• a = 2, b = 2, c = log22=1, f(n) = O(n)
• nc=n2= Θ(n)– f(n) = (nΘ c) this is case 1 of the master’s method
• Hence, T(n) = Θ(n log n)
Left and right parts
Point in strip Divide the
list
![Page 100: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/100.jpg)
MATRIX MULTIPLICATION
![Page 101: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/101.jpg)
The Problem
• Given two square matrix– An x n and Bn x n
– A Rn x n and B Rn x n
• Produce– C = AB
![Page 102: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/102.jpg)
Multiplying Matrix
ci,j = Σ(ai,k*bk,j)
![Page 103: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/103.jpg)
Naïve Method
for (i = 1; i <= n;i++) { for (j = 1; j <= n;j++) { sum = 0; for (k = 1;k <= n;k++) { sum += a[i][k] * b[k][j]; } c[i][j] = sum; }}
O(N3)
![Page 104: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/104.jpg)
Simple Divide and Conquer
• Divide Matrix into Block
• Multiply the block
![Page 105: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/105.jpg)
Simple Divide and Conquer
• What is the complexity?
• T(n) = 8T(n/2) + O(n2)• Master method gives O(n3)– Still the same
![Page 106: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/106.jpg)
Strassen’s Algorithm
• We define
• Note that each M can be computed by one single multiplication of n/2 * n/2 matrices
• The number of addition is 10(n/2) 2
![Page 107: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/107.jpg)
Strassen’s Algorithm
• Compute the result
• 8 more additions of n/2 * n/2 matrices• Hence, total addition is 18 (n/2)2
![Page 108: Divide and Conquer](https://reader034.vdocuments.us/reader034/viewer/2022051402/56815f0e550346895dcdccfc/html5/thumbnails/108.jpg)
Analysis
• T(n) = 7T(n/2) + O(n2)– Using Master’s method– a = 7, b = 2, f(n) = O(n2)• c = log2 7 ≈ 2.807
– Hence, f(n) = O(n2.807) this is case 1 of the master method
• So, T(n) = O(n2.807)