我有这种情况,我有N个时间线,每个时间线都包含块。这些块包含具有特定索引的令牌,并且知道它们的最大和最小令牌索引。还有一个索引将块的第一个索引映射到(时间轴,块)对。这是一个例子:
Timeline 1: [1 2 5 8 9 11] [14 17 18 21] [22 23 25 26] ...
Timeline 2: [3 4 6 7 10 12] [13 15 16 19 20 24] [27 28 34 45] ...
Index:
1 -> timeline 1, block 1
3 -> timeline 2, block 1
13 -> timeline 2, block 2
14 -> timeline 1, block 2
22 -> timeline 1, block 3
27 -> timeline 2, block 3
如您所见,没有丢失令牌(没有间隙)。
这些数据结构是我最初拥有的。优化特定令牌索引查询的最佳替代数据结构是什么?假设我要检索令牌 19。现在我要做的是:在索引中进行二分搜索以找到每个时间线的好块,然后在每个块内进行完整搜索。使用令牌 19,二分搜索将产生可以包含 19 的块 (1, 2) 和 (2, 2),然后进行完整的线性搜索以找到令牌 19(这里不可能在块内进行二分搜索,因为令牌有各种大小,尚未包含在任何数据结构中)。
谢谢!
编辑:我正在考虑使用包含所有时间线间隔的间隔树。问题是查询仍然会产生许多间隔。另外,与二进制搜索相比,它并没有优化太多。