什么是桶或双桶数据结构?
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个节点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
是边数节点数。
双桶数据结构,在大多数情况下,是指每个桶包含一个桶数据结构的桶数据结构。
我正在阅读有关最短路径算法实现的一些资料,并且已经 运行 一遍又一遍地了解到使用双桶数据结构实现 Dijkstra 算法是一个很好的实现。
但是我似乎无法找到双桶实现的实际含义,关于它的维基百科文章有点含糊。据我所见,它类似于哈希 table/map。我以前在我的数据结构或算法中从未听说过这个 类。
我读的那篇论文是这样的,
Cherkassky, B. V., Goldberg, A. V., & Radzik, T. (1996)。最短路径算法:理论和实验评估。数学规划,73(2), 129-174.
桶数据结构是一种以键值作为桶索引的数据结构,将具有相同键值的项存储在对应的桶中。自然地,使用具有整数键值的桶数据结构是最有意义的。
假设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
是边数节点数。
双桶数据结构,在大多数情况下,是指每个桶包含一个桶数据结构的桶数据结构。