(1) What are the major differences between segment trees, interval trees, binary indexed trees and range trees? - Quora



(1) What are the major differences between segment trees, interval trees, binary indexed trees and range trees? - Quora

Interval Trees are trees that allow one to query on inserted ranges. For example, insert the ranges (10, 20), (15, 40) and query if there is any range that hits the value 12 or a range such as (9, 11), etc...

A Range Tree is also something similar except that the inserted entities are points and not ranges like in the interval tree.

A BIT (Binary Indexed Tree) is a notional tree that lets one compute range sums quickly. It's just a way to store sums on some subset of intervals that lets you construct the sum over any interval with these precomputed interval sum subsets. You can't use a BIT to compute range minimum or maximum queries since the only thing you can do with a BIT is compute the sum/min/max of a range that starts from index 0 (starting of the interval). For range sum in the range (a, b), one can compute the sum as sum(0, b) - sum(0, a), However, the same trick can't be used for min/max.

A Segment Tree is a more general notion of a BIT, where one precomputes the sum over a fixed set of ranges (not necessarily starting from index 0), which lets one layer O(log n) such ranges to compute the sum/min/max over any any arbitrary range.

All structures can be implemented fairly efficiently with query/update costs of O(log n), n being the number of points/ranges inserted into the structure. Of course, range reporting (not counting) queries will take longer since you need to report O(k) ranges, so the complexity goes up to Ω(k + log n) in these cases (assuming we have k ranges to report of course).

Read full article from (1) What are the major differences between segment trees, interval trees, binary indexed trees and range trees? - Quora


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts