nanoq

1.1.0 • Public • Published

Build Status License: MIT

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 = require('nanoq');
 
// nanoq is a "minheap" by default
var q = new nanoq();
 
q.push(30);
q.push(20);
q.push(10);
 
console.log(q.length()) // returns 3. length() is a method not a property
console.log(q.pop(), q.pop(), q.pop()); // returns 10, 20, 30
 
// Works with strings:
= new nanoq();
 
q.push("dog");
q.push("pig");
q.push("cat");
 
// peek() returns the topmost item without pop()ing
console.log(q.peek()) // returns "cat"
 
// force a TypedArray by passing in a maximum number of heap items
= new nanoq(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)
= new nanoq(null, function(a,b) {
  return a < b;
});
 
// add items to the maxheap
q.push(1);
q.push(2);
q.push(3);
 
console.log(q.pop(), q.pop(), q.pop()); // returns 3, 2, 1
 
// use your own custom objects
var stuff = [
    {val: 3},
    {val: 2},
    {val: 1},
];
 
= new nanoq(null, function(a, b){
  return a.val > b.val
});
 
for (var s of stuff)
  q.push(s);
 
console.log(q.pop(), q.pop(), q.pop()); // returns {val:1}, {val:2}, {val:3}

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.1.0
    7
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 1.1.0
    7
  • 1.0.0
    1
  • 0.0.3
    1
  • 0.0.2
    1

Package Sidebar

Install

npm i nanoq

Weekly Downloads

5

Version

1.1.0

License

MIT

Last publish

Collaborators

  • amacleod