Skip to content

[Model] MinimumIntersectionGraphBasis #837

@isPANN

Description

@isPANN

Motivation

INTERSECTION GRAPH BASIS (P70) from Garey & Johnson, A1.5 GT59. A classical NP-hard problem useful for reductions. The intersection number of a graph is a fundamental invariant in intersection graph theory, equivalent to the edge clique cover number. Applications include database keyword conflict resolution (Kou et al., 1978) and intersection graph recognition.

Associated rules:

Definition

Name: MinimumIntersectionGraphBasis
Reference: Garey & Johnson, Computers and Intractability, A1.5 GT59

Mathematical definition:

INSTANCE: Graph G = (V,E).
OBJECTIVE: Find the minimum cardinality of a set S and an assignment of subsets S[v] ⊆ S for each v ∈ V such that {u,v} ∈ E if and only if S[u] ∩ S[v] ≠ ∅.

The objective value is Min(|S|), the minimum universe size for an intersection representation of G.

Variables

  • Count: |V| * K_max (one binary variable per vertex-element pair, where K_max ≤ |E| is an upper bound on the universe size)
  • Per-variable domain: {0, 1}
  • Meaning: Variable (v, s) = 1 if element s ∈ S is included in the subset S[v] assigned to vertex v. The assignment is valid if: (1) for every edge {u,v} ∈ E, S[u] ∩ S[v] ≠ ∅; and (2) for every non-edge {u,v} ∉ E, S[u] ∩ S[v] = ∅. The objective minimizes |S|, the number of universe elements actually used.

Schema (data type)

Type name: MinimumIntersectionGraphBasis
Variants: (SimpleGraph, One) — unweighted, simple graph input

Field Type Description
graph SimpleGraph The input graph G = (V, E)

Notes:

  • This is an optimization problem: Value = Min<usize>.
  • Key getter methods: num_vertices() (= |V|), num_edges() (= |E|).
  • The intersection number equals the edge clique cover number.

Complexity

  • Decision complexity: NP-hard (Kou, Stockmeyer, and Wong, 1978; Orlin, 1976). Transformation from COVERING BY CLIQUES. NP-hard even for planar graphs and graphs of maximum degree 6. Polynomial for maximum degree ≤ 5.
  • Best known exact algorithm: FPT parameterized by solution size k with kernel of at most 2^k vertices, yielding 2^(2^O(k)) · n^O(1) time.
  • Concrete complexity expression: "num_edges^num_edges" (for declare_variants!; brute-force bound, since intersection number ≤ |E|)
  • References:
    • L.T. Kou, L.J. Stockmeyer, C.K. Wong (1978). "Covering Edges by Cliques with Regard to Keyword Conflicts among in a File." Comm. ACM 21(2), pp. 135-139.

Extra Remark

Full book text:

INSTANCE: Graph G = (V,E), positive integer K ≤ |E|.
QUESTION: Is G the intersection graph for a family of sets whose union has cardinality K or less, i.e., is there a K-element set S and for each v ∈ V a subset S[v] ⊆ S such that {u,v} ∈ E if and only if S[u] and S[v] are not disjoint?

Reference: [Kou, Stockmeyer, and Wong, 1978]. Transformation from COVERING BY CLIQUES.

How to solve

  • It can be solved by (existing) bruteforce. (Enumerate all possible subset assignments for increasing universe sizes; return the smallest universe that gives a valid intersection representation.)
  • It can be solved by reducing to integer programming. (Binary variables x_{v,s} for each vertex-element pair; constraints ensuring edges intersect and non-edges don't; binary variables y_s indicating element usage; minimize Σ y_s. Companion rule issue to be filed separately.)
  • Other: (TBD)

Example Instance

Input: Path graph P_4 on 4 vertices:
V = {0, 1, 2, 3}, E = {(0,1), (1,2), (2,3)}

Optimal intersection representation (|S| = 3):
Universe S = {a, b, c}:

  • S[0] = {a}
  • S[1] = {a, b}
  • S[2] = {b, c}
  • S[3] = {c}

Edge verification: S[0]∩S[1]={a}≠∅ ✓, S[1]∩S[2]={b}≠∅ ✓, S[2]∩S[3]={c}≠∅ ✓
Non-edge verification: S[0]∩S[2]=∅ ✓, S[0]∩S[3]=∅ ✓, S[1]∩S[3]=∅ ✓

Optimal value: Min(3) — the intersection number of P_4 equals its edge clique cover number (3 edges, each an edge-clique). No 2-element universe suffices because the 3 edges form 3 maximal cliques that pairwise share vertices.

Python validation script
# P4: 4 vertices, 3 edges
edges = [(0,1), (1,2), (2,3)]
non_edges = [(0,2), (0,3), (1,3)]

# Intersection representation with |S|=3
S = {0: {0}, 1: {0, 1}, 2: {1, 2}, 3: {2}}  # using integers for universe

# Check edges intersect
for u, v in edges:
    assert S[u] & S[v], f"Edge ({u},{v}) not covered"

# Check non-edges don't intersect
for u, v in non_edges:
    assert not (S[u] & S[v]), f"Non-edge ({u},{v}) falsely intersects"

print("Intersection representation verified: Min(3)")

Metadata

Metadata

Assignees

No one assigned

    Labels

    GoodAn issue passed all checks.modelA model problem to be implemented.

    Type

    No type

    Projects

    Status

    Done

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions