在值范围内有效地搜索具有多个属性的对象数组

时间:2017-04-05 19:37:30

标签: javascript arrays search hash binary-search

前言

假设我有大量的对象(使用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.0241002e === 0.02returnedPointsArray中的每个对象都会在x0之间具有5.0041002属性(即x0 - e })和5.0441002(即x0 + e)。

问题:

因此,有一个明显的解决方案来迭代整个数组并检查每个属性是否在{ - 1}} e之间(最差情况generatedPoints复杂度,两次单独搜索{ {1}}和O(2n))。

我知道单个值我可以订购点数组并对+ - +e执行两次二进制搜索,以将复杂度降低到-e。但是我无法弄清楚如何/我可以为多个值做这件事。

我还考虑过使用哈希来减少"单个散列键的四个属性,然后我可以二进制搜索。但是,考虑到我在一个范围之间搜索属性值,我无法确定/不确定是否可以这样做。

问题!

在具有搜索对象的相应属性的对象数组中的对象范围之间搜索属性值的最快方法是什么?

0 个答案:

没有答案