4.10.4 Using a Vertex Set to Create a Bipartite Subgraph
You can create a bipartite subgraph by specifying a set of vertices (nodes), which are used as the left side. A bipartite subgraph has edges only between the left set of vertices and the right set of vertices. There are no edges within those sets, such as between two nodes on the left side. In the in-memory graph server (PGX), vertices that are isolated because all incoming and outgoing edges were deleted are not part of the bipartite subgraph.
The following figure shows a bipartite subgraph. No properties are shown.
The following examples create a bipartite subgraph from a simple graph consisting of
four vertices and four edges. The vertex ID values for the four vertices are
99
, 128
, 1908
and 333
respectively. See Figure 4-5 in About Filter Expressions for more information on the vertex and edge property values including the edge
direction between the vertices.
You must first create a vertex collection and fill it
with the vertices for the left side. In the example
shown, vertices with vertex ID values
333
and 99
are
added to the left side of the vertex collection.
Using the Shell to Create a Bipartite Subgraph
opg4j> s = graph.createVertexSet() ==> ... opg4j> s.addAll([graph.getVertex(333), graph.getVertex(99)]) ==> ... opg4j> s.size() ==> 2 opg4j> bGraph = graph.bipartiteSubGraphFromLeftSet(s) ==> PGX Bipartite Graph named sample-sub-graph-4
Using Java to Create a Bipartite Subgraph
import oracle.pgx.api.*; VertexSet<Integer> s = graph.createVertexSet(); s.addAll(graph.getVertex(333), graph.getVertex(99)); BipartiteGraph bGraph = graph.bipartiteSubGraphFromLeftSet(s);
When you create a subgraph, the in-memory graph server (PGX) automatically creates a Boolean vertex (node) property that indicates whether the vertex is on the left side. You can specify a unique name for the property.
The resulting bipartite subgraph looks like this:
Vertex with ID 1908
is excluded from the bipartite subgraph. The
only edge that connected that vertex extended from
128
to 1908
. The
edge was removed, because it violated the
bipartite properties of the subgraph. Vertex
1908
had no other edges, and so
was removed as well. Moreover, the edge from the
vertex with the ID 128
to the
vertex with ID 99
is not present
in the bipartite subgraph, because edges are only
allowed to go from left to right (and not from
right to left).
Parent topic: Creating Subgraphs