web-dev-qa-db-ja.com

C ++-間隔ツリーの実装

誰かが何か良いことを知っていますかinterval tree C++での実装?

明らかに、テンプレート駆動型で、boostのようなスタイルのほうが適しています。

そして別の質問-誰かがテストした場合、基本的なstd::vectorベースの間隔ツリー実装によるソートは、一般的な間隔ツリーに勝ることがあります(with O(lg) operations)実際には?

32
Yippie-Ki-Yay

ブーストのような? ブーストICL

ブースト間隔コンテナライブラリ

13
Matthieu M.

私にはまったく同じニーズがありました。私は適切な(シンプル、モダン、ポータブル)実装を見つけることができなかったので、ガイドとして 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
20
Erik Garrison

インターバルツリーの簡単な実装をgithubにアップロードしました: https://github.com/coolsoftware/ITree

Itree.hでクラスitreeを見てください。

1
Vitaly

NCBI C++ Toolkitto be one が表示されます。

しかし、審査員はそれが「良い」かどうかについてはまだ検討していません(そして、それがテンプレート駆動型であるかどうかさえも。私はまだC++に少し慣れていないので、完全に確信しているわけではありませんが、同じくらい疑っています)。

1
ijoseph

c#実装をc ++に変換してもかまわない場合は、avl自己平衡ツリーに基づいて http://code.google.com/p/intervaltree/ に移動してください。

0
cos