Skip to content

Commit

Permalink
O(e + n log n) dijkstra using a priority queue
Browse files Browse the repository at this point in the history
  • Loading branch information
make-github-pseudonymous-again committed May 6, 2014
1 parent 7b403fa commit 4f235b4
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 35 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[gn](http://aureooms.github.io/gn)
==

gn (graphs and networks) algorithms / data structures templates for JavaScript
gn (graphs and networks) algorithm / adt templates for JavaScript

[![Build Status](https://drone.io/github.com/aureooms/gn/status.png)](https://drone.io/github.com/aureooms/gn/latest)
[![Coverage Status](https://coveralls.io/repos/aureooms/gn/badge.png)](https://coveralls.io/r/aureooms/gn)
Expand Down
21 changes: 6 additions & 15 deletions js/src/undirected/offline/algo/sp/dijkstra.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@


var dijkstra_t = function(){
var dijkstra_t = function(priority_queue_t){

var dijkstra = function(g, order, s){
var i, j, k, len, m, min;
Expand All @@ -19,7 +19,10 @@ var dijkstra_t = function(){
busy[i] = false;
}

var left = [];
var pred = function(a, b){ return dist[a[0]] < dist[b[0]]; };
var priority_queue = priority_queue_t(pred);
var left = new priority_queue();

used[s[0]] = true;
busy[s[0]] = true;

Expand All @@ -31,19 +34,7 @@ var dijkstra_t = function(){

while(left.length){

m = left[0];
min = dist[m[0]];
j = 0;

for(i = 1, len = left.length; i < len; ++i){
if(dist[left[i][0]] < min){
m = left[i];
min = dist[m[0]];
j = i;
}
}

left.splice(j, 1);
m = left.pop();
used[m[0]] = true;

g.eitr(m, function(e){
Expand Down
10 changes: 6 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
{
"name": "gn",
"version": "0.0.0",
"description": "gn (graphs and networks) algorithms / data structures templates for JavaScript",
"version": "0.0.1",
"description": "gn (graphs and networks) algorithm / adt templates for JavaScript",
"main": "js/index.js",
"dependencies": {
"recquire": "^0.0.0"
},
"devDependencies": {
"qunit": "git://github.com/gotwarlost/node-qunit.git#istanbul-coverage",
"coveralls": "^2.10.0",
"optimist": "^0.6.1"
"optimist": "^0.6.1",
"algo": "^0.0.3"
},
"scripts": {
"test": "export DIR=node_modules/qunit/support/qunit/qunit && mkdir -p $DIR && cp support/qunit.js $DIR/ && node test/js/run.js"
Expand All @@ -22,8 +23,9 @@
"js",
"javascript",
"algorithm",
"data structure",
"adt",
"template",
"complexity",
"graphs",
"networks",
"gn"
Expand Down
37 changes: 22 additions & 15 deletions test/js/src/undirected/offline/algo/sp/dijkstra.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,36 @@

var algo = require('algo');

var check = function(label, n, s, edges, prev, dist){

test('dijkstra #' + label, function(assert){
test('dijkstra #' + label, function(assert){

var Graph = gn.dense_graph_t();

var priority_queue_t = function(pred){
return algo.lazy_binomial_queue_t(pred, algo.opt_t);
};

var Graph = gn.dense_graph_t();
var dijkstra = gn.dijkstra_t();
var dijkstra = gn.dijkstra_t(priority_queue_t);

var g = new Graph();
var i = n;
var g = new Graph();
var i = n;

var v = new Array(i);
var v = new Array(i);

while(i--) v[n-i-1] = g.vadd();
while(i--) v[n-i-1] = g.vadd();

for(var j = 0; j < edges.length; ++j){
var e = edges[j];
g.eadd(v[e[0]], v[e[1]], e[2]);
}
for(var j = 0; j < edges.length; ++j){
var e = edges[j];
g.eadd(v[e[0]], v[e[1]], e[2]);
}

var sp = dijkstra(g, n, v[s]);
var sp = dijkstra(g, n, v[s]);

deepEqual(prev, sp[0], 'prev');
deepEqual(dist, sp[1], 'dist');
deepEqual(prev, sp[0], 'prev');
deepEqual(dist, sp[1], 'dist');

});
});

};

Expand Down

0 comments on commit 4f235b4

Please sign in to comment.