我开发一个应用程序(在C#中),在一段时间内对象处于活动状态,它们具有DateTime-type属性。现在我想加快搜索例程的查询速度,例如:此时此时间段内是否还有其他活动对象。
我可以使用任何现有的时间索引,还是可以使用QuadTree /其他树结构以有效的方式进行搜索。
答案 0 :(得分:1)
为什么不在列表中对数据进行排序,然后使用类似二进制搜索的算法来限制您考虑的对象数量。
答案 1 :(得分:1)
您还应该查看interval tree:
在计算机科学中,一种间隔树 是一个有序的树数据结构 保持间隔。具体来说,它 允许一个人有效地找到所有 与任何给定重叠的间隔 间隔或点。
这让我想起了这个SO question。
答案 2 :(得分:0)
这是一个有趣的排序问题,因为您需要考虑每个元素的开始和结束日期。如果您使用了简单的排序算法,那么您可以按开始日期或结束日期排序,但按两者排序不会非常有效,因为具有早期开始日期的元素可能具有非常晚的结束日期或元素延迟开始日期可能有一个提前结束日期,这意味着您无法根据标准对这个列表进行预先排序“这些元素现在是否活跃?”
如果您正在寻找一种超级高效的机制来实现这一点,我可能没有给您答案,但如果您只是在寻找易于使用现有C#数据结构的东西,我会考虑创建两个排序列表,一个按开始日期排序,另一个按结束日期排序。在开始日期排序列表中搜索之前开始的元素,并在结束日期排序列表中搜索此后结束的元素。将这些结果相交以获得最终答案。
正如我所提到的,我确信有一个更有效的机制可以做到这一点,但如果我想保持简单并且只是使用我可用的东西,我会考虑这样做。
答案 3 :(得分:0)
有一个i4o(对象索引)库。可能会有用。