structure
SimpleGraph.HopcroftKarpExecution
{V : Type u}
[Fintype V]
[DecidableEq V]
(G : SimpleGraph V)
:
Type (max u (w + 1))
- numPhases : ℕ
- isMatching (i : Fin (self.numPhases + 1)) : (self.matching i).IsMatching
- shortestLen_spec (i : Fin self.numPhases) : G.shortestAugPathLength (self.matching ⟨↑i, ⋯⟩) = ↑(self.shortestLen i)
- paths (i : Fin self.numPhases) : G.VertexDisjointAugPaths (self.matching ⟨↑i, ⋯⟩) (self.shortestLen i)
Instances For
theorem
SimpleGraph.HopcroftKarpExecution.shortestLen_strict_mono
{V : Type u}
[Fintype V]
[DecidableEq V]
{G : SimpleGraph V}
(exec : G.HopcroftKarpExecution)
(i : Fin exec.numPhases)
(hi : ↑i + 1 < exec.numPhases)
:
theorem
SimpleGraph.HopcroftKarpExecution.shortestLen_odd
{V : Type u}
[Fintype V]
[DecidableEq V]
{G : SimpleGraph V}
(exec : G.HopcroftKarpExecution)
(i : Fin exec.numPhases)
:
Odd (exec.shortestLen i)
theorem
SimpleGraph.HopcroftKarpExecution.shortestLen_lower_bound
{V : Type u}
[Fintype V]
[DecidableEq V]
{G : SimpleGraph V}
(exec : G.HopcroftKarpExecution)
(i : Fin exec.numPhases)
:
theorem
SimpleGraph.deficit_bound_from_shortest_aug_path
{V : Type u_1}
[Fintype V]
[DecidableEq V]
{G : SimpleGraph V}
(M : G.Subgraph)
(hM : M.IsMatching)
(ℓ : ℕ)
(hℓ : ∀ (u v : V) (p : G.Walk u v), p.IsAugmentingPath M → ℓ ≤ p.length)
(M' : G.Subgraph)
(hM' : M'.IsMatching)
:
theorem
SimpleGraph.hopcroft_karp_deficit_after_sqrt_phases
{V : Type u}
[Fintype V]
[DecidableEq V]
{G : SimpleGraph V}
(exec : G.HopcroftKarpExecution)
(hphases : (Fintype.card V).sqrt ≤ exec.numPhases)
(M' : G.Subgraph)
:
M'.IsMatching → M'.edgeSet.ncard ≤ (exec.matching ⟨(Fintype.card V).sqrt, ⋯⟩).edgeSet.ncard + (Fintype.card V).sqrt
theorem
SimpleGraph.hopcroft_karp_phase_bound
{V : Type u}
[Fintype V]
[DecidableEq V]
{G : SimpleGraph V}
(exec : G.HopcroftKarpExecution)
: