nanoq
The world's fastest Javascript priority queue? Maybe?
Itsy bitsy teeny weeny priority queue implemented as a blazing fast binary heap in fewer than 30 lines of code (sort of .. ok there's a couple of lines with two statements).
Supports arbitrary objects including strings or, by passing a maximum tree size, will select the best TypedArray
for guaranteed compact memory usage (...won't somebody think of the mobiles T_T)
Benchmarks
ran under Node v6.9.1
package | num items (push/pop) | time (seconds) |
---|---|---|
nanoq (v0.0.3) | 10,000,000 | 1.855 🔥 |
tinyQueue (v1.2.2) | 10,000,000 | 2.714 |
FastPriorityQueue (0.2.4) | 10,000,000 | 12.008 |
Usage
nanoq has four methods; push()
, pop()
, peek()
and length()
, all fairly self-explanatory oui?
Install via npm:
$ npm install nanoq
var nanoq = ; // nanoq is a "minheap" by defaultvar q = ; q;q;q; console // returns 3. length() is a method not a propertyconsole; // returns 10, 20, 30 // Works with strings:q = ; q;q;q; // peek() returns the topmost item without pop()ingconsole // returns "cat" // force a TypedArray by passing in a maximum number of heap itemsq = 255;// Note: .push() accepts integers only in this mode // use your own comparator, here is a maxheap// (pass 0 or null for the 1st param if you want to use regular JS arrays)q = null { return a < b;}; // add items to the maxheapq;q;q; console; // returns 3, 2, 1 // use your own custom objectsvar stuff = val: 3 val: 2 val: 1; q = null { return aval > bval}; for var s of stuff q; console; // returns {val:1}, {val:2}, {val:3}