Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley
5. Divide-and-Conquer
Divide et impera.
Veni, vidi, vici.
- Julius Caesar
2
Divide-and-Conquer
Divide-and-conquer.
! Break up problem into several parts.
! Solve each part recursively.
! Combine solutions to sub-problems into overall solution.
Most common usage.
! Break up problem of size n into two equal parts of size !n.
! Solve two parts recursively.
! Combine two solutions into overall solution in linear time.
Consequence.
! Brute force: n2.
! Divide-and-conquer: n log n.
Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley
5.1 Mergesort
4
Obvious sorting applications.
! List files in a directory.
! Organize an MP3 library.
! List names in a phone book.
! Display Google PageRank results.
Problems become easier once sorted.
! Find the median.
! Find the closest pair.
! Binary search in a database.
! Identify statistical outliers.
! Find duplicates in a mailing list.
Non-obvious sorting applications.
! Data compression.
! Computer graphics.
! Interval scheduling.
! Computational biology.
! Minimum spanning tree.
! Supply chain management.
! Simulate a system of particles.
! Book recommendations on Amazon.
! Load balancing on a parallel computer.
. . .
Sorting
Sorting. Given n elements, rearrange in ascending order.
5
Mergesort
Mergesort.
! Divide array into two halves.
! Recursively sort each half.
! Merge two halves to make sorted whole.
merge
sort
divide
A L G O R I T H M S
A L G O R I T H M S
A G L O R H I M S T
A G H I L M O R S T
Jon von Neumann (1945)
O(n)
2T(n/2)
O(1)
6
Merging
Merging. Combine two pre-sorted lists into a sorted whole.
How to merge efficiently?
! Linear number of comparisons.
! Use temporary array.
Challenge for the bored. In-place merge. [Kronrud, 1969]
A G L O R H I M S T
A G H I
using only a constant amount of extra storage
7
A Useful Recurrence Relation
Def. T(n) = number of comparisons to mergesort an input of size n.
Mergesort recurrence.
Solution. T(n) = O(n log2 n).
Assorted proofs. We describe several ways to prove this recurrence.
Initially we assume n is a power of 2 and replace ! with =.
!
T(n) "
0 if n =1
T n/2
# $
( )
solve left half
1 2
4 3
4
+ T n/2
% &
( )
solve right half
1 2
4 3
4
+ n
merging
{ otherwise
'
(
)
*
)
8
Proof by Recursion Tree
T(n)
T(n/2)
T(n/2)
T(n/4)
T(n/4)
T(n/4) T(n/4)
T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(2)
n
T(n / 2k)
2(n/2)
4(n/4)
2k (n / 2k)
n/2 (2)
. . .
. . .
log2n
n log2n
!
T(n) =
0 if n =1
2T(n/2)
sorting both halves
1 2
4 3
4
+ n
merging
{ otherwise
"
#
$
%
$
9
Proof by Telescoping
Claim. If T(n) satisfies this recurrence, then T(n) = n log2 n.
Pf. For n > 1:
!
T(n)
n
=
2T(n/2)
n
+ 1
=
T(n/2)
n/2
+ 1
=
T(n/4)
n/4
+ 1 + 1
L
=
T(n/n)
n/n
+ 1 +L+ 1
log2 n
1 2
4 3
4
= log2 n
!
T(n) =
0 if n =1
2T(n/2)
sorting both halves
1 2
4 3
4
+ n
merging
{ otherwise
"
#
$
%
$
assumes n is a power of 2
10
Proof by Induction
Claim. If T(n) satisfies this recurrence, then T(n) = n log2 n.
Pf. (by induction on n)
! Base case: n = 1.
! Inductive hypothesis: T(n) = n log2 n.
! Goal: show that T(2n) = 2n log2 (2n).
!
T(2n) = 2T(n) + 2n
= 2nlog2 n + 2n
= 2n log2(2n)"1
( ) + 2n
= 2nlog2(2n)
assumes n is a power of 2
!
T(n) =
0 if n =1
2T(n/2)
sorting both halves
1 2
4 3
4
+ n
merging
{ otherwise
"
#
$
%
$
11
Analysis of Mergesort Recurrence
Claim. If T(n) satisfies the following recurrence, then T(n) ! n "lg n#.
Pf. (by induction on n)
! Base case: n = 1.
! Define n1 = $n / 2% , n2 = "n / 2#.
! Induction step: assume true for 1, 2, ... , n–1.
!
T(n) " T(n1) + T(n2 ) + n
" n1 lgn1
# $ + n2 lgn2
# $ + n
" n1 lgn2
# $ + n2 lgn2
# $ + n
= n lgn2
# $ + n
" n( lgn
# $%1 ) + n
= n lgn
# $
!
n2 = n/2
" #
$ 2
lgn
" #
/ 2
" #
= 2
lgn
" #
/ 2
% lgn2 $ lgn
" # &1
!
T(n) "
0 if n =1
T n/2
# $
( )
solve left half
1 2
4 3
4
+ T n/2
% &
( )
solve right half
1 2
4 3
4
+ n
merging
{ otherwise
'
(
)
*
)
log2n
Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley
5.3 Counting Inversions
13
Music site tries to match your song preferences with others.
! You rank n songs.
! Music site consults database to find people with similar tastes.
Similarity metric: number of inversions between two rankings.
! My rank: 1, 2, …, n.
! Your rank: a1, a2, …, an.
! Songs i and j inverted if i < j, but ai > aj.
Brute force: check all &(n2) pairs i and j.
You
Me
1 4
3 2 5
1 3
2 4 5
A B C D E
Songs
Counting Inversions
Inversions
3-2, 4-2
14
Applications
Applications.
! Voting theory.
! Collaborative filtering.
! Measuring the "sortedness" of an array.
! Sensitivity analysis of Google's ranking function.
! Rank aggregation for meta-searching on the Web.
! Nonparametric statistics (e.g., Kendall's Tau distance).
15
Counting Inversions: Divide-and-Conquer
Divide-and-conquer.
4 8 10 2
1 5 12 11 3 7
6 9
16
Counting Inversions: Divide-and-Conquer
Divide-and-conquer.
! Divide: separate list into two pieces.
4 8 10 2
1 5 12 11 3 7
6 9
4 8 10 2
1 5 12 11 3 7
6 9
Divide: O(1).
17
Counting Inversions: Divide-and-Conquer
Divide-and-conquer.
! Divide: separate list into two pieces.
! Conquer: recursively count inversions in each half.
4 8 10 2
1 5 12 11 3 7
6 9
4 8 10 2
1 5 12 11 3 7
6 9
5 blue-blue inversions 8 green-green inversions
Divide: O(1).
Conquer: 2T(n / 2)
5-4, 5-2, 4-2, 8-2, 10-2 6-3, 9-3, 9-7, 12-3, 12-7, 12-11, 11-3, 11-7
18
Counting Inversions: Divide-and-Conquer
Divide-and-conquer.
! Divide: separate list into two pieces.
! Conquer: recursively count inversions in each half.
! Combine: count inversions where ai and aj are in different halves,
and return sum of three quantities.
4 8 10 2
1 5 12 11 3 7
6 9
4 8 10 2
1 5 12 11 3 7
6 9
5 blue-blue inversions 8 green-green inversions
Divide: O(1).
Conquer: 2T(n / 2)
Combine: ???
9 blue-green inversions
5-3, 4-3, 8-6, 8-3, 8-7, 10-6, 10-9, 10-3, 10-7
Total = 5 + 8 + 9 = 22.
19
13 blue-green inversions: 6 + 3 + 2 + 2 + 0 + 0
Counting Inversions: Combine
Combine: count blue-green inversions
! Assume each half is sorted.
! Count inversions where ai and aj are in different halves.
! Merge two sorted halves into sorted whole.
Count: O(n)
Merge: O(n)
10 14 18 19
3 7 16 17 23 25
2 11
7 10 11 14
2 3 18 19 23 25
16 17
!
T(n) " T n/2
# $
( )+T n/2
% &
( )+ O(n) ' T(n) = O(nlogn)
6 3 2 2 0 0
to maintain sorted invariant
20
Counting Inversions: Implementation
Pre-condition. [Merge-and-Count] A and B are sorted.
Post-condition. [Sort-and-Count] L is sorted.
Sort-and-Count(L) {
if list L has one element
return 0 and the list L
Divide the list into two halves A and B
(rA, A) ' Sort-and-Count(A)
(rB, B) ' Sort-and-Count(B)
(rB, L) ' Merge-and-Count(A, B)
return r = rA + rB + r and the sorted list L
}
Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley
5.4 Closest Pair of Points
22
Closest Pair of Points
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 &(n2) comparisons.
1-D version. O(n log n) easy if points are on a line.
Assumption. No two points have same x coordinate.
to make presentation cleaner
fast closest pair inspired fast algorithms for these problems
23
Closest Pair of Points: First Attempt
Divide. Sub-divide region into 4 quadrants.
L
24
Closest Pair of Points: First Attempt
Divide. Sub-divide region into 4 quadrants.
Obstacle. Impossible to ensure n/4 points in each piece.
L
25
Closest Pair of Points
Algorithm.
! Divide: draw vertical line L so that roughly !n points on each side.
L
26
Closest Pair of Points
Algorithm.
! Divide: draw vertical line L so that roughly !n points on each side.
! Conquer: find closest pair in each side recursively.
12
21
L
27
Closest Pair of Points
Algorithm.
! Divide: draw vertical line L so that roughly !n points on each side.
! Conquer: find closest pair in each side recursively.
! Combine: find closest pair with one point in each side.
! Return best of 3 solutions.
12
21
8
L
seems like &(n2
)
28
Closest Pair of Points
Find closest pair with one point in each side, assuming that distance < (.
12
21
( = min(12, 21)
L
29
Closest Pair of Points
Find closest pair with one point in each side, assuming that distance < (.
! Observation: only need to consider points within ( of line L.
12
21
(
L
( = min(12, 21)
30
12
21
1
2
3
4
5
6
7
(
Closest Pair of Points
Find closest pair with one point in each side, assuming that distance < (.
! Observation: only need to consider points within ( of line L.
! Sort points in 2(-strip by their y coordinate.
L
( = min(12, 21)
31
12
21
1
2
3
4
5
6
7
(
Closest Pair of Points
Find closest pair with one point in each side, assuming that distance < (.
! Observation: only need to consider points within ( of line L.
! Sort points in 2(-strip by their y coordinate.
! Only check distances of those within 11 positions in sorted list!
L
( = min(12, 21)
32
Closest Pair of Points
Def. Let si be the point in the 2(-strip, with
the ith smallest y-coordinate.
Claim. If |i – j| ) 12, then the distance between
si and sj is at least (.
Pf.
! No two points lie in same !(-by-!( box.
! Two points at least 2 rows apart
have distance ) 2(!(). !
Fact. Still true if we replace 12 with 7.
(
27
29
30
31
28
26
25
(
!(
2 rows
!(
!(
39
i
j
33
Closest Pair Algorithm
Closest-Pair(p1, …, pn) {
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 by y-coordinate.
Scan points in y-order and compare distance between
each point and next 11 neighbors. If any of these
distances is less than (, update (.
return (.
}
O(n log n)
2T(n / 2)
O(n)
O(n log n)
O(n)
34
Closest Pair of Points: Analysis
Running time.
Q. Can we achieve O(n log n)?
A. Yes. Don't sort points in strip from scratch each time.
! Each recursive returns two lists: all points sorted by y coordinate,
and all points sorted by x coordinate.
! Sort by merging two pre-sorted lists.
!
T(n) " 2T n/2
( ) + O(n) # T(n) = O(n logn)
!
T(n) " 2T n/2
( ) + O(n logn) # T(n) = O(n log2
n)
Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley
5.5 Integer Multiplication
36
Integer Arithmetic
Add. Given two n-digit integers a and b, compute a + b.
! O(n) bit operations.
Multiply. Given two n-digit integers a and b, compute a " b.
! Brute force solution: &(n2) bit operations.
1
1
0
0
0
1
1
1
0
0
1
1
1
1
0
0
1
1
1
1
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
1
1
1
0
1
1
1
1
1
0
0
*
1
0
1
1 1
1
1
0 1
+
0
1
0 1
1
1
1
0
1
0 1
0
1
1 1
1
0
0 0
1
0
1
1
1
Add
Multiply
37
To multiply two n-digit integers:
! Multiply four !n-digit integers.
! Add two !n-digit integers, and shift to obtain result.
Divide-and-Conquer Multiplication: Warmup
!
T(n) = 4T n/2
( )
recursive calls
1 2
4 3
4
+ "(n)
add, shift
123
# T(n) = "(n2
)
!
x = 2n /2
" x1 + x0
y = 2n /2
" y1 + y0
xy = 2n /2
" x1 + x0
( ) 2n /2
" y1 + y0
( ) = 2n
" x1 y1 + 2n /2
" x1 y0 + x0 y1
( ) + x0 y0
assumes n is a power of 2
38
To multiply two n-digit integers:
! Add two !n digit integers.
! Multiply three !n-digit integers.
! Add, subtract, and shift !n-digit integers to obtain result.
Theorem. [Karatsuba-Ofman, 1962] Can multiply two n-digit integers
in O(n1.585) bit operations.
Karatsuba Multiplication
!
x = 2n /2
" x1 + x0
y = 2n /2
" y1 + y0
xy = 2n
" x1 y1 + 2n /2
" x1 y0 + x0 y1
( ) + x0 y0
= 2n
" x1 y1 + 2n /2
" (x1 + x0 )(y1 + y0 ) # x1 y1 # x0 y0
( ) + x0 y0
!
T(n) " T n/2
# $
( ) + T n/2
% &
( ) + T 1+ n/2
% &
( )
recursive calls
1 2
4444444 3
4444444
+ '(n)
add, subtract, shift
1 2
4 3
4
( T(n) = O(n
log 2 3
) = O(n1.585
)
A B C
A C
39
Karatsuba: Recursion Tree
!
T(n) =
0 if n =1
3T(n/2) + n otherwise
"
#
$
n
3(n/2)
9(n/4)
3k (n / 2k)
3 lg n (2)
. . .
. . .
T(n)
T(n/2)
T(n/4) T(n/4)
T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(2)
T(n / 2k)
T(n/4)
T(n/2)
T(n/4) T(n/4)
T(n/4)
T(n/2)
T(n/4) T(n/4)
T(n/4)
. . .
. . .
!
T(n) = n 3
2
( )
k
k=0
log2 n
" =
3
2
( )
1+log2 n
#1
3
2
#1
= 3nlog2 3
# 2
Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley
Matrix Multiplication
41
Matrix multiplication. Given two n-by-n matrices A and B, compute C = AB.
Brute force. &(n3) arithmetic operations.
Fundamental question. Can we improve upon brute force?
Matrix Multiplication
!
cij = aik
bkj
k=1
n
"
!
c11 c12 L c1n
c21 c22 L c2n
M M O M
cn1
cn2
L cnn
"
#
$
$
$
$
%
&
'
'
'
'
=
a11 a12 L a1n
a21 a22 L a2n
M M O M
an1
an2
L ann
"
#
$
$
$
$
%
&
'
'
'
'
(
b11 b12 L b1n
b21 b22 L b2n
M M O M
bn1
bn2
L bnn
"
#
$
$
$
$
%
&
'
'
'
'
42
Matrix Multiplication: Warmup
Divide-and-conquer.
! Divide: partition A and B into !n-by-!n blocks.
! Conquer: multiply 8 !n-by-!n recursively.
! Combine: add appropriate products using 4 matrix additions.
!
C11 = A11 " B11
( ) + A12 " B21
( )
C12 = A11 " B12
( ) + A12 " B22
( )
C21 = A21 " B11
( ) + A22 " B21
( )
C22 = A21 " B12
( ) + A22 " B22
( )
!
C11 C12
C21 C22
"
#
$
%
&
' =
A11 A12
A21 A22
"
#
$
%
&
' (
B11 B12
B21 B22
"
#
$
%
&
'
!
T(n) = 8T n/2
( )
recursive calls
1 2
4 3
4
+ "(n2
)
add, form submatrices
1 2
44 3
44
# T(n) = "(n3
)
43
Matrix Multiplication: Key Idea
Key idea. multiply 2-by-2 block matrices with only 7 multiplications.
! 7 multiplications.
! 18 = 10 + 8 additions (or subtractions).
!
P
1 = A11 " (B12 # B22 )
P2 = (A11 + A12 ) " B22
P3 = (A21 + A22 ) " B11
P4 = A22 " (B21 # B11)
P5 = (A11 + A22 ) " (B11 + B22 )
P6 = (A12 # A22 ) " (B21 + B22 )
P7 = (A11 # A21) " (B11 + B12 )
!
C11 = P5 + P4 " P2 + P6
C12 = P
1 + P2
C21 = P3 + P4
C22 = P5 + P
1 " P3 " P7
!
C11 C12
C21 C22
"
#
$
%
&
' =
A11 A12
A21 A22
"
#
$
%
&
' (
B11 B12
B21 B22
"
#
$
%
&
'
44
Fast Matrix Multiplication
Fast matrix multiplication. (Strassen, 1969)
! Divide: partition A and B into !n-by-!n blocks.
! Compute: 14 !n-by-!n matrices via 10 matrix additions.
! Conquer: multiply 7 !n-by-!n matrices recursively.
! Combine: 7 products into 4 terms using 8 matrix additions.
Analysis.
! Assume n is a power of 2.
! T(n) = # arithmetic operations.
!
T(n) = 7T n/2
( )
recursive calls
1 2
4 3
4
+ "(n2
)
add, subtract
1 2
4 3
4
# T(n) = "(nlog2 7
) = O(n2.81
)
45
Fast Matrix Multiplication in Practice
Implementation issues.
! Sparsity.
! Caching effects.
! Numerical stability.
! Odd matrix dimensions.
! Crossover to classical algorithm around n = 128.
Common misperception: "Strassen is only a theoretical curiosity."
! Advanced Computation Group at Apple Computer reports 8x
speedup on G4 Velocity Engine when n ~ 2,500.
! Range of instances where it's useful is a subject of controversy.
Remark. Can "Strassenize" Ax=b, determinant, eigenvalues, and other
matrix ops.
46
Fast Matrix Multiplication in Theory
Q. Multiply two 2-by-2 matrices with only 7 scalar multiplications?
A. Yes! [Strassen, 1969]
Q. Multiply two 2-by-2 matrices with only 6 scalar multiplications?
A. Impossible. [Hopcroft and Kerr, 1971]
Q. Two 3-by-3 matrices with only 21 scalar multiplications?
A. Also impossible.
Q. Two 70-by-70 matrices with only 143,640 scalar multiplications?
A. Yes! [Pan, 1980]
Decimal wars.
! December, 1979: O(n2.521813).
! January, 1980: O(n2.521801).
!
"(nlog3 21
) = O(n 2.77
)
!
"(nlog70 143640
) = O(n 2.80
)
!
"(n log2 6
) = O(n 2.59
)
!
"(nlog2 7
) = O(n 2.81
)
47
Fast Matrix Multiplication in Theory
Best known. O(n2.376) [Coppersmith-Winograd, 1987.]
Conjecture. O(n2+*) for any * > 0.
Caveat. Theoretical improvements to Strassen are progressively less
practical.

Jurnal informatika

  • 1.
    Algorithm Design byÉva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley 5. Divide-and-Conquer Divide et impera. Veni, vidi, vici. - Julius Caesar 2 Divide-and-Conquer Divide-and-conquer. ! Break up problem into several parts. ! Solve each part recursively. ! Combine solutions to sub-problems into overall solution. Most common usage. ! Break up problem of size n into two equal parts of size !n. ! Solve two parts recursively. ! Combine two solutions into overall solution in linear time. Consequence. ! Brute force: n2. ! Divide-and-conquer: n log n. Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley 5.1 Mergesort 4 Obvious sorting applications. ! List files in a directory. ! Organize an MP3 library. ! List names in a phone book. ! Display Google PageRank results. Problems become easier once sorted. ! Find the median. ! Find the closest pair. ! Binary search in a database. ! Identify statistical outliers. ! Find duplicates in a mailing list. Non-obvious sorting applications. ! Data compression. ! Computer graphics. ! Interval scheduling. ! Computational biology. ! Minimum spanning tree. ! Supply chain management. ! Simulate a system of particles. ! Book recommendations on Amazon. ! Load balancing on a parallel computer. . . . Sorting Sorting. Given n elements, rearrange in ascending order.
  • 2.
    5 Mergesort Mergesort. ! Divide arrayinto two halves. ! Recursively sort each half. ! Merge two halves to make sorted whole. merge sort divide A L G O R I T H M S A L G O R I T H M S A G L O R H I M S T A G H I L M O R S T Jon von Neumann (1945) O(n) 2T(n/2) O(1) 6 Merging Merging. Combine two pre-sorted lists into a sorted whole. How to merge efficiently? ! Linear number of comparisons. ! Use temporary array. Challenge for the bored. In-place merge. [Kronrud, 1969] A G L O R H I M S T A G H I using only a constant amount of extra storage 7 A Useful Recurrence Relation Def. T(n) = number of comparisons to mergesort an input of size n. Mergesort recurrence. Solution. T(n) = O(n log2 n). Assorted proofs. We describe several ways to prove this recurrence. Initially we assume n is a power of 2 and replace ! with =. ! T(n) " 0 if n =1 T n/2 # $ ( ) solve left half 1 2 4 3 4 + T n/2 % & ( ) solve right half 1 2 4 3 4 + n merging { otherwise ' ( ) * ) 8 Proof by Recursion Tree T(n) T(n/2) T(n/2) T(n/4) T(n/4) T(n/4) T(n/4) T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(2) n T(n / 2k) 2(n/2) 4(n/4) 2k (n / 2k) n/2 (2) . . . . . . log2n n log2n ! T(n) = 0 if n =1 2T(n/2) sorting both halves 1 2 4 3 4 + n merging { otherwise " # $ % $
  • 3.
    9 Proof by Telescoping Claim.If T(n) satisfies this recurrence, then T(n) = n log2 n. Pf. For n > 1: ! T(n) n = 2T(n/2) n + 1 = T(n/2) n/2 + 1 = T(n/4) n/4 + 1 + 1 L = T(n/n) n/n + 1 +L+ 1 log2 n 1 2 4 3 4 = log2 n ! T(n) = 0 if n =1 2T(n/2) sorting both halves 1 2 4 3 4 + n merging { otherwise " # $ % $ assumes n is a power of 2 10 Proof by Induction Claim. If T(n) satisfies this recurrence, then T(n) = n log2 n. Pf. (by induction on n) ! Base case: n = 1. ! Inductive hypothesis: T(n) = n log2 n. ! Goal: show that T(2n) = 2n log2 (2n). ! T(2n) = 2T(n) + 2n = 2nlog2 n + 2n = 2n log2(2n)"1 ( ) + 2n = 2nlog2(2n) assumes n is a power of 2 ! T(n) = 0 if n =1 2T(n/2) sorting both halves 1 2 4 3 4 + n merging { otherwise " # $ % $ 11 Analysis of Mergesort Recurrence Claim. If T(n) satisfies the following recurrence, then T(n) ! n "lg n#. Pf. (by induction on n) ! Base case: n = 1. ! Define n1 = $n / 2% , n2 = "n / 2#. ! Induction step: assume true for 1, 2, ... , n–1. ! T(n) " T(n1) + T(n2 ) + n " n1 lgn1 # $ + n2 lgn2 # $ + n " n1 lgn2 # $ + n2 lgn2 # $ + n = n lgn2 # $ + n " n( lgn # $%1 ) + n = n lgn # $ ! n2 = n/2 " # $ 2 lgn " # / 2 " # = 2 lgn " # / 2 % lgn2 $ lgn " # &1 ! T(n) " 0 if n =1 T n/2 # $ ( ) solve left half 1 2 4 3 4 + T n/2 % & ( ) solve right half 1 2 4 3 4 + n merging { otherwise ' ( ) * ) log2n Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley 5.3 Counting Inversions
  • 4.
    13 Music site triesto match your song preferences with others. ! You rank n songs. ! Music site consults database to find people with similar tastes. Similarity metric: number of inversions between two rankings. ! My rank: 1, 2, …, n. ! Your rank: a1, a2, …, an. ! Songs i and j inverted if i < j, but ai > aj. Brute force: check all &(n2) pairs i and j. You Me 1 4 3 2 5 1 3 2 4 5 A B C D E Songs Counting Inversions Inversions 3-2, 4-2 14 Applications Applications. ! Voting theory. ! Collaborative filtering. ! Measuring the "sortedness" of an array. ! Sensitivity analysis of Google's ranking function. ! Rank aggregation for meta-searching on the Web. ! Nonparametric statistics (e.g., Kendall's Tau distance). 15 Counting Inversions: Divide-and-Conquer Divide-and-conquer. 4 8 10 2 1 5 12 11 3 7 6 9 16 Counting Inversions: Divide-and-Conquer Divide-and-conquer. ! Divide: separate list into two pieces. 4 8 10 2 1 5 12 11 3 7 6 9 4 8 10 2 1 5 12 11 3 7 6 9 Divide: O(1).
  • 5.
    17 Counting Inversions: Divide-and-Conquer Divide-and-conquer. !Divide: separate list into two pieces. ! Conquer: recursively count inversions in each half. 4 8 10 2 1 5 12 11 3 7 6 9 4 8 10 2 1 5 12 11 3 7 6 9 5 blue-blue inversions 8 green-green inversions Divide: O(1). Conquer: 2T(n / 2) 5-4, 5-2, 4-2, 8-2, 10-2 6-3, 9-3, 9-7, 12-3, 12-7, 12-11, 11-3, 11-7 18 Counting Inversions: Divide-and-Conquer Divide-and-conquer. ! Divide: separate list into two pieces. ! Conquer: recursively count inversions in each half. ! Combine: count inversions where ai and aj are in different halves, and return sum of three quantities. 4 8 10 2 1 5 12 11 3 7 6 9 4 8 10 2 1 5 12 11 3 7 6 9 5 blue-blue inversions 8 green-green inversions Divide: O(1). Conquer: 2T(n / 2) Combine: ??? 9 blue-green inversions 5-3, 4-3, 8-6, 8-3, 8-7, 10-6, 10-9, 10-3, 10-7 Total = 5 + 8 + 9 = 22. 19 13 blue-green inversions: 6 + 3 + 2 + 2 + 0 + 0 Counting Inversions: Combine Combine: count blue-green inversions ! Assume each half is sorted. ! Count inversions where ai and aj are in different halves. ! Merge two sorted halves into sorted whole. Count: O(n) Merge: O(n) 10 14 18 19 3 7 16 17 23 25 2 11 7 10 11 14 2 3 18 19 23 25 16 17 ! T(n) " T n/2 # $ ( )+T n/2 % & ( )+ O(n) ' T(n) = O(nlogn) 6 3 2 2 0 0 to maintain sorted invariant 20 Counting Inversions: Implementation Pre-condition. [Merge-and-Count] A and B are sorted. Post-condition. [Sort-and-Count] L is sorted. Sort-and-Count(L) { if list L has one element return 0 and the list L Divide the list into two halves A and B (rA, A) ' Sort-and-Count(A) (rB, B) ' Sort-and-Count(B) (rB, L) ' Merge-and-Count(A, B) return r = rA + rB + r and the sorted list L }
  • 6.
    Algorithm Design byÉva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley 5.4 Closest Pair of Points 22 Closest Pair of Points 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 &(n2) comparisons. 1-D version. O(n log n) easy if points are on a line. Assumption. No two points have same x coordinate. to make presentation cleaner fast closest pair inspired fast algorithms for these problems 23 Closest Pair of Points: First Attempt Divide. Sub-divide region into 4 quadrants. L 24 Closest Pair of Points: First Attempt Divide. Sub-divide region into 4 quadrants. Obstacle. Impossible to ensure n/4 points in each piece. L
  • 7.
    25 Closest Pair ofPoints Algorithm. ! Divide: draw vertical line L so that roughly !n points on each side. L 26 Closest Pair of Points Algorithm. ! Divide: draw vertical line L so that roughly !n points on each side. ! Conquer: find closest pair in each side recursively. 12 21 L 27 Closest Pair of Points Algorithm. ! Divide: draw vertical line L so that roughly !n points on each side. ! Conquer: find closest pair in each side recursively. ! Combine: find closest pair with one point in each side. ! Return best of 3 solutions. 12 21 8 L seems like &(n2 ) 28 Closest Pair of Points Find closest pair with one point in each side, assuming that distance < (. 12 21 ( = min(12, 21) L
  • 8.
    29 Closest Pair ofPoints Find closest pair with one point in each side, assuming that distance < (. ! Observation: only need to consider points within ( of line L. 12 21 ( L ( = min(12, 21) 30 12 21 1 2 3 4 5 6 7 ( Closest Pair of Points Find closest pair with one point in each side, assuming that distance < (. ! Observation: only need to consider points within ( of line L. ! Sort points in 2(-strip by their y coordinate. L ( = min(12, 21) 31 12 21 1 2 3 4 5 6 7 ( Closest Pair of Points Find closest pair with one point in each side, assuming that distance < (. ! Observation: only need to consider points within ( of line L. ! Sort points in 2(-strip by their y coordinate. ! Only check distances of those within 11 positions in sorted list! L ( = min(12, 21) 32 Closest Pair of Points Def. Let si be the point in the 2(-strip, with the ith smallest y-coordinate. Claim. If |i – j| ) 12, then the distance between si and sj is at least (. Pf. ! No two points lie in same !(-by-!( box. ! Two points at least 2 rows apart have distance ) 2(!(). ! Fact. Still true if we replace 12 with 7. ( 27 29 30 31 28 26 25 ( !( 2 rows !( !( 39 i j
  • 9.
    33 Closest Pair Algorithm Closest-Pair(p1,…, pn) { 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 by y-coordinate. Scan points in y-order and compare distance between each point and next 11 neighbors. If any of these distances is less than (, update (. return (. } O(n log n) 2T(n / 2) O(n) O(n log n) O(n) 34 Closest Pair of Points: Analysis Running time. Q. Can we achieve O(n log n)? A. Yes. Don't sort points in strip from scratch each time. ! Each recursive returns two lists: all points sorted by y coordinate, and all points sorted by x coordinate. ! Sort by merging two pre-sorted lists. ! T(n) " 2T n/2 ( ) + O(n) # T(n) = O(n logn) ! T(n) " 2T n/2 ( ) + O(n logn) # T(n) = O(n log2 n) Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley 5.5 Integer Multiplication 36 Integer Arithmetic Add. Given two n-digit integers a and b, compute a + b. ! O(n) bit operations. Multiply. Given two n-digit integers a and b, compute a " b. ! Brute force solution: &(n2) bit operations. 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 1 1 1 1 1 0 0 * 1 0 1 1 1 1 1 0 1 + 0 1 0 1 1 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 Add Multiply
  • 10.
    37 To multiply twon-digit integers: ! Multiply four !n-digit integers. ! Add two !n-digit integers, and shift to obtain result. Divide-and-Conquer Multiplication: Warmup ! T(n) = 4T n/2 ( ) recursive calls 1 2 4 3 4 + "(n) add, shift 123 # T(n) = "(n2 ) ! x = 2n /2 " x1 + x0 y = 2n /2 " y1 + y0 xy = 2n /2 " x1 + x0 ( ) 2n /2 " y1 + y0 ( ) = 2n " x1 y1 + 2n /2 " x1 y0 + x0 y1 ( ) + x0 y0 assumes n is a power of 2 38 To multiply two n-digit integers: ! Add two !n digit integers. ! Multiply three !n-digit integers. ! Add, subtract, and shift !n-digit integers to obtain result. Theorem. [Karatsuba-Ofman, 1962] Can multiply two n-digit integers in O(n1.585) bit operations. Karatsuba Multiplication ! x = 2n /2 " x1 + x0 y = 2n /2 " y1 + y0 xy = 2n " x1 y1 + 2n /2 " x1 y0 + x0 y1 ( ) + x0 y0 = 2n " x1 y1 + 2n /2 " (x1 + x0 )(y1 + y0 ) # x1 y1 # x0 y0 ( ) + x0 y0 ! T(n) " T n/2 # $ ( ) + T n/2 % & ( ) + T 1+ n/2 % & ( ) recursive calls 1 2 4444444 3 4444444 + '(n) add, subtract, shift 1 2 4 3 4 ( T(n) = O(n log 2 3 ) = O(n1.585 ) A B C A C 39 Karatsuba: Recursion Tree ! T(n) = 0 if n =1 3T(n/2) + n otherwise " # $ n 3(n/2) 9(n/4) 3k (n / 2k) 3 lg n (2) . . . . . . T(n) T(n/2) T(n/4) T(n/4) T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(2) T(n / 2k) T(n/4) T(n/2) T(n/4) T(n/4) T(n/4) T(n/2) T(n/4) T(n/4) T(n/4) . . . . . . ! T(n) = n 3 2 ( ) k k=0 log2 n " = 3 2 ( ) 1+log2 n #1 3 2 #1 = 3nlog2 3 # 2 Algorithm Design by Éva Tardos and Jon Kleinberg • Slides by Kevin Wayne • Copyright © 2004 Addison Wesley Matrix Multiplication
  • 11.
    41 Matrix multiplication. Giventwo n-by-n matrices A and B, compute C = AB. Brute force. &(n3) arithmetic operations. Fundamental question. Can we improve upon brute force? Matrix Multiplication ! cij = aik bkj k=1 n " ! c11 c12 L c1n c21 c22 L c2n M M O M cn1 cn2 L cnn " # $ $ $ $ % & ' ' ' ' = a11 a12 L a1n a21 a22 L a2n M M O M an1 an2 L ann " # $ $ $ $ % & ' ' ' ' ( b11 b12 L b1n b21 b22 L b2n M M O M bn1 bn2 L bnn " # $ $ $ $ % & ' ' ' ' 42 Matrix Multiplication: Warmup Divide-and-conquer. ! Divide: partition A and B into !n-by-!n blocks. ! Conquer: multiply 8 !n-by-!n recursively. ! Combine: add appropriate products using 4 matrix additions. ! C11 = A11 " B11 ( ) + A12 " B21 ( ) C12 = A11 " B12 ( ) + A12 " B22 ( ) C21 = A21 " B11 ( ) + A22 " B21 ( ) C22 = A21 " B12 ( ) + A22 " B22 ( ) ! C11 C12 C21 C22 " # $ % & ' = A11 A12 A21 A22 " # $ % & ' ( B11 B12 B21 B22 " # $ % & ' ! T(n) = 8T n/2 ( ) recursive calls 1 2 4 3 4 + "(n2 ) add, form submatrices 1 2 44 3 44 # T(n) = "(n3 ) 43 Matrix Multiplication: Key Idea Key idea. multiply 2-by-2 block matrices with only 7 multiplications. ! 7 multiplications. ! 18 = 10 + 8 additions (or subtractions). ! P 1 = A11 " (B12 # B22 ) P2 = (A11 + A12 ) " B22 P3 = (A21 + A22 ) " B11 P4 = A22 " (B21 # B11) P5 = (A11 + A22 ) " (B11 + B22 ) P6 = (A12 # A22 ) " (B21 + B22 ) P7 = (A11 # A21) " (B11 + B12 ) ! C11 = P5 + P4 " P2 + P6 C12 = P 1 + P2 C21 = P3 + P4 C22 = P5 + P 1 " P3 " P7 ! C11 C12 C21 C22 " # $ % & ' = A11 A12 A21 A22 " # $ % & ' ( B11 B12 B21 B22 " # $ % & ' 44 Fast Matrix Multiplication Fast matrix multiplication. (Strassen, 1969) ! Divide: partition A and B into !n-by-!n blocks. ! Compute: 14 !n-by-!n matrices via 10 matrix additions. ! Conquer: multiply 7 !n-by-!n matrices recursively. ! Combine: 7 products into 4 terms using 8 matrix additions. Analysis. ! Assume n is a power of 2. ! T(n) = # arithmetic operations. ! T(n) = 7T n/2 ( ) recursive calls 1 2 4 3 4 + "(n2 ) add, subtract 1 2 4 3 4 # T(n) = "(nlog2 7 ) = O(n2.81 )
  • 12.
    45 Fast Matrix Multiplicationin Practice Implementation issues. ! Sparsity. ! Caching effects. ! Numerical stability. ! Odd matrix dimensions. ! Crossover to classical algorithm around n = 128. Common misperception: "Strassen is only a theoretical curiosity." ! Advanced Computation Group at Apple Computer reports 8x speedup on G4 Velocity Engine when n ~ 2,500. ! Range of instances where it's useful is a subject of controversy. Remark. Can "Strassenize" Ax=b, determinant, eigenvalues, and other matrix ops. 46 Fast Matrix Multiplication in Theory Q. Multiply two 2-by-2 matrices with only 7 scalar multiplications? A. Yes! [Strassen, 1969] Q. Multiply two 2-by-2 matrices with only 6 scalar multiplications? A. Impossible. [Hopcroft and Kerr, 1971] Q. Two 3-by-3 matrices with only 21 scalar multiplications? A. Also impossible. Q. Two 70-by-70 matrices with only 143,640 scalar multiplications? A. Yes! [Pan, 1980] Decimal wars. ! December, 1979: O(n2.521813). ! January, 1980: O(n2.521801). ! "(nlog3 21 ) = O(n 2.77 ) ! "(nlog70 143640 ) = O(n 2.80 ) ! "(n log2 6 ) = O(n 2.59 ) ! "(nlog2 7 ) = O(n 2.81 ) 47 Fast Matrix Multiplication in Theory Best known. O(n2.376) [Coppersmith-Winograd, 1987.] Conjecture. O(n2+*) for any * > 0. Caveat. Theoretical improvements to Strassen are progressively less practical.