C 语言中计算高效的区间/密度搜索

标签 c algorithm performance search plot

假设您有一个像这样的二维图(作为点列表):

Scatter Plot

现在假设您将绘图分成相等的正方形区域,如下所示:

Scatter Plot divided into sections

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

(而不是逐一比较每个点,看是否在每个方格的区间内)

问题2:如果添加一个新的点,可以用什么有效的方法找到该点所在的 block ,并计算该 block 的新密度。

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

最佳答案

在 Java 中,假设坐标为非负且每个轴上的 bin 数量最多为 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);
  }
}

现在您可以枚举每个 bin 中的点:

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

关于C 语言中计算高效的区间/密度搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43946480/

相关文章:

c - 如何在设备驱动程序和它控制的 FPGA 之间共享寄存器和位域定义

c - int b=0,a=1;b=++a+++a; b 的值是多少?它的计算方法是什么?

java - 链表在方法java之后删除

algorithm - 在 N 个列表中查找匹配项的有效方法?

java - 在 Windows 上运行 JAVA Intel 与 Solaris Sparc (T1000)

javascript - 在 iframe 上使用新的 javascript performance.timing API?

C 从参数字符串中解析 double

c - 内存错误,不知道为什么会这样

javascript - 使用商和提醒的二进制加法算法

c - 提升fopen/fclose场景下的性能