元のグラフG = (V,E)
をSET
、目的のノードのセット ( SET <= V
)とします。
G' = (V',E')
とどこでV' = SET
グラフを作成するE' = { (u,v) | (u,v) is in E and u,v is in SET }
グラフG'
が接続されている場合は、すべての要素のクラスターがあります。
最大クラスターは、 の最大連結成分ですG'
。
最大の連結成分を見つけることは、フラッド フィルのようなもので行うことができます。
(注、最初にフラッド フィルを制限付きで使用すると、G'
実際に作成する必要なく のグラフ作成を調整できます)。
BFSを使用してクラスタを検索する疑似コード:
int maximalCluster(E,SET): //SET is the set of desired nodes, E is the edges in G.
roots <- new map<node,interger>
for each node n in SET:
//run a BFS for each root,
//and count the total number of elements reachable from it
queue <- { n }
roots.put(n,1)
while (queue is not empty):
curr <- queue.takeFirst()
for each edge (curr,u) in E:
if (u is in SET):
SET.delete(u)
queue.add(u)
roots.put(roots.get(n) + 1)
return max { roots.get(v) | for each v in roots.keys }
上記の疑似コードは を生成しませんがG'
、ノードが SET にあるエッジのみをチェックすることでシミュレートします。