C中的计算有效区间/密度搜索

时间:2017-05-12 21:07:39

标签: c algorithm performance search plot

让我们说你有一个像这样的二维图(作为一个点列表):

Scatter Plot

现在让我们说你把情节分成相等的方形区域,如下:

Scatter Plot divided into sections

问题1 :如果你想找到每个块的密度(每个区域的点数),可以使用C中计算效率高的技术(RAM使用和处理方面的效率)时间)?

(而不是逐一比较每个点以查看它是否位于每个方格的间隔内)

问题2 :如果添加了新点,可以使用哪些有效方法来查找该点所在的块,并计算块的新密度。

(**注意:我不是要求MOST有效的方法,因为这是基于意见的)

1 个答案:

答案 0 :(得分:0)

在Java中,假设坐标是非负的,并且每个轴上的箱数最多为2 ^ 31:

Map<Pair<Integer, Integer>, List<Point>> binMap = new HashMap<>();
for (Point point : points) {
  Pair binXy = new Pair((int) (point.x / BIN_SIZE), (int) (point.y / BIN_SIZE));
  if (binMap.containsKey(binXy)) {
    binMap.get(binXy).add(point);
  } else {
    List<Point> pointList = new ArrayList<>();
    pointList.add(point);
    binMap.put(binXy, pointList);
  }
}

现在你可以枚举每个箱子中的点数:

for (Entry<Pair<Integer, Integer>, List<Point>> entry : binMap.entrySet()) {
  System.out.println("Bin: " + entry.getKey() + " Points: " + entry.getValue());
}