c++ - 区域搜索中的点

标签 c++ multithreading algorithm search

我有接近 Nearest neighbour search 的问题,但不完全是。

对于二维空间中给定的矩形区域(与轴对齐),我需要找到属于该区域的所有点。 我可以提前准备好关于我的积分集的任何数据。我对点坐标有限制(假设我们拥有的所有点在 X 和 Y 坐标中都在从 0 到 1 的区域内)。

查询数量(区域)>>点数。因此,我的优先事项是:

  1. QueryTime - 按地区获取积分的时间。
  2. MemorySize - 我需要的额外内存大小(用于准备)。
  3. PreparationTime - 额外的数据准备时间。

哪些算法适用于此?(如果有关于该主题的书籍或文章,我会很高兴)。


例子:

我有一个点坐标数组,都在 0 到 1 的范围内:

{0.1224,0.2345}, {0.01,0.99}, {0.94,0.5}

并获取一个查询以查找 X 中从 0.1 到 0.2 和 Y 中从 0.2 到 0.4 的区域中的所有点。

然后我需要找到第一个点 {0.1224,0.2345}。

最佳答案

听起来你有一些比赛条件。目前还不清楚你是怎么做到的。 通常的方法是单线程准备,卡住结构(在任何地方都将其作为 const 传递),然后所有查询都可以在没有协调的情况下并行运行,因为结构是不可变的。

另一种方法是 KD 树或四叉树。您可能会遇到与现在相同的种族问题。 但是,如果您想尝试一下,请使用随机点,或者如果您负担得起,请为拆分选择最佳点(但在实践中应该无关紧要)。 您将得到类似 O(logNP + R) 的结果,其中 R 是结果中的点数。

http://en.wikipedia.org/wiki/Kd_tree http://en.wikipedia.org/wiki/Quadtree

关于c++ - 区域搜索中的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840357/

相关文章:

C++在构造函数中调用虚方法

c++ - 免费使用 C++ 的 JBIG2 编码库

c# - 应用程序崩溃,事件名称为 CLR20r3?

java - 获取java.lang.IllegalStateException : This call must happen in the AWT Event Dispatch Thread! 请引用

python - 如何使用Python使用不同的输入异步调用API一百万次

algorithm - 循环不变函数

c++ - 提取函数的返回类型而不调用它(使用模板?)

java - Java中的ThreadFactory使用

algorithm - 最小加法链求幂

algorithm - 如何在 Google 表格中找到给定单元格的一致/不一致对的数量?