【问题标题】:Efficient Boundary Approximation高效边界逼近
【发布时间】:2018-06-30 18:13:36
【问题描述】:

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



蓝色单元格代表“边界”,红色单元格代表结构起源。我有一个函数可以计算每个内部单元格(不是边界的单元格)到其最近边界和原点的距离。

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

对于小型数据集,这没问题,但是当您有大量可能的点要迭代时,这会非常缓慢。

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

数组中的每个单元格都已包含以下信息:

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

注意事项:

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

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

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

【问题讨论】:

  • 您需要解释如何定义两个单元格之间的距离。
  • 3D 空间中两点之间的欧式距离。虽然我对边界单元本身的返回比它们之间的距离更感兴趣(因为边界单元具有我需要读取的属性)
  • 那么每个单元格都有一个区别点,你用它们来确定距离吗?

标签: arrays cell polygon approximation boundary


【解决方案1】:

我假设细胞是不相关的。一切都取决于细胞中的区别点。查找到原点的距离是一种计算,无法改进。所以你的问题简化为:你有红点和白点(坚持你的配色方案),你想找到离每个白点最近的蓝点。

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

康纳、迈克尔和皮尤什库马尔。 “飞机上的实用最近邻搜索”。 东南亚。 2010. (Springer link.)

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

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 2014-05-06
    • 2015-08-29
    • 1970-01-01
    • 2010-12-25
    • 2019-05-19
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多