n-顶点子图枚举的时间复杂度
|
我有一种算法,可以通过给定顶点在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);
}
}
没有找到相关结果
已邀请:
1 个回复
挂帘妈乡