我应该为此使用什么数据结构/算法?
我在笛卡尔网格上有大量点,位置由(x,y)指定。我想进行快速搜索,返回位于给定 x 和 y 范围内的点(对象)集。(网格内的矩形)。
也许有一个轻量级的框架可以做到这一点?
谢谢
我应该为此使用什么数据结构/算法?
我在笛卡尔网格上有大量点,位置由(x,y)指定。我想进行快速搜索,返回位于给定 x 和 y 范围内的点(对象)集。(网格内的矩形)。
也许有一个轻量级的框架可以做到这一点?
谢谢
我会将这些点存储为具有两个属性的对象: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
),然后再次越过那个较小的集合以找到边界的第二个属性(比如说,y
),其余的集合将是您正在寻找的那些,使您的搜索时间(O(4 log(n))最坏情况,而您的插入时间线性(最坏情况)。不是太破旧,如果我自己这么说的话。