【发布时间】:2012-05-18 20:20:53
【问题描述】:
我有这种情况,我有 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(这里不可能在块内进行二分搜索,因为令牌有各种大小,尚未包含在任何数据结构中)。
谢谢!
编辑:我正在考虑使用包含所有时间线间隔的间隔树。问题是查询仍然会产生许多间隔。另外,与二分搜索相比,它并没有优化太多。
【问题讨论】:
-
查询数据时的预期结果是什么?例如,查询是 19 - 结果是什么?是时间线编号、区块和区块中的位置吗?
-
@Draco:没错。块是一个大块,在其中寻找第 n 个标记的唯一方法是从第一个标记开始并按顺序读取。
-
@eepp 你不能在块的开头移动块中令牌的索引吗?如果您需要搜索特定值,例如 '\0' 以了解令牌何时结束,它可以工作,并且它将搜索减少到仅 N 个时间线之一
-
@eepp 还有一些关于这里的数字是多少的数据可能是相关的:N,块数,令牌的总大小?适当的优化将取决于此信息
-
你可能想看看这个video中的区间树解释
标签: algorithm data-structures intervals