This work builds upon Efficient Edge Dominating Set Approximation for Sparse Graphs.
The Edge Dominating Set (EDS) problem is a classical problem in graph theory and combinatorial optimization. Given an undirected graph
A set
Find an edge dominating set
-
NP-Hard: The decision version of EDS ("Does a graph
$G$ have an edge dominating set of size$k$ ?") is NP-complete. - Approximation: There exists a 2-approximation algorithm for EDS (i.e., a solution at most twice the optimal size).
- Exact Solutions: Solvable in exponential time via brute-force or more efficient algorithms like branch-and-bound.
- Network design and fault tolerance.
- Wireless sensor networks (efficient coverage).
- Scheduling and resource allocation problems.
-
Weighted Edge Dominating Set: Edges have weights, and the goal is to minimize the total weight of
$D$ . -
Connected Edge Dominating Set: Requires
$D$ to induce a connected subgraph. -
Efficient Edge Dominating Set: Imposes additional constraints on the structure of
$D$ .
- Vertex Cover: A vertex cover indirectly dominates edges, while EDS directly dominates them.
- Dominating Set: A vertex-based variant where vertices dominate neighboring vertices.
Consider a graph
- A minimal edge dominating set:
$D = {(2,3)}$ , since:- Edge (1,2) is adjacent to (2,3).
- Edge (3,4) is adjacent to (2,3).
- Greedy Approach: Iteratively select edges covering the most undominated edges.
- Integer Linear Programming (ILP): Formulate EDS as an optimization problem.
-
Fixed-Parameter Tractability (FPT): Solvable in
$O^*(c^k)$ time for some constant$c$ .
- Finding improved approximation ratios or exact algorithms for special graph classes (e.g., planar graphs, bipartite graphs).
- Investigating parameterized complexity further.
- Garey & Johnson, Computers and Intractability (1979).
- G. F. Italiano et al., Exact and Approximate Algorithms for Edge Dominating Set.
Input: A Boolean Adjacency Matrix
Answer: Find a Minimum Edge Dominating Set.
c1 | c2 | c3 | c4 | c5 | |
---|---|---|---|---|---|
r1 | 0 | 0 | 1 | 0 | 1 |
r2 | 0 | 0 | 0 | 1 | 0 |
r3 | 1 | 0 | 0 | 0 | 1 |
r4 | 0 | 1 | 0 | 0 | 0 |
r5 | 1 | 0 | 1 | 0 | 0 |
The input for undirected graph is typically provided in DIMACS format. In this way, the previous adjacency matrix is represented in a text file using the following string representation:
p edge 5 4
e 1 3
e 1 5
e 2 4
e 3 5
This represents a 5x5 matrix in DIMACS format such that each edge
e W V
where the fields W and V specify the endpoints of the edge while the lower-case character e
signifies that this is an edge descriptor line.
Example Solution:
Edge Dominating Set Found (3, 5), (2, 4)
: Edges (3, 5)
, and (2, 4)
constitute an optimal solution.
- Python ≥ 3.10
pip install loynaz
-
Clone the repository:
git clone https://github.com/frankvegadelgado/loynaz.git cd loynaz
-
Run the script:
edge -i ./benchmarks/testMatrix1
utilizing the
edge
command provided by Loynaz's Library to execute the Boolean adjacency matrixloynaz\benchmarks\testMatrix1
. The filetestMatrix1
represents the example described herein. We also support.xz
,.lzma
,.bz2
, and.bzip2
compressed text files.Example Output:
testMatrix1: Edge Dominating Set Found (3, 5), (2, 4)
This indicates edges
(3, 5), (2, 4)
form a edge dominating set.
Use the -c
flag to count the edges in the edge dominating set:
edge -i ./benchmarks/testMatrix2 -c
Output:
testMatrix2: Edge Dominating Set Size 3
Display help and options:
edge -h
Output:
usage: edge [-h] -i INPUTFILE [-a] [-b] [-c] [-v] [-l] [--version]
Compute the Approximate Edge Dominating Set for undirected graph encoded in DIMACS format.
options:
-h, --help show this help message and exit
-i INPUTFILE, --inputFile INPUTFILE
input file path
-a, --approximation enable comparison with a polynomial-time approximation approach within a factor of at most 2
-b, --bruteForce enable comparison with the exponential-time brute-force approach
-c, --count calculate the size of the edge dominating set
-v, --verbose anable verbose output
-l, --log enable file logging
--version show program's version number and exit
Batch execution allows you to solve multiple graphs within a directory consecutively.
To view available command-line options for the batch_edge
command, use the following in your terminal or command prompt:
batch_edge -h
This will display the following help information:
usage: batch_edge [-h] -i INPUTDIRECTORY [-a] [-b] [-c] [-v] [-l] [--version]
Compute the Approximate Edge Dominating Set for all undirected graphs encoded in DIMACS format and stored in a directory.
options:
-h, --help show this help message and exit
-i INPUTDIRECTORY, --inputDirectory INPUTDIRECTORY
Input directory path
-a, --approximation enable comparison with a polynomial-time approximation approach within a factor of at most 2
-b, --bruteForce enable comparison with the exponential-time brute-force approach
-c, --count calculate the size of the edge dominating set
-v, --verbose anable verbose output
-l, --log enable file logging
--version show program's version number and exit
A command-line utility named test_edge
is provided for evaluating the Algorithm using randomly generated, large sparse matrices. It supports the following options:
usage: test_edge [-h] -d DIMENSION [-n NUM_TESTS] [-s SPARSITY] [-a] [-b] [-c] [-w] [-v] [-l] [--version]
The Loynaz Testing Application using randomly generated, large sparse matrices.
options:
-h, --help show this help message and exit
-d DIMENSION, --dimension DIMENSION
an integer specifying the dimensions of the square matrices
-n NUM_TESTS, --num_tests NUM_TESTS
an integer specifying the number of tests to run
-s SPARSITY, --sparsity SPARSITY
sparsity of the matrices (0.0 for dense, close to 1.0 for very sparse)
-a, --approximation enable comparison with a polynomial-time approximation approach within a factor of at most 2
-b, --bruteForce enable comparison with the exponential-time brute-force approach
-c, --count calculate the size of the edge dominating set
-w, --write write the generated random matrix to a file in the current directory
-v, --verbose anable verbose output
-l, --log enable file logging
--version show program's version number and exit
- Python implementation by Frank Vega.
- MIT License.