假设我有大量的对象(使用JavaScript表示法):
var pointsArray = [
{
x0: 2.113288452,
x1: 5.6060203643,
y0: 3.1333283342,
y1: 11.062036352,
},
... // ~ 10,000,000 entries
];
现在,我说我已经生成了一个条目:
var generatedPoints = {
x0: 2.1032884,
x1: 5.6160203,
y0: 3.1433283,
y1: 11.0626134,
};
我希望能够做的是,使用generatedPoints
和一些错误边距值e
,返回一个点returnedPointsArray
数组,对于每个属性generatedPoints
的{},匹配误差范围内的生成点。
因此,对于returnedPointsArray
,每个属性都在e
的相应属性的+ - generatedPoints
范围内。
例如,如果generatedPoints.x0 === 5.0241002
和e === 0.02
,returnedPointsArray
中的每个对象都会在x0
之间具有5.0041002
属性(即x0 - e
})和5.0441002
(即x0 + e
)。
因此,有一个明显的解决方案来迭代整个数组并检查每个属性是否在{ - 1}} e
之间(最差情况generatedPoints
复杂度,两次单独搜索{ {1}}和O(2n)
)。
我知道单个值我可以订购点数组并对+ - +e
执行两次二进制搜索,以将复杂度降低到-e
。但是我无法弄清楚如何/我可以为多个值做这件事。
我还考虑过使用哈希来减少"单个散列键的四个属性,然后我可以二进制搜索。但是,考虑到我在一个范围之间搜索属性值,我无法确定/不确定是否可以这样做。
在具有搜索对象的相应属性的对象数组中的对象范围之间搜索属性值的最快方法是什么?