This is a standalone project, maintained as part of the
@thi.ng/umbrella monorepo and
anti-framework.
About
Various heap implementations for arbitrary values and with customizable ordering.
Type agnostic Heap and Priority Queue implementations with customizable
ordering and fanout / tree arity (in case of DHeap
) and largely unified API:
Status
STABLE - used in production
Search or submit any issues for this package
Installation
yarn add @thi.ng/heaps
ES module import:
<script type="module" src="https://cdn.skypack.dev/@thi.ng/heaps"></script>
Skypack documentation
For Node.js REPL:
const heaps = await import("@thi.ng/heaps");
Package sizes (brotli'd, pre-treeshake): ESM: 2.01 KB
Dependencies
API
Generated API docs
Heaps
import { defDHeap } from "@thi.ng/heaps";
const h = defDHeap<number>(
[5, 2, 10, 15, 18, 23, 22, -1],
{
compare: (a, b) => b - a,
d: 4
}
);
h.pop();
h.pop();
h.pushPop(16)
h.push(24);
Priority queue
Even though all provided heap implementations support arbitrary values and
comparators and could be used as-is to implement a priority queue, since v1.3.0
this package also includes a dedicated
PriorityQueue
class, a thin veneer wrapper for a backing Heap
and exposing a PQ-like API for
arbitrary values, with configurable value equality handling and priority
ordering:
- By default higher priority values mean higher priority
- Already queued items can be reprioritized or removed
- The queue head can be inspected via
peek()
and/or peekPriority()
without removing it from the queue - Multiple items can be added at once via
into()
- The queue is iterable (in priority order, according to given comparator)
const queue = defPriorityQueue();
queue.push(["alice", 5]);
queue.into([["bob", 3], ["charlie", 10], ["dora", 8]]);
queue.peek()
queue.peekPriority()
queue.reprioritize("alice", 20)
queue.pop()
Authors
If this project contributes to an academic publication, please cite it as:
@misc{thing-heaps,
title = "@thi.ng/heaps",
author = "Karsten Schmidt",
note = "https://thi.ng/heaps",
year = 2017
}
License
© 2017 - 2024 Karsten Schmidt // Apache License 2.0