有效边界逼近

时间:2018-01-22 06:54:40

标签: arrays cell polygon approximation boundary

想象一下,我在数组中表示了以下结构:

<小时/>

蓝色细胞代表&#34;边界&#34;红细胞代表结构起源。我有一个函数来计算每个内部单元格(不是边界的单元格)到最近边界和原点的距离。

目前我使用嵌套的for循环执行此操作,该循环基本上测试所有单元格位置到当前位置,并选择距离最小的单元格,也标记为边界单元格。

对于小型数据集,这是可以的,但是当你有大量可能的点来迭代时,这很慢。

我正在寻找一种更快但交易准确性更高的解决方案。目前我能够将确切的最接近的边界单元返回到任何给定的内部单元格,但我只需要近似接近哪个单元格最接近。

阵列中的每个单元格都有以下信息:

  • 任意位置(用于距离计算)
  • 是边界单元
  • 邻居列表(任何共享边缘的单元格)

注意事项:

  • 结构不一定符合任何类型的特定多边形形状
  • 数组不一定以任何逻辑方式排序
  • 阵列是扁平的(即1D)

我想到的可能的解决方案(但未经测试):

  • 一个A *方法(因为每个小区知道它的邻居我可以做这样的事情,但我认为它的性能会比我目前的蛮力方法更糟糕
  • 优先级队列,从原点的最小距离到最大距离排序(但不确定如何获得近似最近的边界)

1 个答案:

答案 0 :(得分:0)

我假设细胞无关紧要。一切都取决于细胞中的显着点。找到到原点的距离是一次计算,无法改进。所以你的问题减少到:你有红点和白点(坚持你的配色方案),你想找到每个白点最近的蓝点。

这是nearest-neighbor search的版本。有广泛的 关于这个问题的文献,以及近似最近邻搜索等变体。这篇论文可以引导你到其他人:

  康纳,迈克尔和Piyush Kumar。 &#34;飞机上的实际最近邻搜索。&#34; SEA 。 2010.(Springer link。)

底线是,通过适当的数据结构,您可以实现 O(log n)每个白点的查询时间,比天真的线性搜索快得多。