Documentation ¶
Overview ¶
Package heap provides heap operations for any type that implements heap.Interface. A heap is a tree with the property that each node is the minimum-valued node in its subtree.
The minimum element in the tree is the root, at index 0.
A heap is a common way to implement a priority queue. To build a priority queue, implement the Heap interface with the (negative) priority as the ordering for the Less method, so Push adds items while Pop removes the highest-priority item from the queue. The Examples include such an implementation; the file example_pq_test.go has the complete source.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Fix ¶
Fix re-establishes the heap ordering after the element at index i has changed its value. Changing the value of the element at index i and then calling Fix is equivalent to, but less expensive than, calling Remove(h, i) followed by a Push of the new value. The complexity is O(log(n)) where n = h.Len().
Types ¶
type Interface ¶
type Interface interface { Len() int Less(i, j int) bool Swap(i, j int) Push(x Val) // add x as element Len() Pop() Val // remove and return element Len() - 1. }
Any type that implements heap.Interface may be used as a min-heap with the following invariants (established after Init has been called or if the data is empty or sorted):
!h.Less(j, i) for 0 <= i < h.Len() and 2*i+1 <= j <= 2*i+2 and j < h.Len()
Note that Push and Pop in this interface are for package heap's implementation to call. To add and remove things from the heap, use heap.Push and heap.Pop.
type KV ¶
type KV[T any] interface { Delete(k string) Get(k string) (v T, ok bool) Keys() (keys []string) Values() (values []T) Entries() (entries map[string]entry[T]) Put(k string, v T, expiresAfter time.Duration) error Stop() MarshalJSON() ([]byte, error) UnmarshalJSON(b []byte) error }
KV is a registry for values (like/is a concurrent map) with timeout and sliding timeout