Class: GraphMatching::Graph::Bigraph

Inherits:
Graph
  • Object
show all
Defined in:
lib/graph_matching/graph/bigraph.rb

Overview

A bipartite graph (or bigraph) is a graph whose vertices can be divided into two disjoint sets U and V such that every edge connects a vertex in U to one in V.

Direct Known Subclasses

WeightedBigraph

Instance Method Summary collapse

Methods inherited from Graph

[], #adjacent_vertex_set, #connected?, #initialize, #max_v, #print, #vertexes, #vertexes_must_be_integers

Constructor Details

This class inherits a constructor from GraphMatching::Graph::Graph

Instance Method Details

#maximum_cardinality_matchingObject



13
14
15
# File 'lib/graph_matching/graph/bigraph.rb', line 13

def maximum_cardinality_matching
  Algorithm::MCMBipartite.new(self).match
end

#partitionObject

‘partition` either returns two disjoint (complementary) proper subsets of vertexes or raises a NotBipartite error.

An empty graph is partitioned into two empty sets. This seems natural, but unfortunately is not the behavior of RGL’s new ‘bipartite_sets` function. So, we have to check for the empty case, but at least we don’t have to implement the algorithm ourselves anymore!



26
27
28
29
30
31
32
33
34
# File 'lib/graph_matching/graph/bigraph.rb', line 26

def partition
  if empty?
    [Set.new, Set.new]
  else
    arrays = bipartite_sets
    raise NotBipartite if arrays.nil?
    [Set.new(arrays[0]), Set.new(arrays[1])]
  end
end