特定の頂点を介して P 頂点で可能なすべてのサブグラフのリストを作成するアルゴリズムがあります。完璧ではありませんが、問題なく動作するはずです。問題は、その時間の複雑さを計算しようとすると迷子になることです。
のようなものを思いついT(p) = 2^d + 2^d * (n * T(p-1) )
たd=Δ(G), p=#vertices required, n=|V|
。本当にただの推測です。誰でもこれで私を助けることができますか?
使用される powerSet() アルゴリズムはO(2^d)
またはである必要がありますO(d*2^d)
。
private void connectedGraphsOnNVertices(int n, Set<Node> connectedSoFar, Set<Node> neighbours, List<Set<Node>> graphList) {
if (n==1) return;
for (Set<Node> combination : powerSet(neighbours)) {
if (connectedSoFar.size() + combination.size() > n || combination.size() == 0) {
continue;
} else if (connectedSoFar.size() + combination.size() == n) {
Set<Node> newGraph = new HashSet<Node>();
newGraph.addAll(connectedSoFar);
newGraph.addAll(combination);
graphList.add(newGraph);
continue;
}
connectedSoFar.addAll(combination);
for (Node node: combination) {
Set<Node> k = new HashSet<Node>(node.getNeighbours());
connectedGraphsOnNVertices(n, connectedSoFar, k, graphList);
}
connectedSoFar.removeAll(combination);
}
}