我只知道是O(n2)不知道怎么算来的,请详细讲一下
网上一搜全都是这句话:
Dijkstra 算法最简单的实现方法是用一个链表或者数组来存储所有顶点的集合 Q,所以搜索 Q 中最小元素的運算(Extract-Min(Q))只需要线性搜索 Q 中的所有元素这样的话算法的运行时间是 O(n2)。
没说怎么得到这个n2的.
行2--4的初始化对n个顶点进行显然是O(n)
7行n个顶點入队列O(n)
8行--14行,从8行可以看出进行了n遍循环每遍在第九行调用一次ExtractMin过程,ExtractMin过程需要搜寻邻接表每一次需要搜寻整个数组,所以一佽操作时间是O(n);11行到14行对节点u的邻接表中的边进行检查总共有|E|次(总共.每条边最多检查一次),因此是O(E);合起来就是O(E+n*n) = O(n^2);