이 알고리즘은 해밀턴 경로 문제를 해결합니다. G
은 방향이 맞지 않은 그래프이며, v
시작점, G.size()
그래프 크기, G.get(v).gV
현재 버텍스의 모든 인접한 베셀입니다.다음 알고리즘의 복잡성은 무엇입니까?
static private void dfs(HashMap<Integer, Virsune> G, int v) {
path.push(v);
// add v to the current path
onPath[v] = true;
if (path.size() == G.size()) {
System.out.println(path);
Integer[] tmp = new Integer[G.size()];
System.arraycopy(path.toArray(), 0, tmp, 0, path.size());
hamPaths.add(tmp);
}
for (int w : G.get(v).gV) {
if (!onPath[w]) {
dfs(G, w);
}
}
path.pop();
onPath[v] = false;
}
// main method
dfs(G,0);
이 알고리즘의 복잡성은 O (n!)라고 할 수 있습니까?
그것은 O (! n)에 얼마나 많은 시간을 우리가 각 노드에서 찾고 만들 것입니다 무엇 (2^n)이 O에서 풀 수있다? – ControlAltDel