誰かが何か良いことを知っていますかinterval tree
C++での実装?
明らかに、テンプレート駆動型で、boost
のようなスタイルのほうが適しています。
そして別の質問-誰かがテストした場合、基本的なstd::vector
ベースの間隔ツリー実装によるソートは、一般的な間隔ツリーに勝ることがあります(with O(lg) operations)実際には?
ブーストのような? ブーストICL !
ブースト間隔コンテナライブラリ
私にはまったく同じニーズがありました。私は適切な(シンプル、モダン、ポータブル)実装を見つけることができなかったので、ガイドとして a python Brent Pedersenによる実装 を使用して、最低限のものを記述しました- 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
インターバルツリーの簡単な実装をgithubにアップロードしました: https://github.com/coolsoftware/ITree
Itree.hでクラスitreeを見てください。
NCBI C++ Toolkit に to be one が表示されます。
しかし、審査員はそれが「良い」かどうかについてはまだ検討していません(そして、それがテンプレート駆動型であるかどうかさえも。私はまだC++に少し慣れていないので、完全に確信しているわけではありませんが、同じくらい疑っています)。
c#実装をc ++に変換してもかまわない場合は、avl自己平衡ツリーに基づいて http://code.google.com/p/intervaltree/ に移動してください。