簡體   English   中英

段樹、區間樹、二叉索引樹和范圍樹有什么區別?

[英]What are the differences between segment trees, interval trees, binary indexed trees and range trees?

段樹、區間樹、二叉索引樹和范圍樹在以下方面有什么區別:

  • 關鍵思想/定義
  • 應用
  • 更高維度的性能/順序/空間消耗

請不要只給出定義。

所有這些數據結構都用於解決不同的問題:

  • 段樹存儲區間,並針對“這些區間中的哪一個包含給定點”查詢進行了優化。
  • 間隔樹也存儲間隔,但針對“這些間隔中的哪些與給定間隔重疊”查詢進行了優化。 它也可以用於點查詢——類似於線段樹。
  • 范圍樹存儲點,並針對“哪些點落在給定間隔內”查詢進行了優化。
  • 二叉索引樹存儲每個索引的項目數,並針對“索引 m 和 n 之間有多少項目”查詢進行了優化。

一維的性能/空間消耗:

  • 段樹- O(n logn) 預處理時間,O(k+logn) 查詢時間,O(n logn) 空間
  • 區間樹- O(n logn) 預處理時間,O(k+logn) 查詢時間,O(n) 空間
  • 范圍樹- O(n logn) 預處理時間,O(k+logn) 查詢時間,O(n) 空間
  • 二叉索引樹- O(n logn) 預處理時間,O(logn) 查詢時間,O(n) 空間

(k 是報告結果的數量)。

所有數據結構都可以是動態的,因為使用場景包括數據更改和查詢:

  • 段樹- 可以在 O(logn) 時間內添加/刪除間隔(請參閱此處
  • 間隔樹- 可以在 O(logn) 時間內添加/刪除間隔
  • 范圍樹- 可以在 O(logn) 時間內添加/刪除新點(請參閱此處
  • 二叉索引樹- 每個索引的項目數可以在 O(logn) 時間內增加

更高維度(d>1):

  • 段樹- O(n(logn)^d) 預處理時間,O(k+(logn)^d) 查詢時間,O(n(logn)^(d-1)) 空間
  • 區間樹- O(n logn) 預處理時間,O(k+(logn)^d) 查詢時間,O(n logn) 空間
  • 范圍樹- O(n(logn)^d) 預處理時間,O(k+(logn)^d) 查詢時間,O(n(logn)^(d-1))) 空間
  • 二叉索引樹- O(n(logn)^d) 預處理時間,O((logn)^d) 查詢時間,O(n(logn)^d) 空間

並不是說我可以在Lior 的回答中添加任何內容,但似乎可以用一張好桌子來做。

一維

k是報告結果的數量

手術 部分 間隔 范圍 索引
預處理 登錄 登錄 登錄 登錄
詢問 k+logn k+logn k+logn 登錄
空間 登錄 n n n
插入/刪除 登錄 登錄 登錄 登錄

更高維度

d > 1

手術 部分 間隔 范圍 索引
預處理 n(logn)^d 登錄 n(logn)^d n(logn)^d
詢問 k+(logn)^d k+(logn)^d k+(logn)^d (登錄)^d
空間 n(logn)^(d-1) 登錄 n(logn)^(d-1)) n(logn)^d

可以改進段樹和二叉索引樹的預處理范圍和空間:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM