什么是桶或双桶数据结构?

Car*_*son 5 algorithm dijkstra bucket data-structures

我正在阅读有关最短路径算法实现的一些内容,并且已经反复尝试使用Double-Bucket数据结构实现Dijkstra算法是一个很好的实现.

但是我似乎无法找到双桶实现的实际含义,维基百科上的文章有点模糊.从我所看到的它类似于哈希表/地图.我之前从未在数据结构或算法类中听说过这个.

我正在阅读的特定论文是这样的,

Cherkassky,BV,Goldberg,AV,&Radzik,T.(1996).最短路径算法:理论和实验评估.数学规划,73(2),129-174.

woo*_*919 8

桶数据结构是将键值作为桶的索引,将相同键值的项存储在对应的桶中的数据结构。自然地,使用带有整数键值的桶数据结构是最有意义的。

假设B是一个bucket数据结构,bucketB[x]存储键值为 的所有项目x

以最短路径问题为例,如果您有 3 个节点uv并且w在 Frontier 集中,其中当前已知的最短距离分别为 3、3 和 7,则B[3] = {u, v}B[7] = {w}

与最短路径问题相关的bucket数据结构的时间分析:

  • 插入: O(1)
  • 移动: O(1)
  • 减少键: O(1)
  • Find Minimum: O(c),其中c是最大键值。

因此,如果 Dijkstra 的算法是用桶数据结构实现的,那么O(m + nc)你的总时间复杂度m是边n数,是节点数。


双桶数据结构,在大多数情况下,是指每个桶包含一个桶数据结构的桶数据结构。