L4.9 Kapitola K4 — Toky a řezy (Slot 4) · [MUST]

Bipartitní matching přes max flow

Jedna nová věc Maximální párování v bipartitním grafu = maximální tok v síti $s \to X \to Y \to t$ se všemi kapacitami $1$. Velikost max toku je velikost maximálního párování — a augmentující cesta v reziduálním grafu je přesně M-augmenting path, která párování přepojí a zvětší o 1.

Pojem matching (párování) znáš z [L0.6] Párování a perfektní párování — množina hran, žádné dvě nesdílejí vrchol. Tehdy jsme slíbili, že výpočet přijde v K4. Dnes ten slib plníme pro maximum cardinality matching (párování s největším počtem hran) v bipartitním grafu: stačí síť postavit z vrstev jako v [L4.5] a pustit Ford-Fulkersona [L4.3]. Cestou potřebuješ reziduální graf [L4.2] a na závěr řez jako certifikát [L4.4].

Kam dnešní lekce patří: čtyři párovací problémy (slide 38)

Slide 38 — Matching: Introduction, 1:1

Matching is the set of arcs $P \subseteq E(G)$ in undirected graph $G$, such that the endpoints are all different (no arcs from $P$ are incident with the same node). When all nodes of $G$ are incident with some arc in $P$, we call $P$ a perfect matching.

Problems:

These problems can be solved in polynomial time.

Dnes řešíme b) — kardinalitu v bipartitním grafu, přes max flow. Problémy c) a d) (váhy, assignment) počkají na minimum cost flow: nejdřív si ho postavíme v [L4.10], pak jím v [L4.12] vyřešíme assignment. Maďarský (Hungarian) algoritmus je ze zkoušky vyloučen — assignment se u zkoušky řeší výhradně přes MCF.

Celou lekci odpracujeme na jednom bipartitním grafu (vlastní instance — přiznáno): $X = \{x_1, x_2, x_3, x_4\}$, $Y = \{y_1, y_2, y_3\}$, hrany podle obrázku.

Zkus sám: najdi v grafu co největší párování ručně. A teď zkus „hladově“: vezmi hranu $x_1$–$y_1$, pak přidávej, co jde. Kde uvázneš?

Největší párování má 3 hrany, např. $M = \{x_1\text{–}y_2,\ x_2\text{–}y_1,\ x_4\text{–}y_3\}$. Hladový postup ale snadno uvázne na dvou: vezmeš $x_1$–$y_1$, pak třeba $x_4$–$y_2$ — a konec. $x_2$ umí jen $y_1$ (obsazeno), $x_3$ jen $y_2$ (obsazeno), $y_3$ by chtělo jen $x_4$ (obsazeno). Žádnou hranu už přidat nejde, a přesto párování není největší — muselo by se přepojit. Tomuhle rozdílu se říká maximal (nerozšiřitelné) vs. maximum (největší) — a přesně na přepojování máme v téhle kapitole nástroj: zpětné hrany reziduálního grafu [L4.2].

Jazyk párování: M-alternating a M-augmenting path (slide 39)

Slide 39 — a) Maximum Cardinality Matching Problem: Solution Using M-alternating Path, 1:1

Defs: Let $G$ be an undirected graph (bipartite or not), and let $M$ be a matching. A path $P$ is an M-alternating path if $E(P) \setminus M$ is a matching. An $M$-alternating path is M-augmenting if its endpoints are not in $M$.

Theorem: Let $G$ be an undirected graph (bipartite or not) with some matching $M$. Then $M$ is maximum if and only if there is no $M$-augmenting path.

Algorithm: Find the arbitrary matching. Find the $M$-augmenting path (i.e., $M$-alternating path with uncovered endpoints). Exchange (i.e. augment) the matching along the path. Repeat as long as such a path does exist.

Zkus sám: v uváznutém párování $M = \{x_1\text{–}y_1\}$ najdi M-augmentující cestu z $x_2$. Co se stane, když podél ní párování „přehodíš“?

Cesta $x_2 - y_1 - x_1 - y_2$: hrany střídavě mimo $M$ ($x_2$–$y_1$), v $M$ ($y_1$–$x_1$), mimo $M$ ($x_1$–$y_2$) — to je M-alternating — a oba konce $x_2$, $y_2$ jsou nepokryté → M-augmenting. Přehození = hrany mimo $M$ do párování přidej, hrany v $M$ vyhoď: nové $M = \{x_2\text{–}y_1,\ x_1\text{–}y_2\}$. Cesta má lichý počet hran, krajních „mimo $M$“ je o jednu víc než vnitřních „v $M$“ — párování se zvětší přesně o 1. A věta ze slidu říká, že tohle je jediné, co kdy potřebuješ: když M-augmentující cesta neexistuje, $M$ už je maximum.

Zkus sám: „najdi cestu, podél ní prohoď, opakuj, dokud cesta existuje“… kde jsi tenhle algoritmus v K4 už viděl?

Je to slovo od slova Ford-Fulkerson [L4.3]: augmentující cesta v reziduálním grafu, augmentace, opakuj, dokud cesta existuje — a kritérium maximality „žádná augmentující cesta“ je totéž tvrzení jako věta ze slidu 39. To není náhoda: za chvíli uvidíš, že po převodu na tok M-augmentující cesta = augmentující cesta v $G_f$, včetně přehazování přes zpětné hrany. Stačí tedy umět ten převod.

Konstrukce sítě (slide 40)

Zkus sám: párování zakazuje, aby se dvě vybrané hrany potkaly ve vrcholu. Jak tohle omezení říct jazykem toků — co a kde omezíš kapacitou?

„Vrchol $x_i$ smí být nejvýš v jedné hraně párování“ = „do $x_i$ smí přitéct nejvýš jednotka“. Tak mu ji přiveď jedinou hranou $s \to x_i$ s kapacitou 1 — Kirchhoff [L4.1] pak zaručí, že z $x_i$ odteče nejvýš 1, tedy nejvýš jedna hrana z $x_i$ ponese tok. Symetricky vpravo: hrana $y_j \to t$ s kapacitou 1 hlídá, že do $y_j$ vstoupí nejvýš jedna párovací hrana. Hrany grafu zorientuješ $X \to Y$. Žádné dolní meze nepotřebuješ — $l \equiv 0$.

Slide 40 — b) Maximum Cardinality Matching in Bipartite Graphs: Solution by Maximum Flow, 1:1

Can be transformed to the maximum flow problem:

Zkus sám: tok je obecně reálný — co kdyby vyšlo $f(x_1 \to y_1) = 0.5$? Je to párování? A proč se toho nemusíš bát?

Půlka hrany v párování nedává smysl — frakční tok párování není. Zachraňuje nás Integral Flow Theorem (Dantzig-Fulkerson, slide 17 — citovaný v [L4.5]): kapacity jsou celé (samé jedničky), takže existuje celočíselný maximální tok, a Ford-Fulkerson ho rovnou najde (startuje z $f \equiv 0$ a každé $\gamma$ je celé, tady vždy $\gamma = 1$). Celočíselný tok s kapacitami 1 je 0/1 tok — každá hrana buď nese jednotku, nebo nic. U zkoušky tuhle větu vždy zmiň: bez ní jsi vyřešil jen LP relaxaci.

Zkus sám: vezmi celočíselný přípustný tok a polož $M = \{(i, j) \in E:\ f(x_i \to y_j) = 1\}$. Proč je $M$ párování a proč $|M| = |f|$?

Kdyby dvě hrany $M$ sdílely vrchol $x_i$, odtékaly by z $x_i$ aspoň 2 jednotky — ale přitéct může jen 1 (jediná hrana $s \to x_i$, kapacita 1), spor s Kirchhoffem. Symetricky pro $y_j$ přes hranu $y_j \to t$. Takže $M$ je párování. A velikost: $|f| = \sum_i f(s \to x_i)$ = počet vrcholů $X$ s protékající jednotkou = počet hran s $f = 1$ = $|M|$. Funguje to i obráceně — každé párování $M$ vyrobí přípustný 0/1 tok s $|f| = |M|$ (pusť jednotku po $s \to x_i \to y_j \to t$ pro každou hranu $M$). Tudíž max tok = max párování, ne jen nerovnost.

Běh Ford-Fulkersona = hledání M-augmentujících cest

Dolní meze jsou nulové, takže — na rozdíl od [L4.7] a [L4.8] — je start zadarmo: $f \equiv 0$ je přípustný. Sleduj v běhu iteraci ②: cesta projde zpětnou hranou $y_1 \to x_1$ (existuje, protože $f(x_1 \to y_1) = 1 > 0$, [L4.2]) — to je přesně přehození párovací hrany $x_1$–$y_1$ z M-augmentující cesty: tok po ní klesne na 0, hrana z párování vypadne a oba její konce se přepojí jinam.

Zkus sám: max tok vyšel $|f| = 3 < 4 = |X|$. Co to říká o perfektním párování — a čím to doložíš?

Vrcholy $X$ nelze spárovat všechny, takže párování pokrývající všechny vrcholy ($X$ i $Y$) — perfect matching [L0.6] — neexistuje (tady ostatně ani nemůže: $|X| \ne |Y|$; ale nejde spárovat ani celé $X$). Certifikátem je minimální řez [L4.4]: $A = \{s, x_1, x_2, x_3, y_1, y_2\}$ má kapacitu $C(A) = u(s \to x_4) + u(y_1 \to t) + u(y_2 \to t) = 3 = |f|$, takže víc než 3 párovací hrany být nemohou. Řez má i čitelnou interpretaci: $x_1, x_2, x_3$ se umí napojit jen na $\{y_1, y_2\}$ — tři vrcholy se „mačkají“ o dva sousedy, jeden z nich zůstane vždy nespárovaný.

Nebezpečné polopravdy

1) „Nerozšiřitelné párování = největší párování.“ Ne — maximal (nejde přidat hrana) není maximum (největší počet hran); hladové přidávání uvázne (viz první try). Zvětšit párování často znamená přepojit ho M-augmentující cestou — v toku to obstará zpětná hrana. 2) Frakční tok není párování. Odpověď „pustím max flow“ je úplná až s větou o celočíselnosti (Integral Flow Theorem — kapacity jsou celé, tedy existuje celočíselný max tok a F-F ho najde). U zkoušky nevynechávej. 3) M-augmentující cesta musí mít OBA konce nepokryté. Střídavá cesta končící v pokrytém vrcholu párování nezvětší — přehozením velikost zachováš, nebo dokonce porušíš párovost. 4) Hrany se orientují, kapacita 1 všude, $l = 0$. Neorientovaný graf nech za sebou: v síti vede vše $s \to X \to Y \to t$. A žádné dolní meze — nepleť s [L4.8], tady start $f \equiv 0$ funguje. 5) Maďarský algoritmus u zkoušky nepoužívej — je vyloučen; vážené verze (assignment) se řeší přes minimum cost flow ([L4.10][L4.12]).

Key takeaways — L4.9
T01 Maximum Cardinality Matching in Bipartite Graphs — Solution by Maximum Flow zdroj: banka úloh #8 (study task, EN 1:1; v bance „Unsolved“ — řešení sepsáno vlastní dle slidu 40, přiznáno)
Assignment (original, EN 1:1)

Given a bipartite graph $G = (X \cup Y, E)$, formulate the maximum-cardinality matching problem as a maximum-flow problem. Define the source, sink, arc orientations, capacities, and explain how to read the matching from an integral maximum flow.

a) Co je v zadání?

Formulační úloha — přesně obsah téhle lekce. Chtějí po tobě konstrukci sítě (zdroj, stok, orientace, kapacity) a čtení výsledku z celočíselného max toku. Slovo „integral“ v zadání je nápověda, že k plné odpovědi patří i zdůvodnění celočíselnosti.

b) Co k tomu budeme potřebovat?

  • Tato lekce — konstrukce + čtení párování (takeaways).
  • [L0.6] — definice párování.
  • [L4.5] — Integral Flow Theorem.
  • [L4.1] — Kirchhoff a přípustnost.

c) Jak nad úlohou uvažovat?

Odevzdej čtyři věci jako u každé tokové formulace: uzly, hrany s orientací, kapacity, čtení výsledku — a navíc dvě zdůvodňovací věty: (i) proč kapacita 1 u $s$/$t$ vynutí párovost (Kirchhoff), (ii) proč se smíš spolehnout na celočíselný tok. Bonusová věta o rovnosti $|f_{max}| = |M_{max}|$ (oba směry převodu) z odpovědi dělá důkaz, ne jen recept.

d) Úplné řešení (vlastní dle slidu 40 — přiznáno)

Konstrukce. K bipartitnímu grafu $G = (X \cup Y, E)$ přidej zdroj $s$ a hranu $(s, i)$ pro všechna $i \in X$, stok $t$ a hranu $(j, t)$ pro všechna $j \in Y$. Hrany zorientuj od $s$ do $X$, z $X$ do $Y$ a z $Y$ do $t$. Horní mez všech hran je $u = 1$, dolní $l = 0$. Řeš maximální tok z $s$ do $t$.

Proč tok kóduje párování. Do $x_i$ vede jediná hrana s kapacitou 1, takže (Kirchhoff) z $x_i$ odteče nejvýš jednotka — nejvýš jedna hrana z $x_i$ nese tok; symetricky $y_j \to t$ hlídá vrcholy $Y$. Naopak každé párování $M$ definuje přípustný tok: jednotka po $s \to x_i \to y_j \to t$ pro každou $(i, j) \in M$, tedy $|f| = |M|$. Hodnoty max toku a max párování se proto rovnají.

Celočíselnost. Kapacity jsou celočíselné, takže existuje celočíselný maximální tok (Integral Flow Theorem, Dantzig-Fulkerson; F-F ho přímo najde, neboť startuje z $f \equiv 0$ a augmentuje o celá $\gamma$). Celočíselný tok s $u = 1$ je 0/1.

Čtení párování. $M = \{(i, j) \in E:\ f(x_i \to y_j) = 1\}$ — vnitřní hrany nesoucí jednotku; $|M| = |f|$ je maximální kardinalita.

T02 Pruned Chessboard Problem zdroj: zkouška KO 21.06.2021 (zadání EN 1:1); řešení ve zdroji není, sepsáno vlastní — přiznáno
Assignment (original, EN 1:1)

A chessboard consists of $n^2$ squares arranged in $n$ rows and $n$ columns. A domino is a wooden or plastic piece consisting of two squares joined on a side. The goal is to fully cover (i.e., some domino covers each square) the chessboard with dominos (i.e., each domino covers two squares of the board, and no two dominos overlap). A pruned board is a chessboard with some squares removed.

Suppose that we want to know whether it is possible to fully cover a pruned board and if not, to find the maximum number of dominos we can place on the pruned board so that each domino covers two squares of the board and no two dominos overlap. Formulate this problem as an appropriate matching problem.

Figure: Pruned chessboard and a solution. (Obrázek v originále nedochován v přepisu; níže vlastní malá instance — přiznáno.)

a) Co je v zadání?

Modelovací úloha: šachovnice s vynechanými políčky, dominová kostka kryje dvě stranově sousedící políčka. Otázky: jde pokrýt všechno? A když ne, kolik kostek se vejde maximálně? Máš to „formulate as an appropriate matching problem“ — tedy najít správný graf a říct, který párovací problém na něm řešíš (a ten už umíš spočítat přes max flow).

b) Co k tomu budeme potřebovat?

  • Tato lekce — max cardinality matching v bipartitním grafu přes max flow (takeaways).
  • [L0.6] — párování a perfektní párování.

c) Jak nad úlohou uvažovat?

① Co je „vrchol“ a co „hrana“? Kostka spojuje dvě sousední políčka — políčka budou vrcholy, možné pozice kostky hrany. ② Proč je graf bipartitní? Vybarvi šachovnici jako šachovnici: kostka kryje vždy jedno bílé a jedno černé políčko. ③ Přelož otázky ze zadání: „fully cover“ = jaké párování? „maximum number of dominos“ = jaký problém z této lekce?

d) Úplné řešení (vlastní — přiznáno)

Graf. Vrcholy = nevyřazená políčka prořezané šachovnice. Hrana spojuje dvě políčka, právě když spolu stranově sousedí (= sem lze položit domino). Políčka obarvi šachovnicově (políčko $(i, j)$ je bílé pro $i + j$ sudé, černé pro liché): každá hrana spojuje bílé s černým, takže graf je bipartitní s partitami $X$ = bílá políčka, $Y$ = černá políčka.

Překlad otázek. Rozmístění kostek bez překryvu = množina hran, kde žádná dvě nesdílejí políčko = párování. Maximální počet kostek = maximum cardinality matching in a bipartite graph (problém b) ze slidu 38) — spočteš přes max flow konstrukcí z této lekce: $s \to$ bílá $\to$ černá $\to t$, všechny kapacity 1, $|f_{max}|$ = max počet kostek. Plné pokrytí existuje $\iff$ párování je perfektní, tj. $|f_{max}| = \tfrac{\#\text{políček}}{2}$ (nutně musí být počet políček sudý a #bílých = #černých — jinak rovnou NE).

Instance z obrázku (šachovnice $3 \times 3$ bez prostředního políčka): bílá = 4 rohy, černá = 4 hranová políčka, sousedství tvoří kružnici o 8 vrcholech. Max flow v odpovídající síti má hodnotu 4 = perfektní párování, např. $\{11\text{–}12,\ 13\text{–}23,\ 33\text{–}32,\ 31\text{–}21\}$ — deska jde plně pokrýt 4 kostkami.

← Předchozí L4.8 · Matrix rounding přes toky