static-range-query
Given a collection of points in n-dimensional space, preprocesses these points so that orthogonal range queries can be computed efficiently. Internally, this library is built using range trees.
Example
var preprocess = //Generate 10000 4D pointsvar D = 4 N = 10000var points = Nforvar i=0; i<N; ++i var p = D forvar j=0; j<N; ++j pj = Math * 1000 pointsi = p //Construct query data structurevar rangeQuery = //Now execute a range query!
Install
npm install static-range-query
API
var rangeQuery = require("static-range-query")(points)
Preprocesses the point set so that orthogonal range queries can be evaluated efficiently.
points
is an array of points (each point is represented as a tuple of D numbers)
Returns A rangeSearch()
function (see below) which evaluates range queries on the point set.
Time Complexity O(points.length * log(points.length)^points[0].length)
Space Complexity O(points.length * log(points.length)^points[0].length)
Notes Internally, this function builds a range tree and binds it to the query method
rangeQuery(lo, hi, cb(index))
Evaluates a range query on the point set.
lo
is a lower bound on the bounding rectangle to queryhi
is an upper bound on the bounding rectangle to querycb
is a callback which gets called once per each point in the range with the index of a point.
Time Complexity O(log(points.length)^points[0].length + k)
where k
is the number of points processed in the range.
Note The points are visited in lexicographic order
Other Note You can terminate the search early by returning true
from cb
, for example:
Credits
(c) 2013 Mikola Lysenko. MIT License