【发布时间】:2011-03-23 15:41:47
【问题描述】:
有人知道 C++ 中有什么好的 interval tree 实现吗?
显然,模板驱动的东西,boost-like 风格更好。
还有一个问题 - 如果有人测试过,在实践中,基于std::vector 的基本区间树实现是否可以击败通用区间树(使用 O(lg) 操作)? p>
【问题讨论】:
标签: c++ data-structures interval-tree
有人知道 C++ 中有什么好的 interval tree 实现吗?
显然,模板驱动的东西,boost-like 风格更好。
还有一个问题 - 如果有人测试过,在实践中,基于std::vector 的基本区间树实现是否可以击败通用区间树(使用 O(lg) 操作)? p>
【问题讨论】:
标签: c++ data-structures interval-tree
我也有同样的需要。我找不到任何合适的(简单的、现代的、可移植的)实现,所以我使用a python implementation by Brent Pedersen 作为指导并写了一个准系统C++ version。 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
【讨论】:
sanityIntervals.push_back(interval(60, 80, true)); 和` for (int i = 0; i (100000, 1000, 100000 + 1, true)); }`。我一直在寻找带有 id、事件配对的 fork-event-join 模型。您能否详细说明您是如何得出这些数字的 - 60,80 等以及选择的布尔值对象是什么?假设我有一个分布式系统 - 一台服务器和多个客户端,我该如何利用您的代码?
类似升压? Boost ICL!
Boost Interval 容器库
【讨论】:
boost 的好时机。我虽然当前版本是 1.45,但我不知道我这么幸运。谢谢
NCBI C++ Toolkit 中出现to be one。
尽管它是否“好”尚无定论(甚至它是否是模板驱动的;我对 C++ 还有些陌生,所以我不完全确定它是否是“好”,但我也很怀疑)。
【讨论】:
我上传了区间树的简单实现到github:https://github.com/coolsoftware/ITree
在 itree.h 中查找 itree 类
【讨论】:
如果您不介意将 c# 实现转换为 c++,请转到 http://code.google.com/p/intervaltree/。基于 avl 自平衡树。
【讨论】: