4.11.4 頂点集合を使用した2部サブグラフの作成

2部サブグラフは、左側に使用される頂点(ノード)集合を指定して作成できます。2部サブグラフには、左側の頂点集合と右側の頂点集合の間にのみエッジがあります。左側の2つのノード間など、これらの集合内にエッジはありません。グラフ・サーバー(PGX)では、入力および出力エッジがすべて削除されたために分離された頂点は、2部サブグラフの一部ではありません。

次の図に、2部サブグラフを示します。プロパティは示していません。

次の例では、4つの頂点と4つのエッジで構成される単純なグラフから、2部サブグラフを作成します。4つの頂点の頂点ID値は、それぞれ991281908および333です。頂点間のエッジ方向など、頂点とエッジのプロパティ値の詳細は、図4-5フィルタ式についてを参照してください。

最初に頂点コレクションを作成し、その左側に頂点を追加する必要があります。この例では、頂点ID値が333および99の頂点が頂点コレクションの左側に追加されます。

シェルを使用した2部サブグラフの作成

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

Javaを使用した2部サブグラフの作成

import oracle.pgx.api.*;
 
VertexSet<Integer> s = graph.createVertexSet();
s.addAll(graph.getVertex(333), graph.getVertex(99));
BipartiteGraph bGraph = graph.bipartiteSubGraphFromLeftSet(s);

サブグラフを作成すると、グラフ・サーバー(PGX)によって、頂点が左側にあるかどうかを示すブール頂点(ノード)プロパティが自動的に作成されます。このプロパティには一意の名前を指定できます。

結果の2部サブグラフは次のようになります。

IDが1908の頂点は2部サブグラフから除外されます。頂点に繋がっている唯一のエッジは、128から1908に伸びています。エッジはサブグラフの2部プロパティに反しているため削除されています。頂点1908にはその他のエッジがないため、これも削除されています。さらに、IDが128の頂点からIDが99の頂点までのエッジは、2部サブグラフに存在しません。これは、エッジは左から右にしか移動できないためです(右から左ではありません)。