我有一个与几何有关的简单编程问题!我可以用铅笔和纸来解决它(在视觉模式下!!)但是我不确定我是否可以编程。我不需要代码本身,而是需要伪代码或实现的想法。
一行中有4个点,给出了位置。每个点需要一个自己周围的最小空间,这是在点的位置之后给出的。我们希望找到最小(长度)线段,它可以满足上述所有要求。换句话说,我需要在这些点上的最小生成线,并且需求周围的空间最小。
实施例: $ p_i $ :( x,L),其中x表示位置(实数),L表示x周围的最小空间要求。
p1:(1,1) 第2页:(2,1) 第3页:(5,1) 第4页:(7,2)
图形表示:
如图所示,结果是1到7的线段,长度为6.
另一个例子: p1:(2,1) 第2页:(3,2) 第3页:(4,1.5) 第4页:(6.5,0.5)
结果(下面的绿线)是从2到6.5的线段(长度:4.5)
答案 0 :(得分:0)
最佳结果的长度总是大于max(x_i)-min(x_i)i = 1,2,3,4
总是有一个最佳解决方案也很容易,它的一个端点与x_i匹配,即你可以将生成最优结果与一个点匹配,例如x_1。
从$ - \ infty $扫描到$ + \ infty $。启动x_1并将其跨越右边距。另外,你可以开始所有其他点(即,他们的左边距已经开始的点)。换句话说,尽可能晚地开始第一个点,在它之后,尽快开始所有其他点。 最后,如果有一个点x_i,其左边距已经在x_1之前开始,则将此差异称为diff_i。将所有diff_i添加到所有x_i s并找到结果最后一点之外的所有段(即if(x_i + diff_i> current_end_position then current_end_position = x_i + diff_i。
感谢您的评论。