Download presentation
Presentation is loading. Please wait.
Published byEthel Stephens Modified over 9 years ago
1
5 -1 Chapter 5 The Divide-and-Conquer Strategy
2
5 -2 A simple example finding the maximum of a set S of n numbers
3
5 -3 Time complexity: Calculation of T(n): Assume n = 2 k, T(n)= 2T(n/2)+1 = 2(2T(n/4)+1)+1 = 4T(n/4)+2+1 : =2 k-1 T(2)+2 k-2 + … +4+2+1 =2 k-1 +2 k-2 + … +4+2+1 =2 k -1 = n-1 Time complexity
4
5 -4 Another simple example Find both the minimum and maximum in an array of integers A[1..n] and assume that n is a power of 2. The straightforward method: 1. x A[1]; y A[1] 2. for i 2 to n 3. if A[i]<x then x A[i] 4. if A[i]>y then y A[i] 5. end for 6. return (x,y) The number of element comparisons: 2n-2
5
5 -5 Algorithm MINMAX Input: An array A[1..n] of n integers, where n is a power of 2 Output: (x,y), the minimum and maximum integers in A 1. minmax(1,n) Procedure minmax(low,high) 1. if high-low=1 then 2. if A[low]<A[high] then return (A[low],A[high]) 3. else return (A[high],A[low]) 4. end if 5. else 6. mid (low+high)/2 7. (x1,y1) minmax(low,mid) 8. (x2,y2) minimax(mid+1,high) 9. x min{x1,x2} 10. y max{y1,y2} 11. return (x,y) 12. endif The number of element comparisons: (3n/2)-2
6
5 -6 A general divide-and-conquer algorithm Step 1: If the problem size is small, solve this problem directly; otherwise, split the original problem into 2 sub-problems with equal sizes. Step 2: Recursively solve these 2 sub-problems by applying this algorithm. Step 3: Merge the solutions of the 2 sub- problems into a solution of the original problem.
7
5 -7 Time complexity of the general algorithm Time complexity: where S(n) : time for splitting M(n) : time for merging b : a constant c : a constant
8
5 -8 A partitioning algorithm Splitting/partitioning around x: The action of rearranging the elements so that all elements less than or equal to x precede x which in turn precedes all elements all elements greater than x. x is called the pivot or splitting element. Definition : We say that an element A[j] is in its proper position or correct position if it is neither smaller than the elements in A[low..j-1] nor larger than the elements in A[j+1..high] Observation : After partitioning an array A using x A as a pivot, x will be in its correct position. If we sort the elements in A in nondecreasing order after they have been rearranged, then we will still have A[w]=x
9
5 -9 Algorithm SPLIT Input: An array of elements A[low..high] Output: 1) A with its elements rearranged, if necessary, as described above 2) w, the new position of the splitting element A[low] 1. i low 2. x A[low] 3. for j low+1 to high 4. if A[j] x then 5. i i+1 6. if i j then interchange A[i] and A[j] 7. end if 8. end for 9. interchange A[low] and A[i] 10. w i 11. return A and w
10
5 -10 Throughout the execution of the algorithm, we maintain two pointers i and j that are initially set to low and low+1, respectively. These two pointers move from left to right so that after each iteration of the for loop, we have 1) A[low]=x 2) A[k] x for all k, low k i 3) A[k]>x for all k, i<k j Observation : The number of element comparisons performed by Algorithm SPLIT is exactly n-1. Thus the time complexity is (n) The only extra space used by Algorithm SPLIT is that needed to hold its local variables. Thus the space complexity is (1)
11
5 -11 Quicksort Algorithm QUICKSORT Input: An array A[1..n] of n elements Output: The elements in A sorted in nondecreasing order 1. quicksort(A,1,n) Procedure quicksort(A,low,high) 1. if low<high then 2. SPLIT(A[low..high],w) {w is the new position of A[low]) 3. quicksort(A,low,w-1) 4. quicksort(A,w+1,high) 5. end if
12
5 -12 Analysis of the quicksort algorithm Theorem : The running time of Algorithm QUICKSORT is (n^2) in the worst case. If, however, the median is always chosen as the pivot, then its time complexity is (nlogn) Theorem : The average number of comparisons performed by Algorithm QUICKSORT to sort an array of n elements is (nlogn)
13
5 -13 2-D maxima finding problem Def : A point (x 1, y 1 ) dominates (x 2, y 2 ) if x 1 > x 2 and y 1 > y 2. A point is called a maxima if no other point dominates it Straightforward method : Compare every pair of points. Time complexity: O(n 2 )
14
5 -14 Divide-and-conquer for maxima finding The maximal points of S L and S R
15
5 -15 The algorithm: Input: A set of n planar points. Output: The maximal points of S. Step 1: If S contains only one point, return it as the maxima. Otherwise, find a line L perpendicular to the X-axis which separates the set of points into two subsets S L and S R, each of which consisting of n/2 points. Step 2: Recursively find the maximal points of S L and S R. Step 3: Find the largest y-value of S R. Project the maximal points of S L onto L. Discard each of the maximal points of S L if its y-value is less than the largest y-value of S R.
16
5 -16 Time complexity: T(n) Step 1: O(n) Step 2: 2T(n/2) Step 3: O(n) Assume n = 2 k T(n) = O(n log n)
17
5 -17 The closest pair problem Given a set S of n points, find a pair of points which are closest together. 1-D version : Solved by sorting Time complexity : O(n log n) 2-D version
18
5 -18 at most 6 points in area A:
19
5 -19 The algorithm: Input: A set of n planar points. Output: The distance between two closest points. Step 1: Sort points in S according to their y- values and x-values. Step 2: If S contains only one point, return infinity as their distance. Step 3: Find a median line L perpendicular to the X-axis to divide S into two subsets, with equal sizes, S L and S R. Step 4: Recursively apply Step 2 and Step 3 to solve the closest pair problems of S L and S R. Let d L (d R ) denote the distance between the closest pair in S L (S R ). Let d = min(d L, d R ).
20
5 -20 Step 5: For a point P in the half-slab bounded by L-d and L, let its y-value by denoted as y P. For each such P, find all points in the half- slab bounded by L and L+d whose y-value fall within y P +d and y P -d. If the distance d between P and a point in the other half-slab is less than d, let d=d. The final value of d is the answer. Time complexity: O(n log n) Step 1: O(n log n) Steps 2~5: T(n) = O(n log n)
21
5 -21 The convex hull problem The convex hull of a set of planar points is the smallest convex polygon containing all of the points. concave polygon:convex polygon:
22
5 -22 The divide-and-conquer strategy to solve the problem: Calculate the tangent Of this angle
23
5 -23 The merging procedure: 1.Select an interior point p. 2.There are 3 sequences of points which have increasing polar angles with respect to p. (1) g, h, i, j, k (2) a, b, c, d (3) f, e 3.Merge these 3 sequences into 1 sequence: g, h, a, b, f, c, e, d, i, j, k. 4.Apply Graham scan to examine the points one by one and eliminate the points which cause reflexive angles. (See the example on the next page.)
24
5 -24 e.g. points b and f need to be deleted. Final result: (X2-x1)(y3-y1)-(y2-y1)(x3-x1) Zero: co-linear Positive: left turn Otherwise: right turn
25
5 -25 Divide-and-conquer for convex hull Input : A set S of planar points Output : A convex hull for S Step 1: If S contains no more than five points, use exhaustive searching to find the convex hull and return. Step 2: Find a median line perpendicular to the X-axis which divides S into S L and S R ; S L lies to the left of S R. Step 3: Recursively construct convex hulls for S L and S R. Denote these convex hulls by Hull(S L ) and Hull(S R ) respectively.
26
5 -26 Step 4: Apply the merging procedure to merge Hull(S L ) and Hull(S R ) together to form a convex hull. Time complexity: T(n) = 2T(n/2) + O(n) = O(n log n)
27
5 -27 Multiplication of large integers Let u and v be two n-bit integers. The traditional multiplication algorithm requires (n^2) digit multiplications to compute the product of u and v. Assume n is a power of 2. Each integer is divided into 2 parts of n/2 bits each: u=w*2^(n/2)+x v=y*2^(n/2)+z Then u*v=w*y*2^n+(w*z+x*y)*2^(n/2)+x*z But T(n)= (n^2)!
28
5 -28 Multiplication of large integers Let u and v be two n-bit integers. The traditional multiplication algorithm requires (n^2) digit multiplications to compute the product of u and v. Assume n is a power of 2. Each integer is divided into 2 parts of n/2 bits each: u=w*2^(n/2)+x v=y*2^(n/2)+z Then u*v=w*y*2^n+(w*z+x*y)*2^(n/2)+xz Because w*z+x*y=(w+x)(y+z)-w*y-x*z Then u*v=w*y*2^n+((w+x)(y+z)-wy- xz)*2^(n/2)+xz And T(n)= (n^log3)=O(n^1.59)!
29
课堂练习 循环赛日程安排 设有 n=2 k 个运动员要进行网球循环赛。现要求设 计一个满足如下要求的比赛日程表: 1. 每个选手必须与其他 n-1 个选手各赛一场; 2. 每个选手一天只能赛一次; 3. 循环赛共进行 n-1 天。 5 -29
30
课堂练习 5 -30 在一个 2 k *2 k 个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称 该方格为一个特殊方格,且称该棋盘为一个特殊棋盘,如图 A 所示。设计 一个程序,用图 B 所示的 4 种不同形态的 L 型骨牌覆盖一个除特殊棋盘上特 殊方格以外的所有方格,且任何 2 个 L 型骨牌不得重叠覆盖。
31
5 -31 Matrix multiplication Let A, B and C be n n matrices C = AB C(i, j) = A(i, k)B(k, j) The straightforward method to perform a matrix multiplication requires O(n 3 ) time.
32
5 -32 Recursive version Assume that n=2^k, k 0. If n 2, then A, B and C can be partitioned as The divide-and-conquer version consists of computing C as defined by the equation Observation : The recursive version requires n^3 multiplications and n^3-n^2 additions. These are exactly the figures stated above for the traditional method
33
5 -33 Strassen ’ s algorithm
34
5 -34 Fast Fourier transform (FFT) Fourier transform A(f) = a(t)e 2 ift dt Inverse Fourier transform a(t) = A(f)e -2 ift df Discrete Fourier transform(DFT) Given a 0, a 1, …, a n-1 A j = a k e 2 ijk/n,0 j n-1 Inverse DFT a k = A j e -2 ijk/n,0 k n-1
35
5 -35 DFT and waveform Any periodic waveform can be decomposed into the linear sum of sinusoid functions (sine or cosine). See the left part:
36
5 -36 An application of the FFT polynomial multiplication Polynomial multiplication: The straightforward product requires O(n 2 ) time. DFT notations:
37
5 -37 Fast polynomial multiplication Step 1: Let N be the smallest integer that N=2 q and N 2n-1. Step 2: Compute FFT of Step 3: Compute FFT of Step 4: Step 5: Time complexity: O(NlogN)=O(nlogn), N<4n.
38
5 -38 FFT algorithm A straightforward method to calculate DFT requires O(n 2 ) time. DFT can be solved by the divide-and-conquer strategy (FFT). Let w=e 2 i/n. i.e. w n =1, w n/2 =-1. A j = a k e 2 ijk/n, 0 j n-1 = a k w jk e.g. n = 8, let e 2 i/8 = w= e i/4
39
5 -39 FFT algorithm when n=4 n =4, let e 2 i/4 =w = e i/2 (w 4 = 1, w 2 = -1) A 0 = a 0 + a 1 + a 2 + a 3 A 1 = a 0 + a 1 w + a 2 w 2 + a 3 w 3 A 2 = a 0 + a 1 w 2 + a 2 w (2)(2) + a 3 w (2)(3) = a 0 + a 1 w 2 + a 2 w 4 + a 3 w 6 A 3 = a 0 + a 1 w 3 + a 2 w (3)(2) + a 3 w (3)(3) = a 0 + a 1 w 3 + a 2 w 6 + a 3 w 9
40
5 -40 Rewrite as: A 0 = a 0 + a 2 + (a 1 + a 3 ) A 2 = a 0 + a 2 w 4 + (a 1 w 2 + a 3 w 6 ) = a 0 + a 2 - (a 1 + a 3 ) When we calculate A 0, we shall calculate (a 0 + a 2 ) and (a 1 + a 3 ). Later, A 2 can be easily found. Similarly, A 1 = (a 0 + a 2 w 2 ) + a 1 w + a 3 w 3 A 3 = (a 0 + a 2 w 6 ) + (a 1 w 3 + a 3 w 9 ) = (a 0 + a 2 w 2 ) - (a 1 w + a 3 w 3 )
41
5 -41 n = 8, let e 2 i/8 = w = e i/4 (w 8 = 1, w 4 = -1) A 0 = a 0 + a 1 + a 2 + a 3 + a 4 + a 5 + a 6 + a 7 A 1 = a 0 +a 1 w+a 2 w 2 +a 3 w 3 +a 4 w 4 +a 5 w 5 +a 6 w 6 +a 7 w 7 A 2 = a 0 +a 1 w 2 +a 2 w 4 +a 3 w 6 +a 4 w 8 +a 5 w 10 +a 6 w 12 +a 7 w 14 A 3 = a 0 +a 1 w 3 +a 2 w 6 +a 3 w 9 +a 4 w 12 +a 5 w 15 +a 6 w 18 +a 7 w 21 A 4 = a 0 +a 1 w 4 +a 2 w 8 +a 3 w 12 +a 4 w 16 +a 5 w 20 +a 6 w 24 +a 7 w 28 A 5 = a 0 +a 1 w 5 +a 2 w 10 +a 3 w 15 +a 4 w 20 +a 5 w 25 +a 6 w 30 +a 7 w 35 A 6 = a 0 +a 1 w 6 +a 2 w 12 +a 3 w 18 +a 4 w 24 +a 5 w 30 +a 6 w 36 +a 7 w 42 A 7 = a 0 +a 1 w 7 +a 2 w 14 +a 3 w 21 +a 4 w 28 +a 5 w 35 +a 6 w 42 +a 7 w 49 FFT algorithm when n=8
42
5 -42 After reordering, we have A 0 =(a 0 +a 2 +a 4 +a 6 )+(a 1 +a 3 +a 5 +a 7 ) A 4 =(a 0 +a 2 +a 4 +a 6 )-(a 1 +a 3 +a 5 +a 7 ) A 1 =(a 0 +a 2 w 2 +a 4 w 4 +a 6 w 6 )+w(a 1 +a 3 w 2 +a 5 w 4 +a 7 w 6 ) A 5 =(a 0 +a 2 w 2 +a 4 w 4 +a 6 w 6 )-w(a 1 +a 3 w 2 +a 5 w 4 +a 7 w 6 ) A 2 =(a 0 +a 2 w 4 +a 4 w 8 +a 6 w 12 )+w 2 (a 1 +a 3 w 4 +a 5 w 8 +a 7 w 12 ) A 6 =(a 0 +a 2 w 4 +a 4 w 8 +a 6 w 12 )-w 2 (a 1 +a 3 w 4 +a 5 w 8 +a 7 w 12 ) A 3 =(a 0 +a 2 w 6 +a 4 w 12 +a 6 w 18 )+w 3 (a 1 +a 3 w 6 +a 5 w 9 +a 7 w 18 ) A 7 =(a 0 +a 2 w 6 +a 4 w 12 +a 6 w 18 )-w 3 (a 1 +a 3 w 6 +a 5 w 9 +a 7 w 18 ) Rewrite as: A 0 = B 0 + C 0 A 4 = B 0 - C 0 A 1 = B 1 + C 1 A 5 = B 1 - C 1 A 2 = B 2 + C 2 A 6 = B 2 - C 2 A 3 = B 3 + C 3 A 7 = B 3 - C 3
43
5 -43 let x=w 2 =e 2 i/4 = e i/2 (x 4 = 1, x 2 = -1) We can recursively apply the same method to calculate B i ’ s and C i ’ s. B 0 = a 0 +a 2 +a 4 +a 6 B 1 = a 0 +a 2 w 2 +a 4 w 4 +a 6 w 6 = a 0 +a 2 x+a 4 x 2 +a 6 x 3 B 2 = a 0 +a 2 w 4 +a 4 w 8 +a 6 w 12 = a 0 +a 2 x 2 +a 4 x 4 +a 6 x 6 B 3 = a 0 +a 2 w 6 +a 4 w 12 +a 6 w 18 = a 0 +a 2 x 3 +a 4 x 6 +a 6 x 9 Thus, {B 0, B 1, B 2, B 3 } is the DFT of {a 0, a 1, a 2, a 3 }.
44
5 -44 General FFT In general, let w = e 2 i/n (assume n is even) (w n = 1, w n/2 = -1) A j = a 0 +a 1 w j +a 2 w 2j + … +a n-1 w (n-1)j ={a 0 +a 2 w 2j +a 4 w 4j + … +a n-2 w (n-2)j } + {a 1 w j +a 3 w 3j + … +a n-1 w (n-1)j } = B j + C j A j+n/2 = a 0 +a 1 w j+n/2 +a 2 w 2j+n +a 3 w 3j+3n/2 + … + a n-1 w (n-1)j+(n(n-1)/2) =a 0 -a 1 w j +a 2 w 2j -a 3 w 3j + … +a n-2 w (n-2)j -a n-1 w (n-1)j = B j - C j
45
5 -45 Divide-and-conquer (FFT) Input : a 0, a 1, …, a n-1, n = 2 k Output : A j, j=0, 1, 2, …, n-1, where A j = 0 k n-1 a k e 2 ijk/n Step 1: If n=2, compute A 0 = a 0 + a 1, A 1 = a 0 - a 1, and return. Step 2: Divide each a j, 0 j n/2 - 1 into two sequences: O j and E j, where O j (E j ), consists of odd-numbered (even-numbered) terms of A j.
46
5 -46 Step 3: Recursively calculate the sums of terms in O j and E j. Denote the sum of terms of O j and E j by B j and C j, respectively. Step 4: Compute A j by the following formual : A j = B j + C j for 0 j n/2 - 1 A j +n/2 = B j - C j for 0 j n/2 - 1. Time complexity : T(n) = 2T(n/2) + O(n) = O(n log n)
47
5 -47 Comparisons of the algorithms
48
5 -48 The Voronoi diagram problem e.g. The Voronoi diagram for three points Each L ij is the perpendicular bisector of the line.
49
5 -49 Definition of Voronoi diagrams Def : Given two points P i, P j S, let H(P i,P j ) denote the half plane containing P i. The Voronoi polygon associated with P i is defined as
50
5 -50 Given a set of n points, the Voronoi diagram consists of all the Voronoi polygons of these points. The vertices of the Voronoi diagram are called Voronoi points and its segments are called Voronoi edges.
51
5 -51 Delaunay triangulation
52
5 -52 Example for constructing Voronoi diagrams Divide the points into two parts.
53
5 -53 Merging two Voronoi diagrams Merging along the piecewise linear hyperplane
54
5 -54 After merging The final Voronoi diagram
55
5 -55 Divide-and-conquer for Voronoi diagram Input: A set S of n planar points. Output: The Voronoi diagram of S. Step 1: If S contains only one point, return. Step 2: Find a median line L perpendicular to the X-axis which divides S into S L and S R such that S L (S R ) lies to the left(right) of L and the sizes of S L and S R are equal.
56
5 -56 Step 3: Construct Voronoi diagrams of S L and S R recursively. Denote these Voronoi diagrams by VD(S L ) and VD(S R ). Step 4: Construct a dividing piece-wise linear hyperplane HP which is the locus of points simultaneously closest to a point in S L and a point in S R. Discard all segments of VD(S L ) which lie to the right of HP and all segments of VD(S R ) that lie to the left of HP. The resulting graph is the Voronoi diagram of S. (See details on the next page.)
57
5 -57 Mergeing Two Voronoi Diagrams into One Voronoi Diagram Input: (a) S L and S R where S L and S R are divided by a perpendicular line L. (b) VD(S L ) and VD(S R ). Output: VD(S) where S = S L ∩ S R Step 1: Find the convex hulls of S L and S R, denoted as Hull(S L ) and Hull(S R ), respectively. (A special algorithm for finding a convex hull in this case will by given later.)
58
5 -58 Step 2: Find segments and which join HULL(S L ) and HULL(S R ) into a convex hull (P a and P c belong to S L and P b and P d belong to S R ) Assume that lies above. Let x = a, y = b, SG= and HP = . Step 3: Find the perpendicular bisector of SG. Denote it by BS. Let HP = HP ∪ {BS}. If SG =, go to Step 5; otherwise, go to Step 4.
59
5 -59 Step 4: The ray from VD(S L ) and VD(S R ) which BS first intersects with must be a perpendicular bisector of either or for some z. If this ray is the perpendicular bisector of, then let SG = ; otherwise, let SG =. Go to Step 3. Step 5: Discard the edges of VD(S L ) which extend to the right of HP and discard the edges of VD(S R ) which extend to the left of HP. The resulting graph is the Voronoi diagram of S = S L ∪ S R.
60
5 -60 Properties of Voronoi Diagrams Def : Given a point P and a set S of points, the distance between P and S is the distance between P and P i which is the nearest neighbor of P in S. The HP obtained from the above algorithm is the locus of points which keep equal distances to S L and S R. The HP is monotonic in y.
61
5 -61 # of edges of a Voronoi diagram 3n - 6, where n is # of points. Reasoning: i.# of edges of a planar graph with n vertices 3n - 6. ii.A Delaunay triangulation is a planar graph. iii.Edges in Delaunay triangulation edges in Voronoi diagram. # of Voronoi edges
62
5 -62 # of Voronoi vertices # of Voronoi vertices 2n - 4. Reasoning : i.Let F, E and V denote # of face, edges and vertices in a planar graph. Euler ’ s relation: F = E - V + 2. ii.In a Delaunay triangulation, V = n, E 3n – 6 F = E - V + 2 3n - 6 - n + 2 = 2n - 4.
63
5 -63 Construct a convex hull from a Voronoi diagram After a Voronoi diagram is constructed, a convex hull can by found in O(n) time.
64
5 -64 Construct Convex Hull from Voronoi diagram Step 1: Find an infinite ray by examining all Voronoi edges. Step 2: Let P i be the point to the left of the infinite ray. P i is a convex hull vertex. Examine the Voronoi polygon of P i to find the next infinite ray. Step 3: Repeat Step 2 until we return to the Starting ray.
65
5 -65 Time complexity Time complexity for merging 2 Voronoi diagrams: Total: O(n) Step 1: O(n) Step 2: O(n) Step 3 ~ Step 5: O(n) (at most 3n - 6 edges in VD(S L ) and VD(S R ) and at most n segments in HP) Time complexity for constructing a Voronoi diagram: O(n log n) because T(n) = 2T(n/2) + O(n)=O(n log n)
66
5 -66 Lower bound The lower bound of the Voronoi diagram problem is (n log n). sorting Voronoi diagram problem The Voronoi diagram for a set of points on a straight line
67
5 -67 Applications of Voronoi diagrams The Euclidean nearest neighbor searching problem. The Euclidean all nearest neighbor problem.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.