Javascript:索引用于按两个属性搜索的对象集

时间:2012-10-10 00:22:14

标签: javascript search indexing

我应该使用哪种数据结构/算法?

我在笛卡尔网格上有大量的点,由(x,y)指定的位置。我希望快速搜索,返回位于给定x和y范围内的点(对象)集。 (网格内的矩形)。

也许有一个轻量级的框架可以做到这一点吗?

由于

2 个答案:

答案 0 :(得分:1)

我会将这些点存储为具有两个属性的对象:x和y,以及一个比较函数,它将它们分配到一个属性或另一个属性上,使用剩余属性作为平局:

function Point(x, y){
    this.x = x;
    this.y = y;
    this.compareTo =function(otherPoint){
        if(otherPoint.x != this.x)
            return this.x-otherPoint.x;
        return this.y-otherPoint.y;
    }
}

points[n] = new Point(someX, someY);

然后,您可以使用排序算法(例如QuickSort - 使用 O(n log(n)))对它们进行排序,并使用简单的插入排序来保持它们按照点的顺序排序走。当您需要使用矩形选择时,您只需在它们之间进行二进制搜索( O(log(n)))以查找第一个属性的边界(例如,x ),然后再次跨越那个较小的集合来查找secont属性的边界(比如y),剩下的集合将是您正在寻找的集合,从而缩短您的搜索时间( O( 4 log(n))最坏的情况,你的插入时间是线性的(最差的情况)。如果我自己这么说的话,不要太破旧。

答案 1 :(得分:0)