8.11

From The Algorithm Design Manual Solution Wiki
Jump to navigation Jump to search

Linear-time update after changing a single edge weight

(a) e ∉ T and ẇ(e) > w(e): the edge was already excluded and only became heavier, so the present tree T is still an MST. Return T. Work = O(1).

(b) e ∉ T and ẇ(e) < w(e):
  1. Insert e into T; a single cycle C is created.
  2. Traverse the unique path in T between the endpoints of e (DFS/BFS) and remember the edge f of maximum weight on that path.
  3. If w(f) > ẇ(e) replace f by e; otherwise remove e again.
The path contains at most |V|−1 edges, so the whole procedure is Θ(|V|).

(c) e ∈ T and ẇ(e) < w(e): decreasing the weight of an edge already in the MST can only lower the total weight, never violate optimality. T is still an MST. Work = O(1).

(d) e ∈ T and ẇ(e) > w(e):
  1. Delete e; T splits into two components A and B (mark them with one DFS/BFS from either endpoint).
  2. Scan every edge of G; among those crossing the cut (one end in A, the other in B) select the minimum-weight edge f.
  3. Insert f to reconnect the components; the resulting tree is the new MST.
The DFS costs O(|V|) and the scan O(|E|), giving an overall linear-time update.


Back to Chapter 8