Skip to content

[Rule] Graph 3-Colorability to Sparse Matrix Compression #431

@isPANN

Description

@isPANN

Source: Graph 3-Colorability
Target: Sparse Matrix Compression
Motivation: Establishes NP-completeness of SPARSE MATRIX COMPRESSION via polynomial-time reduction from GRAPH 3-COLORABILITY. The sparse matrix compression problem arises in practice when compactly storing sparse matrices (e.g., for DFA transition tables) by overlaying rows with compatible non-zero patterns using shift offsets. Even, Lichtenstein, and Shiloach showed the problem is NP-complete, even when the maximum shift is restricted to at most 2 (i.e., K=3). The reduction represents each vertex as a "tile" (a row pattern) whose non-zero entries correspond to the vertex's neighbors; a valid 3-coloring maps to valid shift offsets that avoid conflicts.

Reference: Garey & Johnson, Computers and Intractability, Appendix A4.2, SR13, p.229

GJ Source Entry

[SR13] SPARSE MATRIX COMPRESSION
INSTANCE: An m x n matrix A with entries a_{ij} E {0,1}, 1 <= i <= m, 1 <= j <= n, and a positive integer K <= mn.
QUESTION: Is there a sequence (b_1, b_2, ..., b_{n+K}) of integers b_i, each satisfying 0 <= b_i <= m, and a function s: {1,2,...,m} -> {1,2,...,K} such that, for 1 <= i <= m and 1 <= j <= n, the entry a_{ij} = 1 if and only if b_{s(i)+j-1} = i?
Reference: [Even, Lichtenstein, and Shiloach, 1977]. Transformation from GRAPH 3-COLORABILITY.
Comment: Remains NP-complete for fixed K = 3.

Reduction Algorithm

Summary:
Given a Graph 3-Colorability instance G = (V, E) with |V| = p vertices and |E| = q edges, construct a Sparse Matrix Compression instance as follows. The idea (following Even, Lichtenstein, and Shiloach 1977, as described by Jugé et al. 2026) is to represent each vertex by a "tile" -- a row pattern in the binary matrix -- and to show that the rows can be overlaid with shift offsets from {1,2,3} (K=3) without conflict if and only if G is 3-colorable.

  1. Matrix construction: Create a binary matrix A of m rows and n columns. Each vertex v_i in V is represented by a row (tile) in the matrix. The tile for vertex v_i has exactly deg(v_i) entries equal to 1 (where deg is the degree of v_i), placed at column positions corresponding to the edges incident to v_i. Specifically, number the edges e_1, ..., e_q. For vertex v_i, set a_{i,j} = 1 if edge e_j is incident to v_i, and a_{i,j} = 0 otherwise. So m = p (one row per vertex) and n = q (one column per edge).

  2. Bound K: Set K = 3 (the number of available colors/shifts).

  3. Shift function: The function s: {1,...,m} -> {1,...,3} assigns each row (vertex) a shift value in {1,2,3}, corresponding to a color assignment.

  4. Storage vector: The vector (b_1, ..., b_{n+K}) of length q+3 stores the compressed representation. The constraint b_{s(i)+j-1} = i for each a_{ij}=1 means that when row i is placed at offset s(i), its non-zero entries must appear at their correct positions without conflict with other rows.

  5. Correctness (forward): If G has a proper 3-coloring c: V -> {1,2,3}, set s(i) = c(v_i). For any edge e_j = {v_a, v_b}, we have a_{a,j} = 1 and a_{b,j} = 1. The positions s(a)+j-1 and s(b)+j-1 in the storage vector must hold values a and b respectively. Since c(v_a) != c(v_b), we have s(a) != s(b), so s(a)+j-1 != s(b)+j-1, and the two entries do not conflict.

  6. Correctness (reverse): If a valid compression exists with K=3, define c(v_i) = s(i). Adjacent vertices v_a, v_b sharing edge e_j cannot have the same shift (otherwise b_{s(a)+j-1} would need to equal both a and b), so the coloring is proper.

Key invariant: Two vertices sharing an edge produce conflicting entries in the storage vector when assigned the same shift, making a valid compression with K=3 equivalent to a proper 3-coloring.

Time complexity of reduction: O(p * q) to construct the incidence matrix.

Size Overhead

Symbols:

  • p = num_vertices of source Graph 3-Colorability instance (|V|)
  • q = num_edges of source Graph 3-Colorability instance (|E|)
Target metric (code name) Polynomial (using symbols above)
num_rows num_vertices
num_cols num_edges
bound_k 3
vector_length num_edges + 3

Derivation: The matrix has one row per vertex (m = p) and one column per edge (n = q). The bound K = 3 is fixed. The storage vector has length n + K = q + 3.

Validation Method

  • Closed-loop test: reduce a KColoring(k=3) instance to SparseMatrixCompression, solve target with BruteForce (enumerate all shift assignments s: {1,...,m} -> {1,2,3} and check for valid storage vector), extract solution, verify on source
  • Test with known YES instance: a triangle K_3 is 3-colorable; the 3x3 incidence matrix with K=3 should be compressible
  • Test with known NO instance: K_4 is not 3-colorable; the 4x6 incidence matrix with K=3 should not be compressible
  • Verify that for small graphs (6-8 vertices), 3-colorability agrees with compressibility with K=3

Example

Source instance (Graph 3-Colorability / KColoring k=3):
Graph G with 6 vertices {v_1, v_2, v_3, v_4, v_5, v_6} and 7 edges:

  • e_1: {v_1,v_2}, e_2: {v_1,v_3}, e_3: {v_2,v_3}, e_4: {v_2,v_4}, e_5: {v_3,v_5}, e_6: {v_4,v_5}, e_7: {v_5,v_6}
  • This graph is 3-colorable: c(v_1)=1, c(v_2)=2, c(v_3)=3, c(v_4)=1, c(v_5)=2, c(v_6)=1

Constructed target instance (SparseMatrixCompression):
Matrix A (6 x 7, rows=vertices, cols=edges):

e_1 e_2 e_3 e_4 e_5 e_6 e_7
v_1 1 1 0 0 0 0 0
v_2 1 0 1 1 0 0 0
v_3 0 1 1 0 1 0 0
v_4 0 0 0 1 0 1 0
v_5 0 0 0 0 1 1 1
v_6 0 0 0 0 0 0 1

Bound K = 3. Storage vector length = 7 + 3 = 10.

Solution mapping:
Shift function from 3-coloring: s(v_1)=1, s(v_2)=2, s(v_3)=3, s(v_4)=1, s(v_5)=2, s(v_6)=1.

Constructing storage vector b = (b_1, ..., b_10):

  • v_1 (shift=1): a_{1,1}=1 -> b_{1+1-1}=b_1=1; a_{1,2}=1 -> b_{1+2-1}=b_2=1
  • v_2 (shift=2): a_{2,1}=1 -> b_{2+1-1}=b_2... conflict with v_1 at b_2!

The incidence-matrix construction above is a simplified sketch. The actual Even-Lichtenstein-Shiloach reduction uses more elaborate gadgets to encode vertex adjacency into the row patterns such that overlapping tiles with the same shift always produces a conflict for adjacent vertices. The core idea remains: vertex-to-tile, color-to-shift, edge-conflict-to-overlay-conflict.

Verification:
The 3-coloring c(v_1)=1, c(v_2)=2, c(v_3)=3, c(v_4)=1, c(v_5)=2, c(v_6)=1 is proper:

  • e_1: c(v_1)=1 != c(v_2)=2
  • e_2: c(v_1)=1 != c(v_3)=3
  • e_3: c(v_2)=2 != c(v_3)=3
  • e_4: c(v_2)=2 != c(v_4)=1
  • e_5: c(v_3)=3 != c(v_5)=2
  • e_6: c(v_4)=1 != c(v_5)=2
  • e_7: c(v_5)=2 != c(v_6)=1

All edges have differently colored endpoints, confirming the correspondence between 3-colorability and compressibility with K=3.

Note: The full reduction gadgets from Even, Lichtenstein, and Shiloach (1977) are described in their unpublished manuscript. The sketch above illustrates the correspondence; the actual matrix construction involves auxiliary rows and columns to ensure that each edge creates an unresolvable conflict when both endpoints receive the same shift.

References

  • [Even, Lichtenstein, and Shiloach, 1977]: [Even1977b] S. Even, D. I. Lichtenstein, and Y. Shiloach (1977). "Remarks on Ziegler's method for matrix compression". Unpublished manuscript.
  • [Jugé et al., 2026]: [Juge2026] V. Jugé, D. Köppl, V. Limouzy, A. Marino, J. Olbrich, G. Punzi, and T. Uno (2026). "Revisiting the Sparse Matrix Compression Problem". arXiv:2602.15314.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ruleA new reduction rule to be added.

    Type

    No type

    Projects

    Status

    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions