セグメントツリー、インターバルツリー、バイナリインデックスツリー、および範囲ツリーの違いは次のとおりです。
定義だけを与えないでください。
これらのデータ構造はすべて、さまざまな問題を解決するために使用されます。
1つのディメンションのパフォーマンス/スペース消費:
(kは報告された結果の数です)。
使用シナリオにデータの変更とクエリの両方が含まれるという意味で、すべてのデータ構造は動的にすることができます。
高次元(d> 1):
Lior's answer に何かを追加できるわけではありませんが、良いテーブルでできるようです。
k
は報告された結果の数です
| | Segment | Interval | Range | Indexed |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing | n logn | n logn | n logn | n logn |
|Query | k+logn | k+logn | k+logn | logn |
|Space | n logn | n | n | n |
| | | | | |
|Insert/Delete | logn | logn | logn | logn |
d > 1
| | Segment | Interval | Range | Indexed |
|--------------|--------------:|-----------:|---------------:|----------:|
|Preprocessing | n(logn)^d | n logn | n(logn)^d | n(logn)^d |
|Query | k+(logn)^d | k+(logn)^d | k+(logn)^d | (logn)^d |
|Space | n(logn)^(d-1) | n logn | n(logn)^(d-1)) | n(logn)^d |
これらのテーブルはGithub Formatted Markdownで作成されます-画像が必要な場合は Gist を参照してください。