35

誰かがinterval treeC++での良い実装を知っていますか?

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

そして別の質問-誰かがテストした場合、std::vectorソートを使用した基本ベースの区間木実装は、実際には一般的な区間木(O(lg)操作を使用)を打ち負かすことができますか?

4

5 に答える 5

22

私にはまったく同じニーズがありました。適切な(シンプル、モダン、ポータブル)実装が見つからなかったため、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
于 2011-11-04T19:09:53.270 に答える
15

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

ブーストインターバルコンテナライブラリ

于 2011-03-23T15:53:25.043 に答える
1

NCBI C++Toolkitに1つあるようです。

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

于 2013-08-16T04:21:13.543 に答える
1

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

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

于 2014-01-24T08:37:24.620 に答える
0

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

于 2012-07-25T00:08:40.483 に答える