给定n个点,每个点都有自己的范围,调整所有点以最大化相邻点的最小距离
在一维中取n个点:
每个点都可以在其上方箭头指示的特定范围内移动。这些范围是已知的。范围可以重叠。如何调整这些点以使相邻点的最小距离最大化?
我也可以接受近似值。
编辑:我并不是在寻找代码,而是在寻找一般策略。我真的不知道如何解决这个问题。
最初,我认为贪心算法可能会奏效。
-
设 p0 为起点,pn 为终点。让 dist(p0,p1) 代表 p0 和 p1 之间的距离。显然,p0 尽可能向左调整,pn 尽可能向右调整。
-
接下来,找到 dist(p0,pn)/n-1。这代表了每个点之间应该尽可能分散的最佳距离。将 p1 移动到该距离附近。
-
找到 dist(p1, pn)/n-2。将 p2 尽可能靠近这个距离。
-
重复其余的点。
这不起作用,因为稍后调整另一个指针可能会破坏之前的点。