Installations
npm install js-priority-queue
Developer Guide
Typescript
No
Module System
CommonJS
Node Version
5.5.0
NPM Version
3.3.12
Score
96.6
Supply Chain
99
Quality
75.4
Maintenance
100
Vulnerability
87.5
License
Releases
Unable to fetch releases
Contributors
Unable to fetch Contributors
Languages
CoffeeScript (57.62%)
JavaScript (42.38%)
Developer
adamhooper
Download Statistics
Total Downloads
3,197,093
Last Day
5,287
Last Week
23,485
Last Month
111,209
Last Year
1,125,833
GitHub Statistics
237 Stars
35 Commits
37 Forks
6 Watching
1 Branches
6 Contributors
Bundle Size
5.63 kB
Minified
1.78 kB
Minified + Gzipped
Package Meta Information
Latest Version
0.1.5
Package Id
js-priority-queue@0.1.5
Size
10.90 kB
NPM Version
3.3.12
Node Version
5.5.0
Publised On
22 Feb 2016
Total Downloads
Cumulative downloads
Total Downloads
3,197,093
Last day
-12.4%
5,287
Compared to previous day
Last week
-24.1%
23,485
Compared to previous week
Last month
19.6%
111,209
Compared to previous month
Last year
58.4%
1,125,833
Compared to previous year
Daily Downloads
Weekly Downloads
Monthly Downloads
Yearly Downloads
Priority Queue
A priority queue is a data structure with these operations:
Operation | Syntax (js-priority-queue) | Description |
---|---|---|
Create | var queue = new PriorityQueue(); | Creates a priority queue |
Queue | queue.queue(value); | Inserts a new value in the queue |
Length | var length = queue.length; | Returns the number of elements in the queue |
Peek | var firstItem = queue.peek(); | Returns the smallest item in the queue and leaves the queue unchanged |
Dequeue | var firstItem = queue.dequeue(); | Returns the smallest item in the queue and removes it from the queue |
Clear | queue.clear(); | Removes all values from the queue |
You cannot access the data in any other way: you must dequeue or peek.
Why use this library? Two reasons:
- It's easier to use than an Array, and it's clearer.
- It can make your code execute more quickly.
Installing
You can npm install js-priority-queue
or bower install js-priority-queue
.
Alternatively, just download priority-queue.js
from this directory.
Include it through RequireJS or Browserify. Or, to pollute your global scope, insert this in your HTML:
<script src="priority-queue.js"></script>
Then write code like this:
var queue = new PriorityQueue({ comparator: function(a, b) { return b - a; }});
queue.queue(5);
queue.queue(3);
queue.queue(2);
var lowest = queue.dequeue(); // returns 5
Options
How exactly will these elements be ordered? Let's use the comparator
option.
This is the argument we would pass to
Array.prototype.sort:
var compareNumbers = function(a, b) { return a - b; };
var queue = new PriorityQueue({ comparator: compareNumbers });
You can also pass initial values, in any order. With lots of values, it's faster to load them all at once than one at a time.
var queue = new PriorityQueue({ initialValues: [ 1, 2, 3 ] })
Strategies
We can implement this with a regular Array
. We'll keep it sorted inversely,
so queue.dequeue()
maps to array.pop()
.
But with an Array
, we'll need to splice()
, which can affect every single
element in the array. An alternative is to create a
Binary Heap, which writes far
fewer array elements when queueing (though each element is written more slowly).
Finally, we can use a B-Heap. It's like a binary heap, except it orders elements such that during a single operation, writes occur closer to each other in memory. Unfortunately, it's slower to calculate where in memory each write should occur (it costs a function call instead of a bit-shift). So while it's fast in theory, it's slower in practice.
Create the queues like this:
var queue = new PriorityQueue({ strategy: PriorityQueue.ArrayStrategy }); // Array
var queue = new PriorityQueue({ strategy: PriorityQueue.BinaryHeapStrategy }); // Default
var queue = new PriorityQueue({ strategy: PriorityQueue.BHeapStrategy }); // Slower
You'll see running times like this:
Operation | Array | Binary heap | B-Heap |
---|---|---|---|
Create | O(n lg n) | O(n) | O(n) |
Queue | O(n) (often slow) | O(lg n) (fast) | O(lg n) |
Peek | O(1) | O(1) | O(1) |
Dequeue | O(1) (fast) | O(lg n) | O(lg n) |
According to JsPerf, the
fastest strategy for most cases is BinaryHeapStrategy
. Only use ArrayStrategy
only if you're queuing items in a very particular order. Don't use
BHeapStrategy
, except as a lesson in how sometimes miracles in one
programming language aren't great in other languages.
Contributing
- Fork this repository
- Run
npm install
- Write the behavior you expect in
spec-coffee/
- Edit files in
coffee/
untilgulp test
says you're done - Run
gulp
to updatepriority-queue.js
andpriority-queue.min.js
- Submit a pull request
License
I, Adam Hooper, the sole author of this project, waive all my rights to it and release it under the Public Domain. Do with it what you will.
![Empty State](/_next/static/media/empty.e5fae2e5.png)
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
0 existing vulnerabilities detected
Reason
license file detected
Details
- Info: project has a license file: LICENSE.md:0
- Warn: project license file does not contain an FSF or OSI license.
Reason
Found 5/29 approved changesets -- score normalized to 1
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
- Warn: no security policy file detected
- Warn: no security file to analyze
- Warn: no security file to analyze
- Warn: no security file to analyze
Reason
project is not fuzzed
Details
- Warn: no fuzzer integrations found
Reason
branch protection not enabled on development/release branches
Details
- Warn: branch protection not enabled for branch 'master'
Reason
SAST tool is not run on all commits -- score normalized to 0
Details
- Warn: 0 commits out of 6 are checked with a SAST tool
Score
3.1
/10
Last Scanned on 2025-02-03
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn MoreOther packages similar to js-priority-queue
js-sdsl
javascript standard data structure library which benchmark against C++ STL
heap-js
Efficient Binary heap (priority queue, binary tree) data structure for JavaScript / TypeScript. Includes JavaScript methods, Python's heapq module methods, and Java's PriorityQueue methods.
@datastructures-js/priority-queue
A heap-based implementation of priority queue in javascript with typescript support.
@js-sdsl/priority-queue
javascript standard data structure library which benchmark against C++ STL