priorityqueue
v2.1.0
Published
An implementation of Priority Queue
Maintainers
Readme
PriorityQueue
An implementation of priority queue in javascript.
Installation
npm install priorityqueueExample
import PriorityQueue from "priorityqueue";
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
const numericCompare = (a, b) => (a > b ? 1 : a < b ? -1 : 0);
const comparator = (a, b) => {
const x = numericCompare(a.x, b.x);
const y = numericCompare(a.y, b.y);
return x ? x : y;
};
const pq = new PriorityQueue({ comparator });
pq.push(new Point(4, 6));
pq.push(new Point(2, 3));
pq.push(new Point(5, 1));
pq.push(new Point(1, 2));
console.log(pq.pop()); // => {x: 5, y: 1}
console.log(pq.top()); // => {x: 4, y: 6}
pq.push(new Point(3, 4));
pq.push(new Point(6, 5));
console.log(pq.length); // => 5
console.log(pq.top()); // => {x: 6, y: 5}References
Variation
BinaryHeap(default)
Binary heap is a simple and efficient in almost cases.
cons:
- slow with large amount of items(over 10k)
- slow in
mergeoperation especially
PairingHeap
pros:
- super fast in
mergeoperation(constant time)
SkewHeap
pros:
- super fast in
mergeoperation(constant time)
Not to use:
- with sequence completely sorted
Import specific implementation
import PriorityQueue from "priorityqueue";
import BinaryHeap from "priorityqueue/BinaryHeap";
import PairingHeap from "priorityqueue/PairingHeap";
import SkewHeap from "priorityqueue/SkewHeap";
console.log(PriorityQueue === BinaryHeap); // => trueTypeScript users
If your tsconfig specifies moduleResolution: "node" (whether implicitly or explicitly), use priorityqueue/lib/BinaryHeap instead of priorityqueue/BinaryHeap .
