1 of 56

CS61B

Lecture 28: Decomposition and Reductions

  • Topological Sorting
  • Shortest Paths on DAGs
  • Longest Paths
  • Reductions

2 of 56

Our Many Achievements

We’ve covered a tremendous amount of material so far.

  • Programming practice: Java, IntelliJ, JUnit, correctness and timing tests, designing your own data structures that compose other data structures together.
  • Asymptotic analysis.
  • Tons of different abstract data types and their implementations, e.g. BST to implement a map, heaps to implement a PQ.
  • Algorithms on graphs, e.g. shortest paths, minimum spanning trees, etc.

3 of 56

What is the Point of All of This?

A question worth pondering: Why this specific body of knowledge?

  • Why is everyone pursuing it?
  • Why do companies want to pursue people who have it?

Any thoughts?

  • Efficient algorithms can improve performance of code, solve problems that are otherwise intractable.
    • These problems are real world problems.
  • Shows an understanding of how computers work. Shibboleth of understanding of computing.
  • For fun.
  • Provides a common platform for interviewing for technical knowledge.
    • You now have a huge toolset you can use to solve problems.
  • I really think we’re changing the way you think.

4 of 56

Goals of Today

Today, to practice our problem solving skills, we’ll work through some very challenging A-level problems using the tools we’ve already learned about.

Will focus on graphs, but the ideas today are more general.

5 of 56

Graph Problems So Far

Problem

Problem Description

Solution

Efficiency

paths

Find a path from s to every reachable vertex.

DepthFirstPaths.java

Demo

O(V+E) time

Θ(V) space

shortest paths

Find the shortest path from s to every reachable vertex.

BreadthFirstPaths.java

Demo

O(V+E) time

Θ(V) space

shortest weighted paths

Find the shortest path, considering weights, from s to every reachable vertex.

DijkstrasSP.java

Demo

O(E log V) time

Θ(V) space

shortest weighted path

Find the shortest path, consider weights, from s to some target vertex

A*: Same as Dijkstra’s but with h(v, goal) added to priority of each vertex.

Demo

Time depends on heuristic.

Θ(V) space

6 of 56

Graph Problems So Far

Problem

Problem Description

Solution

Efficiency

minimum spanning tree

Find a minimum spanning tree.

LazyPrimMST.java

Demo

O(???) time

Θ(???) space

minimum spanning tree

Find a minimum spanning tree.

PrimMST.java

Demo

O(E log V) time

Θ(V) space

minimum spanning tree

Find a minimum spanning tree.

KruskalMST.java

Demo

O(E log E) time

Θ(E) space

7 of 56

Topological Sorting

8 of 56

Topological Sort

Suppose we have tasks 0 through 7, where an arrow from v to w indicates that v must happen before w.

  • What algorithm do we use to find a valid ordering for these tasks?
  • Valid orderings include: [0, 2, 1, 3, 5, 4, 7, 6], [2, 0, 3, 5, 1, 4, 6, 7], …

Any suggestions on where we’d start?

1

2

3

4

5

6

7

0

9 of 56

Topological Sort

Suppose we have tasks 0 through 7, where an arrow from v to w indicates that v must happen before w.

  • What algorithm do we use to find a valid ordering for these tasks?
  • Valid orderings include: [0, 2, 1, 3, 5, 4, 7, 6], [2, 0, 3, 5, 1, 4, 6, 7], …

Any suggestions on where we’d start?

1

2

3

4

5

6

7

0

Start at 2:

  • Go as far as you can get (DFS).
    • 2, 3, 4, 7, 5, 6

10 of 56

Topological Sort

Suppose we have tasks 0 through 7, where an arrow from v to w indicates that v must happen before w.

  • What algorithm do we use to find a valid ordering for these tasks?
  • Valid orderings include: [0, 2, 1, 3, 5, 4, 7, 6], [2, 0, 3, 5, 1, 4, 6, 7], …

Any suggestions on where we’d start?

1

2

3

4

5

6

7

0

Multiple breadth first searches from vertices of in-degree 0.

  • Great places to start.

[0/2, 1/3/5, 4/6, 7]

[0/2/8, 1/3/5/7,

8

11 of 56

Solution (Spoiler Alert)

Perform a DFS traversal from every vertex with indegree 0, NOT clearing markings in between traversals.

  • Record DFS postorder in a list.
  • Topological ordering is given by the reverse of that list (reverse postorder).

0

1

2

3

4

5

6

7

12 of 56

Topological Sort (Demo 1/2)

0

1

2

3

4

5

6

7

Postorder: []

*

0

1

2

3

4

5

6

7

Postorder: []

*

0

1

2

3

4

5

6

7

Postorder: []

*

0

1

2

3

4

5

6

7

Postorder: [7]

*

0

1

2

3

4

5

6

7

Postorder: [7, 4]

*

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1]

*

0

1

2

3

4

5

6

7

*

Postorder: [7, 4, 1]

0

1

2

3

4

5

6

7

*

Postorder: [7, 4, 1, 3]

13 of 56

Topological Sort (Demo 2/2)

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1, 3]

*

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1, 3, 0]

*

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1, 3, 0]

*

*

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1, 3, 0]

*

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1, 3, 0, 6]

*

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1, 3, 0, 6, 5]

*

0

1

2

3

4

5

6

7

Postorder: [7, 4, 1, 3, 0, 6, 5, 2]

14 of 56

Solution (Spoiler Alert)

Perform a DFS traversal from every vertex with indegree 0, NOT clearing markings in between traversals.

  • Record DFS postorder in a list: [7, 4, 1, 3, 0, 6, 5, 2]
  • Topological ordering is given by the reverse of that list (reverse postorder):
    • [2, 5, 6, 0, 3, 1, 4, 7]

0

1

2

3

4

5

6

7

15 of 56

Topological Sort

The reason it’s called topological sort: Can think of this process as sorting our nodes so they appear in an order consistent with edges, e.g. [2, 5, 6, 0, 3, 1, 4, 7]

  • When nodes are sorted in diagram, arrows all point rightwards.

0

1

2

3

4

5

6

7

0

1

2

3

4

5

6

7

16 of 56

Depth First Search

Be aware, that when people say “Depth First Search”, they sometimes mean with restarts, and they sometimes mean without.

For example, when we did DepthFirstPaths for reachability, we did not restart.

For Topological Sort, we restarted from every vertex with indegree 0.

17 of 56

Question

What is the runtime to find all vertices of indegree 0?

  • Interesting thing I did not tell you: You don’t have to.

Another better topological sort algorithm:

  • Run DFS from an arbitrary vertex.
  • If not all marked, pick an unmarked vertex and do it again.
  • Repeat until done.

18 of 56

Test Your Understanding

Give a topological ordering for the graph below (a.k.a. topological sort).

1

3

2

4

5

0

s

4

1

2

2

6

1

1

3

19 of 56

Test Your Understanding

Give a topological ordering for the graph below (a.k.a. topological sort)

  • 0, 3, 1, 2, 4, 5 (because DFS postorder was 542130)

1

3

2

4

5

0

s

4

1

2

2

6

1

1

3

1

3

2

4

5

0

s

4

2

6

1

1

2

3

1

Recall that we can think of topological sort as an ordering of “tasks”.

20 of 56

Directed Acyclic Graphs

A topological sort only exists if the graph is a directed acyclic graph (DAG).

  • For the graph below, there is NO possible ordering where all arrows are respected.

DAGs appear in many real world applications, and there are many graph algorithms that only work on DAGs.

0

1

2

3

4

5

6

7

21 of 56

Graph Problems

Problem

Problem Description

Solution

Efficiency

topological sort

Find an ordering of vertices that respects edges of our DAG.

Demo

Topological.java

O(V+E) time

Θ(V) space

22 of 56

Shortest Paths on DAGs

23 of 56

Shortest Paths Warmup

What is the shortest paths tree for the graph below, using s as the source? In what order will Dijkstra’s algorithm visit the vertices?

1

3

2

4

5

0

s

4

1

2

2

1

1

3

Graph from Algorithms, by Vazirani/Papadimitriou

6

24 of 56

Shortest Paths Warmup

What is the shortest paths tree for the graph below, using s as the source? In what order will Dijkstra’s algorithm visit the vertices?

  • 0, 1, 3, 4, 5, 2

1

3

2

4

5

0

s

4

1

2

2

1

1

3

1

2

5

7

6

6

25 of 56

Shortest Paths Warmup

If we allow negative edges, Dijkstra’s algorithm can fail.

  • For example, below we see Dijkstra’s just before vertex 2 is visited.

1

3

2

4

5

0

s

25

1

1

1

6

1

-20

1

1

1

2

7

3

26 of 56

Shortest Paths Warmup

If we allow negative edges, Dijkstra’s algorithm can fail.

  • For example, below we see Dijkstra’s just before vertex 2 is visited.
  • Relaxation on 4 succeeds, but distance to 5 will never be updated.

1

3

2

4

5

0

s

25

1

1

1

6

1

-20

1

1

1

2

7

3

-13

27 of 56

Shortest Paths Warmup

If we allow negative edges, Dijkstra’s algorithm can fail.

  • For example, below we see Dijkstra’s just before vertex 2 is visited.
  • Relaxation on 4 succeeds, but distance to 5 will never be updated.

1

3

2

4

5

0

s

25

1

1

1

6

1

-20

1

1

1

7

3

-13

distTo is wrong!

28 of 56

Challenge

Try to come up with an algorithm for shortest paths on a DAG that works even if there are negative edges.

  • Hint: You should still use the “relax” operation as a basic building block.

1

3

2

4

5

0

s

25

1

1

1

6

1

-20

1

29 of 56

Challenge

Try to come up with an algorithm for shortest paths on a DAG that works even if there are negative edges.

  • Hint: You should still use the “relax” operation as a basic building block.

One simple idea: Visit vertices in topological order.

  • On each visit, relax all outgoing edges.
  • Each vertex is visited only when all possible info about it has been used!

1

3

2

4

5

0

s

25

1

1

1

6

1

-20

1

30 of 56

The DAG SPT Algorithm: Relax in Topological Order

First: We have to find a topological order, e.g. 031245. Runtime is O(V + E).

1

3

2

4

5

0

s

25

1

1

1

6

1

-20

1

1

3

2

4

5

0

s

1

1

6

1

-20

1

1

1

31 of 56

The DAG SPT Algorithm: Relax in Topological Order

Second: We have to visit all the vertices in topological order, relaxing all edges as we go. Let’s see a demo [Link].

1

3

2

4

5

0

s

1

1

6

1

-20

1

1

1

32 of 56

The DAG SPT Algorithm: Relax in Topological Order

Second: We have to visit all the vertices in topological order, relaxing all edges as we go. Let’s see a demo [Link].

  • Runtime for step 2 is also O(V + E).

Quick note: In office hours, someone asked, why isn’t it O(V*E), since we’re relaxing all edges from each vertex.

  • Keep in mind that E is the TOTAL number of edges in the entire graph, not the number of edges per vertex, e.g. for graph below E = 8.

1

3

2

4

5

0

s

1

1

6

1

-20

1

1

1

33 of 56

Graph Problems

Note: The DAG shortest paths solution uses the topological sort solution as a subroutine.

Problem

Problem Description

Solution

Efficiency

topological sort

Find an ordering of vertices that respects edges of our DAG.

Demo

Code: Topological.java

O(V+E) time

Θ(V) space

DAG shortest paths

Find a shortest paths tree on a DAG.

O(V+E) time

Θ(V) space

34 of 56

Longest Paths

35 of 56

The Longest Paths Problem

Consider the problem of finding the longest path tree (LPT) from s to every other vertex. The path must be simple (no cycles!).

1

2

3

4

5

6

0

s

5

2

1

15

3

2

11

5

1

1

4

1

36 of 56

The Longest Paths Problem

Consider the problem of finding the longest path tree (LPT) from s to every other vertex. The path must be simple (no cycles!).

Some surprising facts:

  • Best known algorithm is exponential (extremely bad).
  • Perhaps the most important unsolved problem in mathematics.

1

2

3

4

5

6

0

s

5

2

1

15

3

2

11

5

1

1

4

1

2

13

7

15

22

20

37 of 56

The Longest Paths Problem on DAGs

Difficult challenge for you.

  • Solve the LPT problem on a directed acyclic graph.
  • Algorithm must be O(E + V) runtime.

1

3

2

4

5

0

s

4

1

2

2

6

1

1

3

6

2

12

14

13

0

38 of 56

The Longest Paths Problem on DAGs

DAG LPT solution for graph G:

  • Form a new copy of the graph G’ with signs of all edge weights flipped.
  • Run DAGSPT on G’ yielding result X.
  • Flip signs of all values in X.distTo. X.edgeTo is already correct.

1

3

2

4

5

0

s

-4

-1

-2

-2

-6

-1

-1

-3

-1

-2

-12

-14

-13

0

39 of 56

The Longest Paths Problem on DAGs

DAG LPT solution for graph G:

  • Form a new copy of the graph G’ with signs of all edge weights flipped.
  • Run DAGSPT on G’ yielding result X.
  • Flip signs of all values in X.distTo. X.edgeTo is already correct.

1

3

2

4

5

0

s

1

2

12

14

13

0

40 of 56

A Note on “Mathematical Maturity”

If you have a very high degree of so-called “mathematical maturity”, this algorithm should seem plainly correct.

There’s no real need to prove anything or show demos.

  • We know DAG SPT works on graphs with negative edge weights.
  • We also know that -(-a + -b + -c + -d) = a + b + c + d.

Part of what you’re learning in your intense technical education here at Berkeley is mathematical maturity. Hasn’t been a major focus in 61B, but will be in other courses like 16A, 16B, 70, 170, ...

41 of 56

Highly Recommended Exercise For Later

Play around with the longest paths problem and convince yourself that it is actually very hard.

  • Try to develop an intuition for why it is hard. Even better if you try to put it into english.
  • Try searching the internet for “why longest paths hard” or similar if you’re having trouble really pinning down what’s so hard about it.

42 of 56

Graph Problems

Problem

Problem Description

Solution

Efficiency

topological sort

Find an ordering of vertices that respects edges of our DAG.

Demo

Code: Topological.java

O(V+E) time

Θ(V) space

DAG shortest paths

Find a shortest paths tree on a DAG.

O(V+E) time

Θ(V) space

longest paths

Find a longest paths tree on a graph.

No known efficient solution.

O(???) time

O(???) space

DAG longest paths

Find a longest paths tree on a DAG.

Flip signs, run DAG SPT, flip signs again.

O(V+E) time

Θ(V) space

43 of 56

Reduction (170 Preview)

44 of 56

DAG Longest Paths

The problem solving we just used probably felt a little different than usual:

  • Given a graph G, we created a new graph G’ and fed it to a related (but different) algorithm, and then interpreted the result.

G

DAG-LPT

Preprocess

DAG-SPT

G’

SPT of G’

Postprocess

LPT of G

45 of 56

Reduction

This process is known as reduction.

  • Since DAG-SPT can be used to solve DAG-LPT, we say that “DAG-LPT reduces to DAG-SPT”.

G

DAG-LPT

Preprocess

DAG-SPT

G’

SPT of G’

Postprocess

LPT of G

46 of 56

Reduction Analogy

This process is known as reduction.

  • Since DAG-SPT can be used to DAG-LPT, we say that “DAG-LPT reduces to DAG-SPT”.

As a real-world analog, suppose we want to climb a hill. There are many ways to do this:

  • “Climbing a hill” reduces to “riding a ski lift.”
  • “Climbing a hill” reduces to “being shot out of a cannon.”
  • “Climbing a hill” reduces to “riding a bike up the hill.”

47 of 56

Reduction Definition (Informal)

This process is known as reduction.

  • Since DAG-SPT can be used to DAG-LPT, we say that “DAG-LPT reduces to DAG-SPT”.

Algorithms by Dasgupta, Papadimitriou, and Vazirani defines a reduction informally as follows:

  • “If any subroutine for task Q can be used to solve P, we say P reduces to Q.”

Can also define the idea formally, but way beyond the scope of our class.

  • If you’re curious, you can read more about Karp and Cook reductions.�

48 of 56

Reduction is More Than Sign Flipping

Let’s see a richer example of a reduction.

49 of 56

The Independent Set Problem

An independent set is a set of vertices in which no two vertices are adjacent.

The Independent-set Problem:

  • Does there exist an independent set of size k?
  • i.e. color k vertices red, such that none touch.

Example for the graph on the right and k = 9

  • For this particular graph, N=24.

50 of 56

The 3SAT Problem

3SAT: Given a boolean formula, does there exist a truth value for boolean variables that obeys a set of 3-variable disjunctive constraints?

3 variable disjunctive constraint�

Example: (x1 || x2 || !x3) && (x1 || !x1 || x1) && (x2 || x3 || x4)

  • Solution: x1 = true, x2 = true, x3 = true, x4 = false

51 of 56

3SAT Reduces to Independent Set

Proposition: 3SAT reduces to Independent-set.

Proof. Given an instance ϕ of 3-SAT, create an instance G of Independent-set:

  • For each clause in ϕ, create 3 vertices in a triangle.
  • Add an edge between each literal and its negation (can’t both be true in 3SAT means can’t be in same set in Independent-set)

Φ = (x1 or x2 or x3) and (! x1 or ! x2 or x4) and (! x1 or x3 or ! x4) and (x1 or x3 or x4)

x2

x1

x3

! x2

x4

! x1

! x4

x3

! x1

x3

x1

x4

k = number of variables = 4

52 of 56

3SAT Reduces to Independent Set

Find an independent set of size k = 4. Use this set to generate a solution to the 3SAT problem.

  • Reminder: An independent set of size 4 is a set of 4 (red) vertices that do not touch.

Φ = (x1 or x2 or x3) and (! x1 or ! x2 or x4) and (! x1 or x3 or ! x4) and (x1 or x3 or x4)

x2

x1

x3

! x2

x4

! x1

! x4

x3

! x1

x3

x1

x4

k = number of variables = 4

53 of 56

3SAT Reduces to Independent Set (Your Answer)

Find an independent set of size k = 4. Use this set to generate a solution to the 3SAT problem.

  • Reminder: An independent set of size 4 is a set of 4 (red) vertices that do not touch.

Φ = (x1 or x2 or x3) and (! x1 or ! x2 or x4) and (! x1 or x3 or ! x4) and (x1 or x3 or x4)

x2

x1

x3

! x2

x4

! x1

! x4

x3

! x1

x3

x1

x4

k = number of variables = 4

X3: True

X2: False

X4: True

X1: Doesn’t matter

54 of 56

Reduction

Since IND-SET can be used to solve 3SAT, we say that “3SAT reduces to IND-SET”.

  • Note: 3SAT is not a graph problem!
  • Note: Reductions don’t always involve creating graphs.

3SAT

Preprocess

IND-SET

G

IND-SET for G

Postprocess

Assignment so

that Φ gives true.

Φ

x1: true

x2: false

x3: false

x4: true

55 of 56

Reductions and Decomposition

Arguably, we’ve been doing something like a reduction all throughout the course.

  • Abstract lists reduce to arrays (or linked lists).
  • Synthesizing guitar string sound reduces to ArrayRingBuffer.
  • The percolation problem reduces to DisjointSets.
  • ExtrinsicMinPQ reduces to (operations on whatever instance variables you used).

These examples aren’t reductions exactly.

  • We aren’t just calling a subroutine.
  • A better term would be decomposition: Taking a complex task and breaking it into smaller parts. This is the heart of computer science.
    • Using appropriate abstractions makes problem solving vastly easier.

56 of 56

Generational Changes in the Human Mind