March 26

soltns5.pdf

or as three separate files:soltns5a.pdf soltns5b.pdf soltns5c.pdf

If you have trouble viewing in the browser, download to your desktop and try viewing from there.

March 28

Transitive closure.

For each vertex v in the graph:

Do a DFS (or BFS) from v and let S be the set of all vertices marked

For each w in S which is different from v, add the edge vw to the transitive closure

Transitive reduction.

This problem is a bit tricky if the graph has cycles. Let us assume that it does not.

First compute the transitive closure. Then:

For every vertex u

For every vertex v not equal to u

For every vertex w not equal to u or v

If uv, vw and uw are edges, delete uw

Note: this may not always give the one with the minimum number of edges if the graph has a cycle.

Consider the case of a graph with three vertices and all 6 directed edges.

One transitive reduction has edges: 12, 23, 31

Another one has edges: 12,21,13,31

April 2

Union by weight

The reason is essentially the same as that given in the last two paragraphs of Section 16.1 of the notes.

A find operation takes at most the maximum depth of any of the trees. Initially all trees have zero depth.

The only way a tree can increase its depth is when two trees are merged together.

The leader of the smaller tree has its weight at least double for each merge, since it gains all of the nodes

of the larger tree as children.

Since no tree has more than n nodes, a node can double its weight at most log_2 (n) times so the maximum depth of

any tree is at most log_2 (n).