~cs341 trevor.brown@uwaterloo

35
https://www.student.cs.uwaterloo.ca/~cs341 [email protected]

Upload: others

Post on 26-Feb-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 2: ~cs341 trevor.brown@uwaterloo

Page 3: ~cs341 trevor.brown@uwaterloo
Page 4: ~cs341 trevor.brown@uwaterloo

Page 5: ~cs341 trevor.brown@uwaterloo

Page 6: ~cs341 trevor.brown@uwaterloo

Page 7: ~cs341 trevor.brown@uwaterloo

Page 8: ~cs341 trevor.brown@uwaterloo
Page 9: ~cs341 trevor.brown@uwaterloo

WHY IS CS341 IMPORTANT FOR YOU?

Page 10: ~cs341 trevor.brown@uwaterloo

ALGORITHM

desired output

COMPUTATIONAL PROBLEM

procedureCorrectness?

Page 11: ~cs341 trevor.brown@uwaterloo

EXAMPLES

Sorting Matrix Multiplication Traveling Salesman Problem

Input An array of integers

(in arbitrary order)

Two n x n matrices A, B A set S of cities, and distances

between each pair of cities

Desired output Same array of integers

in increasing order

A matrix C=A*B Shortest possible path that visits

each city, and returns to the

origin city

2 1 5

3 2 2

1 4 6

1 3 4

2 1 1

3 7 2

1919 41 18

13 25 19

27 49 20

x

=

c1

c2

c3

c4c5

2

9

Page 12: ~cs341 trevor.brown@uwaterloo

ANALYSIS

• time

• space

• Analysis

Page 13: ~cs341 trevor.brown@uwaterloo

TAXONOMY

This course mainly covers:

Serial, deterministic, exact

Page 14: ~cs341 trevor.brown@uwaterloo

TRACTABILITY:

Page 15: ~cs341 trevor.brown@uwaterloo

Fundamental (& Fast) Algorithms for Tractable Problems

Common Algorithm Design Paradigms

Mathematical Tools to Analyze Algorithms Intractable Problems

• MergeSort

• Strassen’s MM

• BFS/DFS

• Dijkstra’s SSSP

• MST (Kruskal or Prim)

• Floyd Warshall APSP

• Topological Sort

• …

• Big-oh notation

• Recursion Tree

• Master method

• Substitution method

• Exchange Arguments

• Greedy-stays-ahead Arguments

• P vs NP

• Poly-time Reductions

• Undecidability

• Divide-and-Conquer

• Greedy

• Dynamic Programming

• Exhaustive search / brute force

Topics to Cover

Page 16: ~cs341 trevor.brown@uwaterloo

CS341: Before → After

1. Fundamental Algorithms

2. Fundamental Design Paradigms

3. Tractability/Intractability

Math Techniques for

Algorithm Analysis

Page 17: ~cs341 trevor.brown@uwaterloo
Page 18: ~cs341 trevor.brown@uwaterloo

1 7 4 0 2 1 3 1Example 1 Solution: 19

(take all of A[1..8])Array index 1 2 3 4 5 6 7 8

-1 -7 -4 -1 -2 -1 -3 -1Example 2Index 1 2 3 4 5 6 7 8

Solution: 0

(take no elements of A)

1 -7 4 0 2 -1 3 -1Example 3Index 1 2 3 4 5 6 7 8

Solution: 8

(take A[3..7])

Page 19: ~cs341 trevor.brown@uwaterloo

1 -7 4 0 2 -1 3 -1

𝒊 𝒋

𝒌

Try all combinations of 𝒊, 𝒋And for each combination,

sum over 𝒌 = 𝒊 . . 𝒋

Design: brute force

Page 20: ~cs341 trevor.brown@uwaterloo

Avoid summing over 𝒌 = 𝒊 . . 𝒋

Design: slightly better

brute force

Page 21: ~cs341 trevor.brown@uwaterloo

9 -3 4 -5 -2 -5 3 -1

9 -3 4 -5 -2 -5 3 -1

A

L RCase 1: optimal sol’n

is entirely in L

Case 2: optimal sol’n

is entirely in R

1 -7 4 0 2 -1 3 0

1 -7 4 0 2 -1 3 0

A

L RCase 3: optimal sol’n

crosses the partition

Page 22: ~cs341 trevor.brown@uwaterloo

Let’s see how…

1 -7 4 0 2 -1 3 0AFind: maximum

subarray going over

the middle partition

Let’s see how…

Find 𝒊 that maximizes

the sum over 𝒊 . . . 𝒏/𝟐

Index 1 2 … n/2 n/2+1 … n

Find 𝒋 that maximizes the

sum over 𝒏

𝟐+ 𝟏 . . . 𝒋

𝒊 𝒋We can prove 𝐀[𝒊… 𝒋]

is the maximum

subarray going over the middle partition!

Page 23: ~cs341 trevor.brown@uwaterloo

• partition

But both are

impossible!

A

𝑖 𝑗

𝑖′ 𝑗′

𝐿 𝑅

𝐿′ 𝑅′This sum is bigger

So either ∑𝐿′ > ∑𝐿or ∑𝑅′ > ∑𝑅

Page 24: ~cs341 trevor.brown@uwaterloo

AIndex 1 2 … n/2 𝑛

2+ 1 … n

9 -3 4 -5 -2 -5 3 -1

9 -3 4 -5 -2 -5 3 -1

A

L R

maxL = 10

9 -3 4 -5 -2 -5 3 -1

maxR = 3

maxI = 5 maxJ = 0

maxM = maxI + maxJ = 5

Return max( 10, 3, 5 ) = 10

Page 25: ~cs341 trevor.brown@uwaterloo

AIndex 1 2 … n/2 𝑛

2+ 1 … n

1 -7 4 0 2 -1 3 0

1 -7 4 0 2 -1 3 0

A

L R

maxL = 4

1 -7 4 0 2 -1 3 0

maxR = 4

maxI = 4maxJ = 4

maxM = maxI + maxJ = 8

Return max( 4, 4, 8 ) = 8

Page 26: ~cs341 trevor.brown@uwaterloo

How do we analyze this running time?

Need new mathematical techniques!

Recurrence relations, recursion tree

methods, master theorem…

This result is really quite good…

but can we do asymptotically better?

Page 27: ~cs341 trevor.brown@uwaterloo

• 𝑨 1. . 𝒋include

• 𝑨 𝟏. . 𝒋exclude

Design: dynamic programming

Page 28: ~cs341 trevor.brown@uwaterloo

“Max sum in A[1..1] if we

must include A[1]”

If including 𝐴[𝑗], there are two possibilities: either

start a new sum of consecutive entries at 𝐴[𝑗], or

extend the best sum that ends at 𝐴[𝑗 − 1]

If excluding 𝐴[𝑗], the best we

can do in 𝐴[1. . 𝑗] is simply the

best we can do in 𝐴[1. . 𝑗 − 1]

Page 29: ~cs341 trevor.brown@uwaterloo

• Base case: 𝒊𝒏𝒄𝒍𝒖𝒅𝒆 𝟏 = 𝑨[𝟏]

• 𝒊𝒏𝒄𝒍𝒖𝒅𝒆 𝒋 = 𝒎𝒂𝒙 𝑨 𝒋 , 𝑨 𝒋 + 𝒊𝒏𝒄𝒍𝒖𝒅𝒆 𝒋 − 𝟏

Example: computing these recurrence relations with two arrays

𝑖𝑛𝑐𝑙𝑢𝑑𝑒(1) = “max solution in

𝐴[1. . 1] that includes 𝐴[1]…”

1 -7 4 0 2 -1 3 -9A

? ? ? ? ? ? ? ?include

? ? ? ? ? ? ? ?exclude

1 ? ? ? ? ? ? ?1 -6 ? ? ? ? ? ?

Index 1 2 3 4 5 6 7 8

𝑖𝑛𝑐𝑙𝑢𝑑𝑒(2) = “max solution in

𝐴[1. . 2] that includes 𝐴[2]…”

𝑖𝑛𝑐𝑙𝑢𝑑𝑒(3) = “max solution in

𝐴[1. . 3] that includes 𝐴[3]…”

𝑒𝑥𝑐𝑙𝑢𝑑𝑒(1) = “max solution in

𝐴[1. . 1] that excludes 𝐴[1]…”

1 -6 4 ? ? ? ? ?1 -6 4 4 ? ? ? ?1 -6 4 4 6 ? ? ?1 -6 4 4 6 5 ? ?1 -6 4 4 6 5 8 ?1 -6 4 4 6 5 8 -1

0 ? ? ? ? ? ? ?𝑒𝑥𝑐𝑙𝑢𝑑𝑒(2) = “max solution in

𝐴[1. . 2] that excludes 𝐴[2]…”0 1 ? ? ? ? ? ?

𝑒𝑥𝑐𝑙𝑢𝑑𝑒(3) = “max solution in

𝐴[1. . 3] that excludes 𝐴[3]…”

0 1 1 ? ? ? ? ?0 1 1 4 ? ? ? ?0 1 1 4 4 ? ? ?0 1 1 4 4 6 ? ?0 1 1 4 4 6 6 ?0 1 1 4 4 6 6 8

Full solution is max

of these two: 8

Full solution is max

of these two: 8

Recall the definition:

Page 30: ~cs341 trevor.brown@uwaterloo

• Base case: 𝑒𝑥𝑐𝑙𝑢𝑑𝑒 1 = 0 ; 𝑖𝑛𝑐𝑙𝑢𝑑𝑒 1 = 𝐴[1]

• Recursive case:

• 𝑒𝑥𝑐𝑙𝑢𝑑𝑒 𝑗 = max 𝑖𝑛𝑐𝑙𝑢𝑑𝑒 𝑗 − 1 , 𝑒𝑥𝑐𝑙𝑢𝑑𝑒 𝑗 − 1

• 𝑖𝑛𝑐𝑙𝑢𝑑𝑒 𝑗 = 𝑚𝑎𝑥 𝐴 𝑗 , 𝐴 𝑗 + 𝑖𝑛𝑐𝑙𝑢𝑑𝑒 𝑗 − 1

Let’s turn these

recurrences

into code…

Recall:

Do we actually need these

entire arrays? Only really care

about the last entry of each…

Page 31: ~cs341 trevor.brown@uwaterloo

At this time, include contains

exactly “include[j-1]”

And similarly for

exclude…

And these contain exactly

“exclude[n]” and “include[n]”

Same running time, but only O(1)

space (besides the input array)

Page 32: ~cs341 trevor.brown@uwaterloo

Page 33: ~cs341 trevor.brown@uwaterloo
Page 34: ~cs341 trevor.brown@uwaterloo

Pentium II (circa 1997)AMD Threadripper 3970x (2020)

N Sol.4 Sol.3 Sol.2 Sol.1

100 0 0 0 0

1,000 0 0 0 0.12

10,000 0 0 0.036 2 minutes

100,000 0 0.002 3.582 33 hours

1M 0.001 0.017 6 minutes 4 years

10M 0.012 0.195 12 hours 3700 years

100M 0.112 2.168 50 days 3.7M years

1 billion 1.124 24.57 1.5 years > age of life

10 billion 19.15 5 minutes 150 years > age of universe

Page 35: ~cs341 trevor.brown@uwaterloo

• youtu.be/PcSoLwFisaw