Dijkstra算法的时间复杂度

时间:2020-06-03 19:58:15

标签: time-complexity runtime dijkstra

当我在最坏的情况下使用队列在未加权图上阅读Dijkstra算法的时间复杂度为O(n2)时。我认为这是因为od bfs和dfs。 BFS在标记阶段处理所有顶点,而dfs用于回溯。它们都具有线性时间复杂度。但是我不确定这种逻辑是否正确。

对于加权图,我也知道时间复杂度是O(EVlogV),其中E是边和V顶点。我认为这是因为优先级队列,我了解优先级队列的工作原理,但仍然不了解O表示法。

1 个答案:

答案 0 :(得分:0)

Dijkstra对于非加权图不是必需的。您可以简单地做一个BFS / DFS(无论您喜欢哪个,它们都是O(E + V))。

Big-O表示一种算法的“时间复杂度”。换句话说,随着问题参数的增加,算法的运行时间如何增加?让我们看几个例子:

int two_plus_n(int n){
    return 2+n;
}

此算法为O(1),因为无论N是多少,该算法都会在恒定的时间内运行。

int bad_2_times_n(int n){
    int ans = 0;
    for(int i=0;i<n;i++)
        ans+=2
    return ans;
}

此算法为O(n),因为随着N的增加,步数以N的线性速率增加。 大O表示法会随着更复杂的算法而变得复杂。我建议,如果您不完全了解该概念,则应退出像Dijkstra一样复杂的算法,并加强对运行时分析的理解。