以下算法的复杂性是什么?

时间:2012-05-02 18:05:37

标签: java complexity-theory hamiltonian-cycle

该算法解决了哈密顿路径问题。 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!)?

1 个答案:

答案 0 :(得分:0)

这是算法枚举图的所有路径。

如果您要枚举图表中的所有路径,这应该会为您提供运行时的提示。在完整的图表中,确实有n!路径,所以这是一个下限。我会留给你说,如果它也是一个上限。

FWIW - 问题可在O(2 ^ n)

中解决