Algorithm 在三维空间中设置覆盖

Algorithm 在三维空间中设置覆盖,algorithm,language-agnostic,computational-geometry,graph-algorithm,np-complete,Algorithm,Language Agnostic,Computational Geometry,Graph Algorithm,Np Complete,我需要帮助为下面的问题构造一个算法 我有一组点G可以“看到”其他点C。需要一个算法从G中找到覆盖所有C的最小集(G不一定是C的一部分) 我觉得这应该用动态规划来解决。但我愿意接受任何能帮助我的解决方案/想法 谢谢 编辑1: 我可能还没有完全理解这个问题 这些点位于具有地形高度的三维曲面上。地形可能会上升到点之间的某个高度,使得某个点看不到另一个点。只要有直接的视线,这些点就可以看到彼此,不管距离有多远 如果点a(从G)可以看到点b(从C)-点b可以看到d(从C),那么a可以看到d。我不确定这是

我需要帮助为下面的问题构造一个算法

我有一组点G可以“看到”其他点C。需要一个算法从G中找到覆盖所有C的最小集(G不一定是C的一部分)

我觉得这应该用动态规划来解决。但我愿意接受任何能帮助我的解决方案/想法

谢谢

编辑1:

我可能还没有完全理解这个问题

这些点位于具有地形高度的三维曲面上。地形可能会上升到点之间的某个高度,使得某个点看不到另一个点。只要有直接的视线,这些点就可以看到彼此,不管距离有多远

  • 如果点a(从G)可以看到点b(从C)-点b可以看到d(从C),那么a可以看到d。我不确定这是否会有影响

  • 如果只有a(从G)可以看到b(从C),我们必须选择a以覆盖所有C,所以最好在使用贪婪算法之前这样做

根据新信息,仍在思考是否还有其他差异。

您的问题被称为。它是NP完全的

我将使用贪婪对数(n)近似算法。它在每一步选取(G)中的元素,该元素覆盖(C)中尚未覆盖的最大数量的点


互联网上的大多数课堂讲稿只展示了上述近似算法

正如Lund&Yannakis(1994)所证明的那样,很难比上述算法做得更好。你可以在维基百科的文章中找到参考资料

也可以使用集合覆盖问题的等效整数线性问题公式。但同样地,我们得到了一个log(n)近似算法

还有其他的近似算法,但大多数都在研究论文中,因此它们的描述并不容易理解。你可以在谷歌上搜索“近似算法集封面”


我不知道是否有一个经验法则来判断一个问题是NP完全问题还是已知问题的一个变体,它存在使用动态规划的解决方案。但是我发布了一个问题


关于只有a(来自G)可以看到b(来自C)的情况,贪婪算法无论如何都会选择a,因为它只有在看到来自C的所有点时才会停止。算法选择点的顺序不会改变解



如果点a(从G)可以看到点b(从C)-点b可以看到d(从C),那么a可以看到d,这一事实不允许将问题建模为a。平面图对于您的问题有更好的近似算法,比贪婪算法更好。

谢谢!1) 我读了维基上的文章《低频系统算法》,与我的情况不符。还有其他近似算法吗?2) 关于如何发现你的算法问题是否等同于已知问题的任何提示?嗨!我已经更新了我的答案,为你的评论添加了答案!见上文。最后我想到了这个解决方案。从C中选择防护数量最少的点(如果有一个防护-无论如何都必须选择该点。)如果a中有几个防护,则选择一个覆盖C中更多点的点。现在,我需要展示此算法比最优算法更差的示例,并尝试证明近似因子(或它是无穷大的)我认为你应该问一个新问题。还有一个问题,问“看”这个词在这里是什么意思?这些点是位于三维平面上还是位于三维表面上?有一个地形定义为x,y,z,这意味着高度,而点C,G定义为x,y,z,这意味着在地形上的高度。位置如何影响一个点看到其他点的可能性?如果他们之间的距离小于一定的距离,他们能看到对方吗?不能。但是地形可能会上升到他们之间的一定高度,使得一个点看不到另一个点。只要有直接的视线,这些点就可以看到彼此,不管距离有多远