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

What is a bucket or double-bucket data structure?

我正在阅读有关最短路径算法实现的一些资料,并且已经 运行 一遍又一遍地了解到使用双桶数据结构实现 Dijkstra 算法是一个很好的实现。

但是我似乎无法找到双桶实现的实际含义,关于它的维基百科文章有点含糊。据我所见,它类似于哈希 table/map。我以前在我的数据结构或算法中从未听说过这个 类。

我读的那篇论文是这样的,

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

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

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

以最短路径问题为例,如果你在Frontier集中有3个节点uvw,其中当前已知的最短距离为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 是边数节点数。


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