【发布时间】:2014-05-31 04:02:51
【问题描述】:
我正在处理欧几里得空间中的一组 (a) 点 P(为了简单起见,我们假设平面),(b) 一个边界矩形[a,b] x [c,d] 包含 P 中的所有点,以及 (c) 一个正整数向量 (m,n),编码沿每个维度的细分。基本问题是
如何有效地构建到 P 的距离为 m x n 的网格?
特别是,我想在矩形 [a,b] x [c,d] 的明显 m x n 网格分解中生成到 P 的距离函数的三次近似:将 X 方向切成 m 块和 Y 方向分成 n 块,并且对于由分区产生的每个小矩形 R,计算如下定义的到 P 的 正整数距离 d(R)。
考虑一个加权图 G,它的顶点集 V 对应于我们网格中的小矩形,在邻居之间(甚至是对角线邻居)的边的权重为 $1$。如果相应的矩形包含 P 的一个点,则调用一个顶点“红色”。我要计算的是 V 上的函数 d,它采用正整数值,它将 G 中的最短距离与红色顶点相关联。因此,如果一个小矩形实际上包含来自 P 的一个点,那么它的关联顶点将被分配为“0”。如果它不包含 P 的点,但与包含的矩形相邻(甚至是对角线),则它得到“1”,依此类推...
考虑每个点到每个小矩形的距离并跟踪最小值的幼稚方法会产生 |P|mn 的成本,这对于大型网格来说似乎是令人望而却步的。所以这是我考虑的第二种方法:将每个 d(R) 设置为某个大的 MAX 到网格中不包含来自 P 的点的每个 R。然后,为每个包含 a 的 R 设置 d(R) = 0 P 的点并将其所有具有严格较大 d 值的邻居放入队列中。然后,迭代这个直到队列为空:
- 从队列中弹出一个网格矩形 R,
- 如果 d(R) > 1 + d(R') 其中 R' 是处理入队 R 的邻居,则设置 d(R) = 1 + d(R') 并将 R' 的所有邻居与 d 入队-值超过 1+d(R)。
对于如何比“第二种方法”更有效地解决此问题的任何想法,我将不胜感激。
【问题讨论】:
-
似乎“到一组点的距离”是指“到一组点的最短距离”,对吗? (请注意,这不一定遵循 metric,这是“距离”的常用数学概念,因为它可能违反三角不等式。)
-
是的,我的意思是到任何点的最短距离......即使这样,我的意思是根据立方体数量计算的距离,而不是固有的欧几里得距离。感谢您指出这一点!
-
不要成为一个书呆子,但是尽管您已经更新了您的问题,但您实际上仍然没有定义您使用的距离度量!图论中“到一组点的距离”有不止一个可能的定义。
标签: algorithm computational-geometry