繁体   English   中英

给定一个由 n 个顶点组成的简单多边形 P,以及由 k 个点组成的集合 S,确定每个多边形顶点是否被 S 中的某个点覆盖

[英]Given a simple polygon P, consisting of n vertices, and Set S Of k points, determine if each of the polygon vertices are covered by some point from S

给定一个由 n 个顶点组成的简单多边形 P,以及由 k 个点组成的集合 S,确定每个多边形顶点是否被 S 中的某个点覆盖。

如果在 S 中存在这样的点,我最好的解决方案是检查每个 P 顶点 - O(n*k) 的总复杂度。 我相信应该有一个更有效的解决方案。 任何提示?

P 是否是多边形似乎无关紧要。 所以广义的问题变成了:给定2组点A(带有a点)和B(带有b点),找出A是否是B的子集?

简单的解决方案是 O(a * b),但您也可以通过一些预处理得到 O(a + b)。

  1. 将 B 的所有点放入以 x 坐标为键的 hash map 和以 y 坐标为值的 hash 集合中。 这使您可以在 O(1) 中查询点 (x, y) 是否在 B 中:map.containsKey(x) && map.get(x).contains(y)

  2. Go 遍历 A 的所有点,并使用上面创建的数据结构检查该点是否在 B 中。

第 1 步是 O(b),第 2 步是 O(a),得到 O(a + b)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM