繁体   English   中英

dijkstra最短路径算法的时间复杂度是否取决于所使用的数据结构?

[英]Does time complexity of dijkstra's algorithm for shortest path depends on data structure used?

存储图的一种方法是将节点实现为结构,例如

struct node {
int vertex; node* next; 
};

顶点存储顶点号,下一个包含到另一个节点的链接。

我可以想到的另一种方法是将其实现为矢量,例如

vector<vector< pair<int,int> > G;

现在,在将Dijkstra的算法应用于最短路径时,我们需要建立优先级队列和其他所需的数据结构,例如情况2(向量实现)。 上面两种不同的应用图方法的复杂度是否会有所不同? 哪一个更好?

编辑:在第一种情况下,每个节点都与可从给定节点直接访问的节点的链表关联。 在第二种情况下,G.size()是图形G [i]的顶点数。size()是可直接从索引为i G [i] [j]的顶点到达的顶点数。从顶点i G [i] [j] .j可达的第j个顶点是从顶点i到顶点G [i] [j]的边的长度。

两者都是邻接表表示 如果正确实施,那将导致相同的时间复杂度。 如果使用邻接矩阵表示法,您将获得不同的时间复杂度。

更详细地讲-这归结为数组( vector )和链表之间的区别 当您要做的是遍历整个集合(即顶点的邻居)时,就像您在Dijkstra算法中所做的那样,无论您使用的是数组还是链接的,这都需要线性时间( O(n) )。名单。

Wikipedia所述 ,运行Dijkstra算法的结果复杂度为:
在任何一种情况下, O(|E| log |V|)带有二进制堆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM