Intersection number (graph theory)
In the mathematical field of graph theory, the intersection number of a graph G = (V,E) is the smallest number of elements in a representation of G as an intersection graph of finite sets. Equivalently, it is the smallest number of cliques needed to cover all of the edges of G.[1][2]
Contents
Intersection graphs
Let F be a family of sets (allowing sets in F to be repeated); then the intersection graph of F is an undirected graph that has a vertex for each member of F and an edge between each two members that have a nonempty intersection. Every graph can be represented as an intersection graph in this way.[3] The intersection number of the graph is the smallest number k such that there exists a representation of this type for which the union of F has k elements.[1] The problem of finding an intersection representation of a graph with a given number of elements is known as the intersection graph basis problem.[4]
Clique edge covers
An alternative definition of the intersection number of a graph G is that it is the smallest number of cliques in G (complete subgraphs of G) that together cover all of the edges of G.[1][5] A set of cliques with this property is known as a clique edge cover or edge clique cover, and for this reason the intersection number is also sometimes called the edge clique cover number.[6]
The equality of the intersection number and the edge clique cover number is straightforward to prove. In one direction, suppose that G is the intersection graph of a family F of sets whose union U has k elements. Then for any element x of U, the subset of vertices of G corresponding to sets that contain x forms a clique: any two vertices in this subset are adjacent, because their sets have a nonempty intersection containing x. Further, every edge in G is contained in one of these cliques, because an edge corresponds to a nonempty intersection and an intersection is nonempty if it contains at least one element of U. Therefore, the edges of G can be covered by k cliques, one per element of U. In the other direction, if a graph G can be covered by k cliques, then each vertex of G may be represented by the set of cliques that contain that vertex.[5]
Upper bounds
Trivially, a graph with m edges has intersection number at most m, for each edge forms a clique and these cliques together cover all the edges.[7]
It is also true that every graph with n vertices has intersection number at most n2/4. More strongly, the edges of every n-vertex graph can be partitioned into at most n2/4 cliques, all of which are either single edges or triangles.[2][5] This generalizes Mantel's theorem that a triangle-free graph has at most n2/4 edges, for in a triangle-free graph the only optimal clique edge cover has one clique per edge and therefore the intersection number equals the number of edges.[2]
An even tighter bound is possible when the number of edges is strictly greater than n2/4. Let p be the number of pairs of vertices that are not connected by an edge in the given graph G, and let t be the unique integer for which t(t − 1) ≤ p < t(t + 1). Then the intersection number of G is at most p + t.[2][8]
Graphs that are the complement of a sparse graph have small intersection numbers: the intersection number of any n-vertex graph G is at most 2e2(d + 1)2ln n, where e is the base of the natural logarithm and d is the maximum degree of the complement graph of G.[9]
Computational complexity
Testing whether a given graph G has intersection number at most a given number k is NP-complete.[4][10][11] Therefore, it is also NP-hard to compute the intersection number of a given graph.
The problem of computing the intersection number is, however, fixed-parameter tractable: that is, there is a function f such that, when the intersection number is k, the time to compute it is at most the product of f(k) and a polynomial in n. This may be shown by observing that there are at most 2k distinct closed neighborhoods in the graph – two vertices that belong to the same set of cliques have the same neighborhood – and that the graph formed by selecting one vertex per closed neighbood has the same intersection number as the original graph. Therefore, in polynomial time the input can be reduced to a smaller kernel with at most 2k vertices; applying an exponential time backtracking search procedure to this kernel leads to a function f that is double exponential in k.[12] The double-exponential dependence on k cannot be reduced to single exponential by a kernelization of polynomial size, unless the polynomial hierarchy collapses,[13] and if the exponential time hypothesis is true then double-exponential dependence is necessary regardless of whether kernelization is used.[14]
More efficient algorithms are also known for certain special classes of graphs. The intersection number of an interval graph is always equal to its number of maximal cliques, which may be computed in polynomial time.[15][16] More generally, in chordal graphs, the intersection number may be computed by an algorithm that considers the vertices in an elimination ordering of the graph and that, for each vertex v, forms a clique for v and its later neighbors whenever at least one of the edges incident to v is not covered by any earlier clique.[16]
See also
- Bipartite dimension, the smallest number of bicliques needed to cover all edges of a graph
- Clique cover, the NP-complete problem of finding a small number of cliques that cover all vertices of a graph
References
- ↑ 1.0 1.1 1.2 Lua error in package.lua at line 80: module 'strict' not found..
- ↑ 2.0 2.1 2.2 2.3 Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ 4.0 4.1 Lua error in package.lua at line 80: module 'strict' not found., Problem GT59.
- ↑ 5.0 5.1 5.2 Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found.. As cited by Roberts (1985).
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found.. As cited by Roberts (1985).
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Lua error in package.lua at line 80: module 'strict' not found.. As cited by Roberts (1985).
- ↑ 16.0 16.1 Lua error in package.lua at line 80: module 'strict' not found..