我正在阅读有关最短路径算法实现的一些内容,并且已经反复尝试使用Double-Bucket数据结构实现Dijkstra算法是一个很好的实现。
然而,我似乎无法找到双桶实现的实际含义,维基百科上的文章有点模糊。从我所见,它类似于哈希表/地图。我以前从未在数据结构或算法类中听说过这个。
我正在阅读的特定论文是这个,
Cherkassky,B。V.,Goldberg,A。V.,& Radzik,T。(1996)。最短路径算法:理论和实验评估。数学规划,73(2),129-174。
答案 0 :(得分:3)
桶数据结构是使用键值作为桶的索引的数据结构,并且将相同键值的项存储在相应桶中。当然,使用具有整数键值的桶数据结构是最有意义的。
假设B
是一个存储桶数据结构,以便存储桶B[x]
存储键值为x
的所有项目。
使用最短路径问题作为示例,如果Frontier集中有3个节点u
,v
和w
,则当前已知的最短距离为3,3和7,分别是B[3] = {u, v}
和B[7] = {w}
。
与最短路径问题相关的存储区数据结构的时间分析:
O(1)
O(1)
O(1)
O(c)
,其中c
是最大键值。因此,如果使用存储桶数据结构实现Dijkstra算法,则总时间复杂度为O(m + nc)
,其中m
为边数,n
为节点数。
双桶数据结构在大多数情况下是指桶数据结构,其中每个桶包含桶数据结构。