在维基百科中他们在标题下说:Dijstras算法的“运行时间”是
O(| V | ^ 2 + | E | * decreaseKey)= O(| V |)
这是我第一次分析算法的时间复杂度,但在我看来应该是:
所以我们将
O(V)*(O(| V |)+ O(| E |) C)= O(| V | ^ 2 + O(| V | | E | * C) ))= O(| V | ^ 2)
我的问题是关于这个词:
O(| V | * | E | * C)
在维基百科,他们甚至不打扰| V |因素有什么原因?我的分析错了吗?
答案 0 :(得分:2)
你的逻辑中存在的问题是:
一旦找到Min,然后检查所有可以采取O(| E |)
的邻居
单个节点只能有O(| V |)个邻居,而不能是O(| E |)。 E是所有图中的边。