Open math1um opened 6 years ago
I would propose a slightly optimised algorithm. The function matching
by default returns a maximal matching. When you compute the matching number using that function and you get a perfect matching, you already have a list of edges which are included in a perfect matching. Next you can proceed as described but just for the edges for which it is not yet known that they are in a perfect matching. In each step you can get new edges which are in a perfect matching. This will greatly reduce the number of times a subgraph has to be created and a matching number needs to be computed.
An even better approach might be to never compute a subgraph. The matching
function can handle weighted graphs. You can proceed as I mentioned before, but after the initial matching, mark some egdes as being in a perfect matching. Then pick an edge e
that is not yet known to be in a perfect matching. Give it weight 2|E|
and all other edges weight 1. If there is a perfect matching containing e
, then it function will now have to return it, because it has maximal weight. There might again potentially be new edges, and they should also be marked as already in a perfect matching.
This approach avoids creating subgraphs which is an expensive process.
The current matching_covered should become is_matching_robust, as-is. (For a robustness reference, see Sudakov; https://people.math.ethz.ch/~sudakovb/robustness-of-graph-properties.pdf )
The existing definition of matching_covered is still a useable concept. The current definition should be renamed matching_robust
should be renamed is_matching_covered
the definition should be: matching covered iff every edge is in some perfect matching. (so the algorithm would be:
a. find the matching number nu b. check that nu = order/2 (and thus the graph has a perfect matching) c. for each edge vw, let G' be the graph formed by removing vertices v and w d. find the matching number of G': if it isn't nu-1 return False e. if it passes the test for each edge, return True
this definition is in Robin Thomas' lecture notes on matching: http://people.math.gatech.edu/~thomas/TEACH/7510/match.pdf
also used by Lovasz in: Lovász, László. "Ear-decompositions of matching-covered graphs." Combinatorica 3.1 (1983): 105-117.
eliminate the #comment too - this definition is the SAME as 1-factor-covered ( a 1-factor is a perfect matching)
update stored computations of is_matching_covered (these will not be the same - the existing algorithm doesn't capture the above definition).
add a new property: is_generalized_matching_covered
a graph is_generalized_matching_covered iff every edge is in a maximum (so not necessarily perfect) matching. so, for example, C5 is not matching covered (it doesn't have a perfect matching) but is generalized_matching_covered. the matching number is 2, and every edge is in some matching with 2 edges.