Documentation ¶
Overview ¶
Package algorithm contains some useful algorithms
Index ¶
- func GetLargestNItems[T common.Sortable](inputChan <-chan T, topN int) ([]T, error)
- func GetSmallestNItems[T common.Sortable](inputChan <-chan T, topN int) ([]T, error)
- func GetTopKItems[T common.Sortable](inputChan <-chan T, topN int, sortOrder common.SortOrder) (result []T, err error)
- type Deque
- type DequeOptFunc
- type FIFO
- type PriorityItem
- type PriorityQ
- type PriotiryItemItf
- type SkipList
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetLargestNItems ¶
GetLargestNItems get N highest priority items
func GetSmallestNItems ¶
GetSmallestNItems get N smallest priority items
Types ¶
type Deque ¶
type Deque[T any] interface { PushBack(T) PushFront(T) PopFront() T PopBack() T Len() int Front() T Back() T }
Deque
type DequeOptFunc ¶
type DequeOptFunc func(*dequeOpt) error
DequeOptFunc optional arguments for deque
func WithDequeCurrentCapacity ¶
func WithDequeCurrentCapacity(size int) DequeOptFunc
WithDequeCurrentCapacity preallocate memory for deque
func WithDequeMinimalCapacity ¶
func WithDequeMinimalCapacity(size int) DequeOptFunc
WithDequeMinimalCapacity set deque minimal capacity
type FIFO ¶
type FIFO struct {
// contains filtered or unexported fields
}
FIFO is a lock-free First-In-First-Out queue
paper: https://1drv.ms/b/s!Au45o0W1gVVLuNxYkPzfBo4fOssFPQ?e=TYxHKl
Example ¶
f := NewFIFO() f.Put(1) v := f.Get() if v == nil { panic(v) } fmt.Println(v.(int))
Output: 1
type PriorityItem ¶ added in v4.7.1
type PriorityItem[T common.Sortable] struct { // Val T Val T // Name whatever to identify this item Name any }
PriorityItem priority item
func (PriorityItem[T]) GetVal ¶ added in v4.7.1
func (t PriorityItem[T]) GetVal() T
GetVal get value of priority item
type PriorityQ ¶ added in v4.7.1
PriorityQ priority queue
Do not use this structure directly, use `NewPriorityQ` instead.
func NewPriorityQ ¶ added in v4.7.1
NewPriorityQ create new PriorityQ
Args:
- order: common.SortOrderAsc or common.SortOrderDesc, if you want to get topN items, use common.SortOrderDesc, if you want to get bottomN items, use common.SortOrderAsc.
func (*PriorityQ[T]) Peek ¶ added in v4.7.1
func (pq *PriorityQ[T]) Peek() PriotiryItemItf[T]
Peek peek item from priority queue
func (*PriorityQ[T]) Pop ¶ added in v4.7.1
func (pq *PriorityQ[T]) Pop() PriotiryItemItf[T]
Pop pop item from priority queue
func (*PriorityQ[T]) Push ¶ added in v4.7.1
func (pq *PriorityQ[T]) Push(v PriotiryItemItf[T])
Push push item into priority queue
type PriotiryItemItf ¶ added in v4.7.1
PriotiryItemItf priority item interface