Skip to content

[Rule] Optimal Linear Arrangement to Consecutive Ones Matrix Augmentation #434

@isPANN

Description

@isPANN

Source: Decision<OptimalLinearArrangement> (decision variant: graph G, bound K)
Target: Consecutive Ones Matrix Augmentation (decision)
Motivation: Establishes NP-completeness of CONSECUTIVE ONES MATRIX AUGMENTATION via polynomial-time reduction from OPTIMAL LINEAR ARRANGEMENT (GT42). The reduction encodes a vertex-ordering problem as a matrix-augmentation problem: given the vertex-edge incidence matrix of the graph, a linear arrangement with total edge length at most K corresponds to a column permutation under which at most K − |E| zero-to-one flips achieve the consecutive ones property.
Reference: Garey & Johnson, Computers and Intractability, problem SR16 (p. 229); transformation from OPTIMAL LINEAR ARRANGEMENT (GT42, p. 200).

Decision-vs-Decision Framing

Both endpoints of this reduction are decision problems with Value = Or:

  • Source is Decision<OptimalLinearArrangement>: a graph G = (V, E) plus a decision bound k. It is YES iff G admits a linear arrangement f : V → {1, …, |V|} (a bijection) with total edge length sum_{{u,v} in E} |f(u) − f(v)| ≤ k.
  • Target is ConsecutiveOnesMatrixAugmentation: a binary matrix A plus a nonnegative bound bound. It is YES iff some column permutation of A plus at most bound zero-to-one flips yields the consecutive ones property (every row's 1's are contiguous).

The base OptimalLinearArrangement model in the codebase is the optimization variant (Value = Min<usize>, no bound). This reduction is stated against the decision variant Decision<OptimalLinearArrangement>, which carries the bound k. See the Prerequisite section below.

Prerequisite

Decision<OptimalLinearArrangement> is not yet registered in the codebase. The implementation PR for this rule must add it first, following the precedents at src/models/graph/minimum_vertex_cover.rs and src/models/graph/minimum_dominating_set.rs:

  1. impl ... DecisionProblemMeta for OptimalLinearArrangement<SimpleGraph> with const DECISION_NAME = "DecisionOptimalLinearArrangement";
  2. Inherent getters on Decision<OptimalLinearArrangement<SimpleGraph>>:
    • num_vertices() -> usize (delegates to inner().num_vertices())
    • num_edges() -> usize (delegates to inner().num_edges())
    • k() -> usize (the decision bound, (*self.bound()).try_into().unwrap_or(0))
  3. register_decision_variant!(OptimalLinearArrangement<SimpleGraph>, "DecisionOptimalLinearArrangement", ..., size_getters: [("num_vertices", num_vertices), ("num_edges", num_edges)]).

The reduction impl ReduceTo<ConsecutiveOnesMatrixAugmentation> for Decision<OptimalLinearArrangement<SimpleGraph>> then references the getters num_vertices, num_edges, and k.

GJ Source Entry

[SR16] CONSECUTIVE ONES MATRIX AUGMENTATION
INSTANCE: An m x n matrix A of 0's and 1's and a positive integer K.
QUESTION: Is there a matrix A', obtained from A by changing K or fewer 0 entries to 1's, such that A' has the consecutive ones property?
Reference: [Booth, 1975], [Papadimitriou, 1976a]. Transformation from OPTIMAL LINEAR ARRANGEMENT.
Comment: Variant in which we ask instead that A' have the circular ones property is also NP-complete.

Reduction Algorithm

Summary:
Given a Decision<OptimalLinearArrangement> instance (G = (V, E), k), construct a ConsecutiveOnesMatrixAugmentation instance as follows.

Let n = |V| (num_vertices) and m = |E| (num_edges). We build the edge-vertex incidence matrix of G.

  1. Matrix construction: Construct the m x n binary matrix A where rows correspond to edges and columns to vertices. For edge e_i = {u, v}, set A[i][u] = 1 and A[i][v] = 1, and all other entries in row i to 0. Each row has exactly two 1's.

  2. Bound: Set the target bound = k − m, where k is the source decision bound and m = num_edges. (Handling of k < m and m = 0 is covered under Edge Inputs below.)

  3. Intuition: A column permutation is exactly a vertex ordering f : V → {1, …, n}. In row i for edge {u, v}, the two 1's land at positions f(u) and f(v). Making this row consecutive requires filling all 0's strictly between them: |f(u) − f(v)| − 1 flips. Summed over all rows, the augmentation cost under permutation f is sum_{{u,v} in E} (|f(u) − f(v)| − 1) = (sum_{{u,v} in E} |f(u) − f(v)|) − m. This matches the model's per-row cost last − first + 1 − one_count (with one_count = 2, that is |f(u) − f(v)| − 1).

  4. Correctness (forward / YES → YES): If G has an arrangement f with sum_{{u,v} in E} |f(u) − f(v)| ≤ k, then using f as the column permutation and filling gaps within each row requires sum |f(u) − f(v)| − m ≤ k − m = bound flips. So the target is YES.

  5. Correctness (reverse / YES → YES): If A can be augmented to C1P with at most bound flips, the C1P column permutation defines a vertex ordering f. Each edge row needs |f(u) − f(v)| − 1 flips, so total edge length is flips + m ≤ bound + m = k. So the source decision is YES.

Hence Decision<OptimalLinearArrangement>(G, k) is YES iff ConsecutiveOnesMatrixAugmentation(A, k − m) is YES.

Time complexity of reduction: O(n * m) to construct the incidence matrix.

Edge Inputs

The target model try_new (see src/models/algebraic/consecutive_ones_matrix_augmentation.rs) requires all rows to have equal length and bound ≥ 0; it does not reject a 0-column or 0-row matrix per se, but a 0-row matrix loses the column/vertex identity (num_cols is read from the first row, so a 0 × n matrix reports num_cols = 0). Two degenerate inputs must be handled explicitly:

  • Edgeless graph (m = 0). The incidence matrix would be 0 × n, collapsing to a 0-column matrix that erases the vertex arrangement. Since with no edges the total edge length is 0 for every arrangement, the source decision is YES iff k ≥ 0 (always true for the decision bound). Emit a sentinel 1×1 matrix [[false]] with bound = max(0, k): this matrix already has C1P (cost 0 ≤ bound), so the target is trivially YES, preserving the source value. (A 1×1 all-zero matrix is the smallest instance accepted by try_new that keeps num_cols ≥ 1.)

  • Negative target bound (k < m). try_new rejects bound < 0. When k < m the source decision is NO (every arrangement costs at least m, since each of the m edges contributes at least 1). Encode a trivially-NO target. Note that ConsecutiveOnesMatrixAugmentation permutes columns, so a single row (or any matrix whose rows can be made simultaneously consecutive by some column permutation) is YES at bound = 0 — a naive [[true, false, true]] would be wrongly accepted with 0 flips after permuting its columns. Instead emit the 3×3 cyclic-overlap matrix [[true, true, false], [false, true, true], [true, false, true]] with bound = 0. Under every of the 6 column permutations the three rows cannot all be made consecutive at once: at least one row's two 1's straddle a 0, so the minimum augmentation cost is 1 > 0 for all permutations. This is a genuine NO at bound = 0, matching the source. The implementation should map any k < m instance to this fixed NO instance.

Note: isolated vertices (degree-0 vertices in a graph with m ≥ 1) are harmless — they simply produce an all-zero column, which is still a valid column and preserves the vertex/column correspondence.

Size Overhead

Symbols (all are real getters on the source Decision<OptimalLinearArrangement>):

  • num_vertices = |V|
  • num_edges = |E|
  • k = the source decision bound
Target metric (code name) Polynomial (using source getters)
num_rows num_edges
num_cols num_vertices
bound k - num_edges

Derivation: The incidence matrix has one row per edge (num_rows = num_edges) and one column per vertex (num_cols = num_vertices). The augmentation bound is the source decision bound minus the number of edges (bound = k − num_edges), reflecting the baseline cost of 1 flip per edge in any arrangement. (For the degenerate-input sentinels above the actual constructed sizes are the fixed 1×1 / 1×3 matrices; the overhead expressions describe the generic m ≥ 1, k ≥ m case used for asymptotic scaling.)

Validation Method

  • Closed-loop test: build a Decision<OptimalLinearArrangement> instance (G, k), reduce to ConsecutiveOnesMatrixAugmentation, solve the target with BruteForce (decision Or), extract the witness column permutation + flips, reconstruct the vertex arrangement on the source, and confirm the source decision value (Or) agrees.
  • YES case: path graph P_6 with k = 5. Incidence matrix is 5 × 6, bound = 5 − 5 = 0; the path incidence matrix already has C1P → YES on both sides.
  • NO case: the same graph with k = 4 (< m) routes to the fixed 3×3 cyclic-overlap NO sentinel ([[true, true, false], [false, true, true], [true, false, true]], bound = 0, min cost 1 over all column permutations); source decision is NO (every arrangement costs ≥ 5) → NO on both sides.
  • Edgeless case: G = ({0,1,2}, ∅), any k. Target is the [[false]] sentinel → YES, matching the always-YES source.

Example

Source instance (Decision<OptimalLinearArrangement>):
Graph G with 6 vertices {0,1,2,3,4,5} and 7 edges:

  • Edges: e0={0,1}, e1={1,2}, e2={2,3}, e3={3,4}, e4={4,5}, e5={0,3}, e6={2,5}
  • Decision bound k = 11

Constructed target instance (ConsecutiveOnesMatrixAugmentation):
Matrix A (7 × 6), edge-vertex incidence matrix:

       v0 v1 v2 v3 v4 v5
e0:  [  1, 1, 0, 0, 0, 0 ]   (edge {0,1})
e1:  [  0, 1, 1, 0, 0, 0 ]   (edge {1,2})
e2:  [  0, 0, 1, 1, 0, 0 ]   (edge {2,3})
e3:  [  0, 0, 0, 1, 1, 0 ]   (edge {3,4})
e4:  [  0, 0, 0, 0, 1, 1 ]   (edge {4,5})
e5:  [  1, 0, 0, 1, 0, 0 ]   (edge {0,3})
e6:  [  0, 0, 1, 0, 0, 1 ]   (edge {2,5})

Target bound = k − m = 11 − 7 = 4.

Solution mapping (YES):

  • Column permutation (arrangement): f(0)=1, f(1)=2, f(2)=3, f(3)=4, f(4)=5, f(5)=6 (identity ordering v0,…,v5).
  • Rows e0–e4 already have consecutive 1's (adjacent vertices) → 0 flips each.
  • Row e5 (edge {0,3}): 1's at columns 0 and 3, fill positions 1,2 → 2 flips.
  • Row e6 (edge {2,5}): 1's at columns 2 and 5, fill positions 3,4 → 2 flips.
  • Total flips: 0+0+0+0+0+2+2 = 4 = bound. Target YES.

Verification:

  • Total edge length: |1−2|+|2−3|+|3−4|+|4−5|+|5−6|+|1−4|+|3−6| = 1+1+1+1+1+3+3 = 11 = k. Source decision YES (≤ 11).
  • Total flips = 11 − 7 = 4 = bound. Consistent.

NO sub-case (same graph, k = 10): bound = 10 − 7 = 3. The minimum augmentation cost over all column permutations equals optimal_OLA − m = 11 − 7 = 4 > 3 (the optimal arrangement cost for this graph is 11, brute-force verified), so the target is NO. Correspondingly the source has no arrangement of total length ≤ 10 → source decision NO. Both sides agree.

References

  • [Booth, 1975]: [Booth1975] K. S. Booth (1975). "{PQ} Tree Algorithms". University of California, Berkeley. (Published form: K. S. Booth, "Approximation of the Consecutive Ones Matrix Augmentation Problem," SIAM J. Comput. 14(1):214 (1987), DOI 10.1137/0214052.)
  • [Papadimitriou, 1976a]: [Papadimitriou1976a] Christos H. Papadimitriou (1976). "The {NP}-completeness of the bandwidth minimization problem". Computing 16, pp. 263-270. (Companion reference cited by G&J for SR16; the C1MA construction itself is Booth's.)
  • [Garey, Johnson, and Stockmeyer, 1976]: [Garey1976g] M. R. Garey and D. S. Johnson and L. Stockmeyer (1976). "Some simplified {NP}-complete graph problems". Theoretical Computer Science 1, pp. 237-267.

Metadata

Metadata

Assignees

No one assigned

    Labels

    WrongruleA new reduction rule to be added.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions