我有一个算法,可以通过给定的顶点创建包含所有可能子图的列表。虽然不完美,但我认为它应该能正常工作。问题是当我尝试计算其时间复杂度时会迷失方向。
我想到了类似于
使用的 powerSet() 算法应该是
我想到了类似于
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);
}
}