Complexity & Overhead Correctness Review

Systematic review of declare_variants! complexity expressions and #[reduction(overhead)] formulas. New reviews should be appended to the appropriate table. See Issue #107 for methodology.

Review result: PASS (correct), FAIL (wrong — needs fix), UNVERIFIED (not yet reviewed).

Models (Variant Complexity)

The complexity field represents the worst-case time complexity of the best known algorithm for each problem variant.

ResultProblemLocationDeclaredBest KnownAlgorithmAuthorsFixSourceReviewed
FAILMaximumMatching<SimpleGraph, i32>maximum_matching.rs:2232^num_verticesO(V³) polyBlossom algorithmEdmonds 1965; Gabow 1990num_vertices^3DOI:10.4153/CJM-1965-045-42026-02-28
FAILKColoring<K2>kcoloring.rs2^num_verticesO(V+E) polyBFS bipartiteness checkTextbook (CLRS)num_vertices + num_edgesStandard textbook result2026-02-28
FAILKSatisfiability<K2>ksat.rs2^num_variablesO(n+m) polyImplication graph SCCAspvall, Plass, Tarjan 1979num_variables + num_clausesDOI:10.1016/0020-0190(79)90002-42026-02-28
FAILKColoring<K3>kcoloring.rs3^num_verticesO*(1.3289^n)Constraint satisfaction reductionBeigel & Eppstein 20051.3289^num_verticesDOI:10.1016/j.jalgor.2004.06.0082026-02-28
FAILKColoring<K4>kcoloring.rs4^num_verticesO*(1.7159^n)Measure and conquerWu, Gu, Jiang, Shao, Xu 20241.7159^num_verticesDOI:10.4230/LIPIcs.ESA.2024.1032026-02-28
FAILKColoring<K5>kcoloring.rs5^num_verticesO*((2−ε)^n)Breaking the 2^n barrierZamir 20212^num_verticesDOI:10.4230/LIPIcs.ICALP.2021.1132026-02-28
FAILKColoring<KN>kcoloring.rsk^num_verticesO*(2^n)Inclusion-exclusion / zeta transformBjörklund, Husfeldt, Koivisto 20092^num_verticesDOI:10.1137/0706839332026-02-28
PASSMIS<SimpleGraph> (7 variants)2^nO*(1.1996^n)Measure & ConquerXiao & Nagamochi 20171.1996^num_verticesDOI:10.1016/j.ic.2017.06.0012026-02-28
PASSMIS<TriangularSubgraph>2^nO*(1.1893^n)Degree-6 MISXiao & Nagamochi 20171.1893^num_verticesSame as above2026-02-28
PASSMVC<SimpleGraph>2^nO*(1.1996^n)Via MIS complementXiao & Nagamochi 20171.1996^num_verticesSame as above2026-02-28
PASSMaxClique<SimpleGraph>2^nO*(1.1892^n) exp spaceBacktracking+DPRobson 20011.1892^num_verticesDOI:10.1016/0196-6774(86)90032-52026-02-28
PASSMDS<SimpleGraph>2^nO*(1.4969^n)Measure & Conquervan Rooij & Bodlaender 20111.4969^num_verticesDOI:10.1016/j.dam.2011.07.0012026-02-28
PASSMaximalIS<SimpleGraph>2^nO*(1.4423^n)MIS enumerationMoon-Moser 1965; Tomita 20061.4423^num_verticesTomita et al., TCS 363(1):28–42, 20062026-02-28
PASSTSP<SimpleGraph>n!O*(2^n · n²)Held-Karp DPHeld & Karp 19622^num_verticesDOI:10.1137/01100152026-02-28
PASSMaxCut<SimpleGraph>2^nO*(2^{ωn/3}) exp space2-CSP optimizationWilliams 20052^(2.372 * num_vertices / 3)DOI:10.1016/j.tcs.2005.09.0232026-02-28
PASSKSatisfiability<K3>2^nO*(1.307^n)Biased-PPSZHansen, Kaplan, Zamir & Zwick 20191.307^num_variablesDOI:10.1145/3313276.33163592026-02-28
PASSILPexp(n)exp(O(n log n))FPT algorithmDadush 2012Thesis2026-02-28
PASSFactoringexp(√n)exp(O(n^{1/3} (log n)^{2/3}))GNFSLenstra et al. 1993Springer2026-02-28
PASSSAT (general)2^num_variablesO*(2^n)SETH-tightNo sub-2^n for unbounded width2026-02-28
PASSKSatisfiability<KN>2^num_variablesO*(2^n)PPSZ base → 2 as k→∞2026-02-28
PASSCircuitSAT2^num_inputsO*(2^n)SETH-tight (Williams 2010)Note: num_inputs() getter missing2026-02-28
PASSQUBO<f64>2^num_varsO*(2^n)NP-hardNo known sub-2^n2026-02-28
PASSSpinGlass (both)2^num_verticesO*(2^n)NP-hardBarahona 19822026-02-28
PASSMaxSetPacking (all)2^num_setsO*(2^m)Brute-forceNo known improvement2026-02-28
PASSMinSetCovering2^num_setsO*(2^m)Brute-forceNo known improvement2026-02-28

Rules (Reduction Overhead)

The overhead formula describes how target problem size relates to source problem size.

ResultReductionLocationDeclaredActualFixSourceReviewed
FAILMIS → MaxSetPackingmaximumindependentset_maximumsetpacking.rs:39universe_size = "num_vertices"Universe elements are edge indices (0..num_edges−1)universe_size = "num_edges"Karp 1972, DOI:10.1007/978-1-4684-2001-2_92026-02-28
FAILMaxSetPacking → MISmaximumindependentset_maximumsetpacking.rs:90num_edges = "num_sets"Intersection graph: worst case C(n,2) = O(n²)num_edges = "num_sets^2"Gavril 1972, DOI:10.1137/02010132026-02-28
FAILSAT → k-SATsat_ksat.rs:114-117num_clauses = "num_clauses + num_literals"Recursive padding underestimates; unit clause → 4 output clausesnum_clauses = "4 * num_clauses + num_literals", num_vars = "num_vars + 3 * num_clauses + num_literals"Sipser 2012, Theorem 7.322026-02-28
FAILFactoring → CircuitSATfactoring_circuit.rs:177-180num_variables = "num_bits_first * num_bits_second"Each cell creates 6 assignments+variables, plus m+n inputs"6 * num_bits_first * num_bits_second + num_bits_first + num_bits_second"Paar & Pelzl 2010, DOI:10.1007/978-3-642-04101-32026-02-28
PASSMIS ↔ MVCnum_vertices = "num_vertices", num_edges = "num_edges"Gallai 1959; Garey & Johnson 19792026-02-28
PASSk-SAT → SATnum_clauses = "num_clauses", num_vars = "num_vars", num_literals = "num_literals"Trivial embedding2026-02-28
PASSFactoring → ILPnum_vars = "2m + 2n + mn", num_constraints = "3mn + m + n + 1"McCormick 1976, DOI:10.1007/BF015806652026-02-28