0% found this document useful (0 votes)
82 views44 pages

Divide & Conquer

This document discusses various divide-and-conquer algorithms and their time complexities. It begins with simple examples of finding the maximum element and binary search. It then presents the general divide-and-conquer approach of dividing a problem into subproblems, solving the subproblems recursively, and combining the solutions. Several algorithms are analyzed, including quicksort, mergesort, closest pair problem, convex hull problem, matrix multiplication, and fast Fourier transform. For each problem, an algorithm is presented and its time complexity is proven to be O(n log n) or better.

Uploaded by

Saraah Ghori
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
82 views44 pages

Divide & Conquer

This document discusses various divide-and-conquer algorithms and their time complexities. It begins with simple examples of finding the maximum element and binary search. It then presents the general divide-and-conquer approach of dividing a problem into subproblems, solving the subproblems recursively, and combining the solutions. Several algorithms are analyzed, including quicksort, mergesort, closest pair problem, convex hull problem, matrix multiplication, and fast Fourier transform. For each problem, an algorithm is presented and its time complexity is proven to be O(n log n) or better.

Uploaded by

Saraah Ghori
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 44

Chapter 4

The Divide-and-Conquer
Strategy

4 -1

A simple example

finding the maximum of a set S of n


numbers

4 -2

Time complexity

Time complexity:
T(n): # of comparisons

2T(n/2)+1 , n>2
, n2

T(n)=
Calculation of T(n):
1

Assume n = 2k,
T(n)
= 2T(n/2)+1
= 2(2T(n/4)+1)+1
= 4T(n/4)+2+1
:
=2k-1T(2)+2k-2++4+2+1
=2k-1+2k-2++4+2+1
=2k-1 = n-1

4 -3

A general divide-andconquer algorithm


Step 1: If the problem size is small, solve
this
problem directly; otherwise,
split the
original problem into 2 subproblems
with equal sizes.
Step 2: Recursively solve these 2 subproblems
by applying this algorithm.
Step 3: Merge the solutions of the 2 subproblems into a solution of the original
problem.
4 -4

Time complexity of the


general algorithm

Time complexity:

T(n)=

2T(n/2)+S(n)+M(n) , n c
b
,n<c

where S(n) : time for splitting


M(n) : time for merging
b : a constant
c : a constant
4 -5

Binary search
e.g. 2 4 5 6 7 8 9

search 7: needs 3 comparisons


time: O(log n)
The binary search can be used only if the
elements are sorted and stored in an array.

4 -6

Algorithm binary-search
Input: A sorted sequence of n elements stored in an
array.
Output: The position of x (to be searched).
Step 1: If only one element remains in the array, solve it
directly.
Step 2: Compare x with the middle element of the array.
Step 2.1: If x = middle element, then output it and stop.
Step 2.2: If x < middle element, then recursively solve
the problem with x and the left half array.
Step 2.3: If x > middle element, then recursively solve
the problem with x and the right half array.

4 -7

Algorithm BinSearch(a, low,


high, x)
//
//
//
//

a[]: sorted sequence in nondecreasing order


low, high: the bounds for searching in a []
x: the element to be searched
If x = a[j], for some j, then return j else return 1
if (low > high) then return 1
// invalid range
if (low = high) then
// if small P
if (x == a[i]) then return i
else return -1
else
// divide P into two smaller subproblems
mid = (low + high) / 2
if (x == a[mid]) then return mid
else if (x < a[mid]) then
return BinSearch(a, low, mid-1, x)
else return BinSearch(a, mid+1, high, x)

4 -8

Quicksort

Sort into nondecreasing order

[26
[26
[26
[11
[11
[ 1
1
1
1
1

5
5
5
5
5
5]
5
5
5
5

37
1
19
1
19
1
19
1
1 19
11 [19
11 15
11 15
11 15
11 15

61
61
15
15]
15]
15]
19
19
19
19

11
11
11
26
26
26
26
26
26
26

59
59
59
[59
[59
[59
[59
[59
[48
37

15
15
61
61
61
61
61
37
37]
48

48 19]
48 37]
48 37]
48 37]
48 37]
48 37]
48 37]
48 61]
59 [61]
59 61

4 -9

Algorithm Quicksort
Input: A set S of n elements.
Output: The sorted sequence of the inputs in
nondecreasing order.
Step 1: If |S|2, solve it directly.
Step 2: (Partition step) Use a pivot to scan
all elements in S. Put the smaller elements
in S1, and the larger elements in S2.
Step 3: Recursively solve S1 and S2.

4 -10

Time complexity of
Quicksort

time in the worst case:


(n-1)+(n-2)+...+1 = n(n-1)/2= O(n2)
time in the best case:
In each partition, the problem is always
divided into two subproblems with
almost equal size.
n
n 2 = n
2
n 4 = n
4

log2n
..
.
...

...

4 -11

Time complexity of the best


case

T(n): time required for sorting n


elements
T(n) cn+2T(n/2), for some constant c.
cn+2(c n/2 + 2T(n/4))
2cn + 4T(n/4)

cnlog2n + nT(1) = O(nlogn)

4 -12

Two-way merge

Merge two sorted sequences into a


single one.
[25

37

48

[12

25

33

57][12 33
merge
37 48 57

86

92]

86

92]

time complexity: O(m+n),


m and n: lengths of the two sorted lists

4 -13

Merge sort

Sort into nondecreasing order


[25][57][48][37][12][92][86][33]
pass 1
[25 57][37 48][12 92][33 86]
pass 2
[25 37 48 57][12 33 86 92]
pass 3
[12 25 33 37 48 57 86 92]

log2n passes are required.


time complexity: O(nlogn)
4 -14

Algorithm Merge-Sort
Input: A set S of n elements.
Output: The sorted sequence of the inputs in
nondecreasing order.
Step 1: If |S|2, solve it directly.
Step 2: Recursively apply this algorithm to
solve the left half part and right half part of
S, and the results are stored in S1 and S2,
respectively.
Step 3: Perform the two-way merge scheme
on S1 and S2.
4 -15

2-D maxima finding


problem

Def : A point (x1, y1) dominates (x2, y2) if


x1 > x2 and y1 > y2. A point is called a
maximum if no other point dominates it
Straightforward method : Compare
every pair of points.
Time complexity:
C(n,2)=O(n2)
4 -16

Divide-and-conquer for
maxima finding

The maximal points of SL and SR


4 -17

The algorithm:
Input: A set S of n planar points.
Output: The maximal points of S.
Step 1: If S contains only one point, return it
as the maximum. Otherwise, find a line L
perpendicular
to
the
X-axis
which
separates S into SLand SR, with equal sizes.

Step 2: Recursively find the maximal points


of SL and SR .
Step 3: Find the largest y-value of SR,
denoted as yR. Discard each of the
maximal points of SL if its y-value is less
than yR.
4 -18

Time complexity: T(n)


Step 1: O(n)
Step 2: 2T(n/2)
Step 3: O(n)

T(n)=

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

,n>1
,n=1

Assume n = 2k
T(n) = O(n log n)

4 -19

The closest pair problem

Given a set S of n points, find a pair of


points which are closest together.
1-D version :
2-D
Solved by sorting version
Time complexity :
O(n log n)

4 -20

at most 6 points in area A:

4 -21

The algorithm:
Input: A set S of n planar points.
Output: The distance between two closest
points.
Step 1: Sort points in S according to their yvalues.
Step 2: If S contains only one point, return
infinity as its distance.
Step 3: Find a median line L perpendicular to
the X-axis to divide S into SL and SR, with
equal sizes.
Step 4: Recursively apply Steps 2 and 3 to
solve the closest pair problems of S L and SR.
Let dL(dR) denote the distance between the
closest pair in SL (SR). Let d = min(dL, dR).

4 -22

Step 5: For a point P in the half-slab bounded


by L-d and L, let its y-value be denoted as
yP . For each such P, find all points in the
half-slab bounded by L and L+d whose yvalue fall within yP+d and yP-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)=

2T(n/2)+O(n)+O(n) , n > 1
1
,n=1

T(n) = O(n log n)

4 -23

The convex hull problem


concave
polygon:

convex polygon:

The convex hull of a set of planar points


is the smallest convex polygon
containing all of the points.

4 -24

The divide-and-conquer strategy to


solve the problem:

4 -25


1.
2.

3.

4.

The merging procedure:


Select an interior point p.
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
Merge these 3 sequences into 1 sequence:
g, h, a, b, f, c, e, d, i, j, k.
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.)

4 -26

e.g. points b and f need to be


deleted.
Final
result:

4 -27

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 Xaxis which divides S into SL and SR, with equal
sizes.
Step 3: Recursively construct convex hulls for S L
and SR, denoted as Hull(SL) and Hull(SR),
respectively.

4 -28

Step 4: Apply the merging procedure to


merge Hull(SL) and Hull(SR) together to
form a convex hull.

Time complexity:
T(n) = 2T(n/2) + O(n)
= O(n log n)

4 -29

Matrix multiplication

Let A, B and C be n n matrices


C = AB
C(i, j) =1k n A(i, k)B(k, j)
The straightforward method to
perform a matrix multiplication
requires O(n3) time.

4 -30

Divide-and-conquer approach

C = AB
C11 C12 = A11 A12
B11 B12
C21 C22 = A21 A22
B21 B22
C11 = A11 B11 + A12 B21
C12 = A11B12 + A12 B22
C21 = A21 B11 + A22 B21
C22 = A21 B12 + A22 B22
Time complexity:
(# of additions : n2)

We get T(n) = O(n3)


b
,n2
T(n) =

8T(n/2)+cn2 , n > 2
4 -31

Strassens matrix
multiplicaiton

P = (A11 + A22)(B11 + B22)


Q = (A21 + A22)B11
R = A11(B12 - B22)
S = A22(B21 - B11)
T = (A11 + A12)B22
U = (A21 - A11)(B11 + B12)
V = (A12 - A22)(B21 + B22).
C11 = P + S - T + V
C12 = R + T
C21 = Q + S
C22 = P + R - Q + U

C11
C12
C21
C22

=
=
=
=

A11 B11
A11B12
A21 B11
A21 B12

+
+
+
+

A12
A12
A22
A22

B21
B22
B21
B22

4 -32

Time complexity

7 multiplications and
subtractions

b
,n2
Time
complexity:

T(n) =

7T(n/2)+an2 , n > 2

18

additions

or

T ( n ) an 2 7T ( n / 2)
an 2 7( a ( n2 ) 2 7T ( n / 4)
an 2 74 an 2 7 2 T ( n / 4)

an 2 (1

7
4

( 74 ) 2 ( 74 ) k 1 ) 7 k T (1)

cn 2 ( 74 )log2 n 7log2 n , c is a constant


cn 2 ( 74 ) log2 n n log2 7 cn log2 4log2 7log2 4 n log2 7
O( n log2 7 ) O( n 2.81 )

4 -33

Fast Fourier transform


(FFT)

Fourier transform

b(f) a(t)ei 2 ft dt , where i 1

Inverse Fourier transform


1
a(t)
2

b(f)e i 2ft dt

Discrete Fourier transform(DFT)


Given a0, a1, , an-1 ,
bj

compute

n 1

ak ei 2jk / n , 0 j n 1
k 0
n 1

ak kj , where ei 2 / n
k 0

4 -34

DFT and waveform(1)

Any periodic waveform can be


decomposed into the linear sum of
sinusoid functions (sine or cosine).

7 15

48 56

f()

-1

f (t ) cos(2 (7)t ) 3 cos(2 (15)t )


3 cos(2 ( 48)t ) cos(2 (56)t )

-2

-3

-4

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

4 -35

DFT and waveform (2)

The waveform of a
music signal of 1
second

The frequency spectrum


of the music signal with
DFT
4 -36

FFT algorithm

Inverse DFT:
1 n 1
ak b j jk , 0 k n 1
n j 0
ei cos i sin

n ( ei 2 / n ) n ei 2 cos 2 i sin 2 1
n / 2 (ei 2 / n )n / 2 ei cos i sin 1

DFT can be computed in O(n2) time by a


straightforward method.
DFT can be solved by the divide-andconquer strategy (FFT) in O(nlogn) time.
4 -37

FFT algorithm when n=4

n=4, w=ei2/4 , w4=1, w2=-1


b0=a0+a1+a2+a3
b1=a0+a1w+a2w2+a3w3
b2=a0+a1w2+a2w4+a3w6
b3=a0+a1w3+a2w6+a3w9
another form:
b0 =(a0+a2)+(a1+a3)
b2 =(a0+a2w4)+(a1w2+a3w6) =(a0+a2)-(a1+a3)
When we calculate b0, we shall calculate (a0+a2) and (a1+a3).
Later, b2 van be easily calculated.
Similarly,
b1 =(a0+ a2w2)+(a1w+a3w3) =(a0-a2)+w(a1-a3)
b3 =(a0+a2w6)+(a1w3+a3w9) =(a0-a2)-w(a1-a3).

4 -38

FFT algorithm when n=8


n=8, w=ei2/8, w8=1, w4=-1
b0=a0+a1+a2+a3+a4+a5+a6+a7

b1=a0+a1w+a2w2+a3w3+a4w4+a5w5+a6w6+a7w7
b2=a0+a1w2+a2w4+a3w6+a4w8+a5w10+a6w12+a7w14
b3=a0+a1w3+a2w6+a3w9+a4w12+a5w15+a6w18+a7w21
b4=a0+a1w4+a2w8+a3w12+a4w16+a5w20+a6w24+a7w28
b5=a0+a1w5+a2w10+a3w15+a4w20+a5w25+a6w30+a7w35
b6=a0+a1w6+a2w12+a3w18+a4w24+a5w30+a6w36+a7w42
b7=a0+a1w7+a2w14+a3w21+a4w28+a5w35+a6w42+a7w49

4 -39

After reordering, we have

b0=(a0+a2+a4+a6)+(a1+a3+a5+a7)
b1=(a0+a2w2+a4w4+a6w6)+ w(a1+a3w2+a5w4+a7w6)
b2=(a0+a2w4+a4w8+a6w12)+ w2(a1+a3w4+a5w8+a7w12)
b3=(a0+a2w6+a4w12+a6w18)+ w3(a1+a3w6+a5w12+a7w18)
b4=(a0+a2+a4+a6)-(a1+a3+a5+a7)
b5=(a0+a2w2+a4w4+a6w6)-w(a1+a3w2+a5w4+a7w6)
b6=(a0+a2w4+a4w8+a6w12)-w2(a1+a3w4+a5w8+a7w12)
b7=(a0+a2w6+a4w12+a6w18)-w3(a1+a3w6+a5w12+a7w18)

Rewrite as
b0=c0+d0

b4=c0-d0=c0+w4d0

b1=c1+wd1 b5=c1-wd1=c1+w5d1
b2=c2+w2d2 b6=c2-w2d2=c2+w6d2
b3=c3+w3d3 b7=c3-w3d3=c3+w7d3
4 -40

c0=a0+a2+a4+a6
c1=a0+a2w2+a4w4+a6w6
c2=a0+a2w4+a4w8+a6w12
c3=a0+a2w6+a4w12+a6w18

Let x=w2=ei2/4
c0=a0+a2+a4+a6
c1=a0+a2x+a4x2+a6x3
c2=a0+a2x2+a4x4+a6x6
c3=a0+a2x3+a4x6+a6x9

Thus, {c0,c1,c2,c3} is FFT of {a0,a2,a4,a6}.


Similarly, {d0,d1,d2,d3} is FFT of {a1,a3,a5,a7}.

4 -41

General FFT

In general, let w=ei2/n (assume n is even.)


wn=1, wn/2=-1
bj =a0+a1wj+a2w2j++an-1w(n-1)j,
={a0+a2w2j+a4w4j++an-2w(n-2)j}+
wj{a1+a3w2j+a5w4j++an-1w(n-2)j}
=cj+wjdj
bj+n/2=a0+a1wj+n/2+a2w2j+n+a3w3j+3n/2+
+an-1w(n-1)j+n(n-1)/2
=a0-a1wj+a2w2j-a3w3j++an-2w(n-2)j-an-1w(n-1)j
=cj-wjdj
=cj+wj+n/2dj

4 -42

Divide-and-conquer (FFT)

Input: a0, a1, , an-1, n = 2k


Output: bj, j=0, 1, 2, , n-1
kj
i 2 /n
b

a
w
,
where
w

e
k
j
where
0 k n 1

Step 1: If n=2, compute


b0 = a 0 + a 1 ,
b1 = a0 - a1, and return.
Step 2: Recursively find the Fourier transform of
{a0, a2, a4,, an-2} and {a1, a3, a5,,an-1}, whose
results are denoted as {c0, c1, c2,, cn/2-1} and
{d0, d1, d2,, dn/2-1}.
4 -43

Step 3: Compute bj:


bj = cj + wjdj for 0 j n/2 - 1
bj+n/2 = cj - wjdj for 0 j n/2 - 1.

Time complexity:
T(n) = 2T(n/2) + O(n)
= O(n log n)

4 -44

You might also like