|
66 | 66 | "MinimumVertexCover": [Minimum Vertex Cover], |
67 | 67 | "MaxCut": [Max-Cut], |
68 | 68 | "GraphPartitioning": [Graph Partitioning], |
| 69 | + "BiconnectivityAugmentation": [Biconnectivity Augmentation], |
69 | 70 | "HamiltonianPath": [Hamiltonian Path], |
70 | 71 | "UndirectedTwoCommodityIntegralFlow": [Undirected Two-Commodity Integral Flow], |
71 | 72 | "LengthBoundedDisjointPaths": [Length-Bounded Disjoint Paths], |
@@ -537,6 +538,52 @@ Graph Partitioning is a core NP-hard problem arising in VLSI design, parallel co |
537 | 538 | caption: [Graph with $n = 6$ vertices partitioned into $A = {v_0, v_1, v_2}$ (blue) and $B = {v_3, v_4, v_5}$ (red). The 3 crossing edges $(v_1, v_3)$, $(v_2, v_3)$, $(v_2, v_4)$ are shown in bold red; internal edges are gray.], |
538 | 539 | ) <fig:graph-partitioning> |
539 | 540 | ] |
| 541 | +#problem-def("BiconnectivityAugmentation")[ |
| 542 | + Given an undirected graph $G = (V, E)$, a set $F$ of candidate edges on $V$ with $F inter E = emptyset$, weights $w: F -> RR$, and a budget $B in RR$, find $F' subset.eq F$ such that $sum_(e in F') w(e) <= B$ and the augmented graph $G' = (V, E union F')$ is biconnected, meaning $G'$ is connected and deleting any single vertex leaves it connected. |
| 543 | +][ |
| 544 | +Biconnectivity augmentation is a classical network-design problem: add backup links so the graph survives any single vertex failure. The weighted candidate-edge formulation modeled here captures communication, transportation, and infrastructure planning settings where only a prescribed set of new links is feasible and each carries a cost. In this library, the exact baseline is brute-force enumeration over the $m = |F|$ candidate edges, yielding $O^*(2^m)$ time and matching the exported complexity metadata for the model. |
| 545 | + |
| 546 | +*Example.* Consider the path graph $v_0 - v_1 - v_2 - v_3 - v_4 - v_5$ with candidate edges $(v_0, v_2)$, $(v_0, v_3)$, $(v_0, v_4)$, $(v_1, v_3)$, $(v_1, v_4)$, $(v_1, v_5)$, $(v_2, v_4)$, $(v_2, v_5)$, $(v_3, v_5)$ carrying weights $(1, 2, 3, 1, 2, 3, 1, 2, 1)$ and budget $B = 4$. Selecting $F' = {(v_0, v_2), (v_1, v_3), (v_2, v_4), (v_3, v_5)}$ uses total weight $1 + 1 + 1 + 1 = 4$ and eliminates every articulation point: after deleting any single vertex, the remaining graph is still connected. Reducing the budget to $B = 3$ makes the instance infeasible, because one of the path endpoints remains attached through a single articulation vertex. |
| 547 | + |
| 548 | +#figure( |
| 549 | + canvas(length: 1cm, { |
| 550 | + import draw: * |
| 551 | + // 6 vertices in a horizontal line |
| 552 | + let verts = range(6).map(k => (k * 1.5, 0)) |
| 553 | + let path-edges = ((0,1),(1,2),(2,3),(3,4),(4,5)) |
| 554 | + // Candidate edges: (u, v, weight, selected?) |
| 555 | + let candidates = ( |
| 556 | + (0, 2, 1, true), (0, 3, 2, false), (0, 4, 3, false), |
| 557 | + (1, 3, 1, true), (1, 4, 2, false), (1, 5, 3, false), |
| 558 | + (2, 4, 1, true), (2, 5, 2, false), (3, 5, 1, true), |
| 559 | + ) |
| 560 | + let blue = graph-colors.at(0) |
| 561 | + let green = graph-colors.at(2) |
| 562 | + let gray = luma(180) |
| 563 | + // Draw path edges (existing graph) |
| 564 | + for (u, v) in path-edges { |
| 565 | + g-edge(verts.at(u), verts.at(v), stroke: 2pt + black) |
| 566 | + } |
| 567 | + // Draw candidate edges as arcs above the path |
| 568 | + for (u, v, w, sel) in candidates { |
| 569 | + let mid-x = (verts.at(u).at(0) + verts.at(v).at(0)) / 2 |
| 570 | + let span = v - u |
| 571 | + let height = span * 0.4 |
| 572 | + let ctrl = (mid-x, height) |
| 573 | + bezier(verts.at(u), verts.at(v), ctrl, |
| 574 | + stroke: if sel { 2.5pt + green } else { (dash: "dashed", paint: gray, thickness: 0.8pt) }) |
| 575 | + // Weight label |
| 576 | + content((mid-x, height + 0.25), |
| 577 | + text(7pt, fill: if sel { green.darken(30%) } else { gray })[#w]) |
| 578 | + } |
| 579 | + // Draw nodes |
| 580 | + for (k, pos) in verts.enumerate() { |
| 581 | + g-node(pos, name: "v" + str(k), label: [$v_#k$]) |
| 582 | + } |
| 583 | + }), |
| 584 | + caption: [Biconnectivity Augmentation on a 6-vertex path with $B = 4$. Existing edges are black; green arcs show the selected augmentation $F'$ (total weight 4); dashed gray arcs are unselected candidates. The resulting graph $G' = (V, E union F')$ is biconnected.], |
| 585 | +) <fig:biconnectivity-augmentation> |
| 586 | +] |
540 | 587 |
|
541 | 588 | #problem-def("BoundedComponentSpanningForest")[ |
542 | 589 | Given an undirected graph $G = (V, E)$ with vertex weights $w: V -> ZZ_(gt.eq 0)$, a positive integer $K <= |V|$, and a positive bound $B$, determine whether there exists a partition of $V$ into $t$ non-empty sets $V_1, dots, V_t$ with $1 <= t <= K$ such that each induced subgraph $G[V_i]$ is connected and each part satisfies $sum_(v in V_i) w(v) <= B$. |
|
0 commit comments