有人知道C++中实现良好的区间树
吗?
显然,需要一些模板驱动、类似于boost
的实现。
另外一个问题——如果有人测试过,基于std::vector
的排序的区间树实现在实践中是否能击败通用的区间树(具有O(lg)操作)?
有人知道C++中实现良好的区间树
吗?
显然,需要一些模板驱动、类似于boost
的实现。
另外一个问题——如果有人测试过,基于std::vector
的排序的区间树实现在实践中是否能击败通用的区间树(具有O(lg)操作)?
我有完全相同的需求。我找不到任何合适(简单,现代,便携)的实现方式,因此我使用Brent Pedersen的Python实现作为指南,并编写了一个基本的C++版本。 IntervalTree的行为类似于标准STL容器,但由于其简单性(例如没有迭代器),存在一些注意事项。您可以像这样使用它(“T”是任意类型):
vector<Interval<T> > intervals;
// ... make intervals!
IntervalTree<T> tree(intervals);
而您可以这样查询它:
vector<Interval<T> > results;
tree.findContained(start, stop, results);
// results now contains Intervals which are fully contained in the query interval
results.clear();
tree.findOverlapping(start, stop, results);
// results now contains Intervals which overlap the query interval
类似于Boost的?Boost ICL!
Boost区间容器库
boost
的时机很好。我以为当前版本是1.45,我不知道自己这么幸运。谢谢。 - Yippie-Ki-Yay
sanityIntervals.push_back(interval(60, 80, true));
和for (int i = 0; i < 10000; ++i) { intervals.push_back(randomInterval<bool>(100000, 1000, 100000 + 1, true)); }
。我一直在研究具有id、event配对的fork-event-join模型。您能详细说明一下这些数字 - 60、80等是如何得出的,以及为什么选择了bool值对象吗?假设我有一个分布式系统 - 一个服务器和多个客户端,我该如何利用您的代码? - enthusiasticgeek