给出了100个站点。相邻站点之间的距离不相等。您将获得10个标志,您必须在这些站点之间放置。第一个标志位于第一个站,最后一个标志位于最后一个站。现在放下剩余的标志,使两个标志之间的总相邻距离最小。
我的方法是:
考虑10个站点和4个标志的这个问题 让它们之间的距离为 的 1 ----- --- 2--3 4 ---- ----- 5 6 7 ------ ------- 8-9 --- 10 < /强>
其中 - 表示以单位表示的距离 这意味着第1站和第2站之间的距离是5, 因此第一站和第十站之间的距离将是(5 + 2 + 3 + 4 + 5 + 6 + 7 + 1 + 3) = 36
我们在第1站和第10站之间应用二进制搜索,因此得到36/2 = 18
因此,我们将选择枢轴作为18个距离单位并从
应用二进制搜索(i)第1旗的第1和第18单位距离
(ii)第二旗的第19和第36单位距离
第1旗的距离平均为9,更靠近第4站 我们在第4站放置旗帜。
距离的平均值为9,因此距起点的距离为27,这更靠近第7站 因此我们在第7站放置第二个标志。
因此答案将是 的 1 ----- --- 2-3的 4 ---- ----- 5 6 ------的 7 < /强> ------- 8-9 ---的 10 因此,在这种情况下,最大距离被优化为b / w任何两个站是15 同样,我们可以解决100个站点
请检查此方法是否正确或是否可以提高效率。 如果我错了,请纠正我 提前致谢
答案 0 :(得分:0)
你的算法错了。在您的示例中,将站6移动到位置24.您的算法仍将1-4-7-10作为最大距离为15的答案,但实际上1-5-6-10在最大距离时会更好14。
http://www.careercup.com/question?id=10680926处的多项式时间解决方案(你复制了这个问题很糟糕)具有正确的优点,但远非最快的答案。对于这个问题,这是一个更快的答案。
假设我们从我们愿意使用的最大距离开始。我们可以从第一站开始,使用二进制搜索找到我们愿意跳到的最远的站,然后搜索找到最远的那个,等等。使用这个策略我们可以写一个占用最大输入距离的函数并告诉我们使用了多少个标志。 (如果无法完成,我们只能报告大量的标记 - 例如站点数。)
我们可以把它变成一个函数,输入我们愿意接受的最大跳跃,它告诉我们需要多少个标志。
现在我们可以对最小的最大距离进行二进制搜索,从而为我们提供所需的标记数量。
(你可以通过修改该函数来返回标志的数量,以及提供相同精确答案的最小和最大输入值来加快速度。额外的两位信息可以用来加速二进制搜索这为我提供了解决这个问题的最快解决方案。)