Documentation ¶
Overview ¶
Package interval provides an implementation of an interval tree built using an augmented AVL tree. An interval tree stores values associated with intervals, and can efficiently determine which intervals overlap with others. All intervals must have a unique starting position. It supports the following operations, where 'n' is the number of intervals in the tree:
Put: add an interval to the tree. Complexity: O(lg n).
Get: find an interval with a given starting position. Complexity O(lg n).
Overlaps: find all intervals that overlap with a given interval. Complexity: O(lg n + m), where 'm' is the size of the result (number of overlapping intervals found).
Remove: remove the interval at a given position. Complexity: O(lg n).
Example ¶
tree := New[int, string]() tree.Put(0, 10, "foo") tree.Put(5, 9, "bar") tree.Put(10, 11, "baz") tree.Put(-10, 4, "quux") vals := tree.Overlaps(4, 10) for _, v := range vals { fmt.Println(v.Val) }
Output: foo bar
Index ¶
- type KV
- type Tree
- func (t *Tree[I, V]) Add(low, high I, value V) (KV[I, V], bool)
- func (t *Tree[I, V]) Each(fn func(low, high I, val V))
- func (t *Tree[I, V]) Get(low I) (KV[I, V], bool)
- func (t *Tree[I, V]) Height() int
- func (t *Tree[I, V]) Overlaps(low, high I) []KV[I, V]
- func (t *Tree[I, V]) Put(low, high I, value V) (KV[I, V], bool)
- func (t *Tree[I, V]) Remove(low I) (KV[I, V], bool)
- func (t *Tree[I, V]) Size() int
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type KV ¶
type KV[I constraints.Ordered, V any] struct { Low, High I Val V }
type Tree ¶
type Tree[I constraints.Ordered, V any] struct { // contains filtered or unexported fields }
Tree implements an interval tree. All intervals must have unique starting positions. Every low bound if an interval is inclusive, while high is exclusive.
func (*Tree[I, V]) Add ¶
Add associates the interval [low, high) with value.
If an interval starting at low already exists in t, this method doesn't perform any change of the tree, but returns the conflicting interval.
func (*Tree[I, V]) Each ¶
func (t *Tree[I, V]) Each(fn func(low, high I, val V))
Each calls 'fn' on every element in the tree, and its corresponding interval, in order sorted by starting position.
func (*Tree[I, V]) Get ¶
Get returns the interval and value associated with the interval starting at low, or false if no such value exists.
func (*Tree[I, V]) Overlaps ¶
Overlaps returns all values that overlap with the given range. List returned is sorted by low positions of intervals.
func (*Tree[I, V]) Put ¶
Put associates the interval [low, high) with value.
If an interval starting at low already exists, this method will replace it. In such a case the conflicting (replaced) interval is returned.