让我们说你有一个像这样的二维图(作为一个点列表):
现在让我们说你把情节分成相等的方形区域,如下:
问题1 :如果你想找到每个块的密度(每个区域的点数),可以使用C中计算效率高的技术(RAM使用和处理方面的效率)时间)?
(而不是逐一比较每个点以查看它是否位于每个方格的间隔内)
问题2 :如果添加了新点,可以使用哪些有效方法来查找该点所在的块,并计算块的新密度。
(**注意:我不是要求MOST有效的方法,因为这是基于意见的)
答案 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());
}