Maximum adjacency orderings #
For a weighted multigraph W : V → V → ℕ (Cslib.WeightedCut.IsMultigraph), the attachment
weight w(A, x) = ∑_{a ∈ A} W a x measures how strongly a vertex x is joined to a vertex set
A. A maximum adjacency (MA) ordering lists the vertices so that each vertex is attached to the
vertices before it at least as strongly as every later vertex is. Maximum adjacency search builds
one greedily: starting from the empty set, it repeatedly adds a vertex of largest attachment.
The basic property of these orderings, due to Nagamochi and Ibaraki [NI92] and the
key lemma of the Stoer–Wagner minimum cut algorithm [SW97] (the "cut-of-the-phase"
lemma), is that the cut {t} of the last vertex t is a minimum cut separating t from the
second to last vertex s: it weighs at most every vertex set containing exactly one of s and
t. The global minimum cut algorithm built on it is
CslibFrontier.Algorithms.Lean.StoerWagner.Basic.
The proof is an induction along the ordering. Fix a cut C. For the set A of vertices listed so
far, the weight of C within A is the weight of the edges of A crossing C; whenever the
next listed vertex is on the other side of C from the last listed one, its attachment to its own
side of A is at most the weight of C within A. The last vertex t is such a vertex for
every C separating s and t, and its attachment to A = all other vertices is its degree,
the weight of {t}. This is the standard inductive argument for the lemma (as described in
secondary accounts of [SW97]), phrased as an invariant of the prefixes.
Main definitions #
Cslib.WeightedCut.attachWeight: the attachment weightw(A, x).Cslib.WeightedCut.IsMAOrderingFrom,Cslib.WeightedCut.IsMAOrdering: maximum adjacency orderings after a set of already chosen vertices, and of all the vertices.Cslib.WeightedCut.maSearch: maximum adjacency search, ties broken by the order of the candidate list.
Main results #
Cslib.WeightedCut.cutWeight_singleton_le_of_isMAOrdering: the MA-ordering lemma.Cslib.WeightedCut.cutWeight_singleton_eq_minCutBetween_of_isMAOrdering: the same, ascutWeight W {t} = minCutBetween W s t.Cslib.WeightedCut.maSearch_spec: maximum adjacency search lists its candidates in a maximum adjacency ordering.
References #
Attachment weights and maximum adjacency orderings #
IsMAOrderingFrom W A l: listing l after the already chosen vertices A, each vertex is
attached to the vertices chosen before it at least as strongly as every later vertex.
Instances For
A maximum adjacency ordering of the vertices: a list of all the vertices, each once, in which each vertex is attached to the vertices before it at least as strongly as every later vertex is. The first vertex is arbitrary.
- nodup : l.Nodup
No vertex is listed twice.
Every vertex is listed.
- isMAOrderingFrom : IsMAOrderingFrom W ∅ l
The maximum adjacency property.
Instances For
The MA-ordering lemma #
The MA-ordering lemma ([NI92]; the "cut-of-the-phase" lemma of
[SW97]): if s, t are the last two vertices of a maximum adjacency ordering, the cut
{t} weighs at most every vertex set containing exactly one of s and t.
The MA-ordering lemma in terms of the minimum s–t cut weight λ(s, t)
(Cslib.WeightedCut.minCutBetween): if s, t are the last two vertices of a maximum adjacency
ordering, the cut {t} weighs exactly λ(s, t).
Maximum adjacency search #
Maximum adjacency search. With key y = w(A, y) for the vertices A chosen so far, it lists
a candidate of largest key (the first one in the list R of remaining candidates, by
List.argmax), adds its edge weights to the keys, and continues with the other candidates.
fuel bounds the number of steps, so that the recursion is structural and reduces in the
kernel.
Instances For
Maximum adjacency search from the chosen set A, with keys w(A, ·) and enough fuel, lists
its candidates in a maximum adjacency ordering after A.