我需要帮助构建以下问题的算法。
我有一组点G可以“看到”其他点C。需要一种算法来从G中找到覆盖所有C的最小集合(G不一定是C的一部分)。
我有一种感觉,这应该通过动态编程来解决。但我对任何可以帮助我的解决方案/想法持开放态度。
谢谢!
编辑1:
我可能没有完全理解这个问题。
这些点位于具有地形高度的 3d 表面上。地形可能会在点之间上升到一定高度,使得一个点看不到另一个点。只要有直接的视线,无论距离多远,这些点都可以互相看到。
如果点a(从G)可以看到点b(从C)-并且点b可以看到d(从C),那么a可以看到d。不确定这是否有所作为。
如果只有a(来自G)可以看到b(来自C),我们必须选择a以覆盖所有C - 所以在使用贪心算法之前最好这样做。
根据新信息,仍在考虑是否还有其他差异。