所以我一直试图分析我一直在研究的Dijkstras算法的特殊变体。我遇到了最糟糕的案件复杂性。
该算法使用Fibonacci堆,在正常Dijkstra的情况下,它将在O(E + V log V)中运行。
然而,这个实现需要在我们更新邻居的内部循环中进行查找。此查找将针对每个边执行,并且将处于对数时间,其中查找位于包含所有边的数据结构中。此图也有限制,没有节点将有超过4个邻居。
O(V log V)是外循环的复杂性,但我不确定内循环的最坏情况。我认为,因为图中的每个边都将被检查O(E)次,并且每个边将采用对数时间,它应该是E log E,它应该超过V log V和结果在O(E log E)算法的复杂性。
任何见解都会很棒!
答案 0 :(得分:0)
Fibonacci堆上的Decrease-Key的摊销复杂度为O(1),也就是说你有| E |对Fibonacci堆进行此类操作,总成本为O(E)。你也有| V | Extract-Min操作,每个操作花费O(lnV)。所以总成本是O(E + VlnV)。