可以,
我在处理一个我似乎无法解决的问题。一点帮助?
问题:给定一条长度为M、有n个弯钩的木线,这些弯钩的位置以数组的形式给出(0我们如何找到球的最佳位置,使弹簧和系统处于平衡状态金属球不允许在生产线前后移动即球的末端不能小于0或大于m。可以在阵列中的同一位置有多个挂钩。
假设:给定的数组总是有效的。
可以忽略垂直拉伸,而只考虑弹簧在水平方向上的拉伸这个问题在本质上可以看作是一维的。
限制:这里寻求O(nlogn)或更好的解决方案。
示例:m=10,数组=[4,4],r=1(直径为2),最佳球位置=[3,5]
到目前为止我所做的:
一次接一个钩子/球,如果两个球互相击中,则创建Clustor把它们对称地放在钩子的中心。瓶颈O(n^2),因为球一直互相击中
把所有的球放在钩子的中心。递归返回最多3个子问题。。
a)向左拉伸的球,b)向右拉伸的球,c)中间的球。瓶颈这3个子问题可能有重叠,让重叠好似乎很尴尬。

最佳答案

这里是一种二进制搜索,以找到每个球的正确位置。
按每个球的连接顺序开始每个球的旁边,每个球可以走到最远的地方。
计算球移动所需的空间量(从最右边的球到右边边缘的距离),并使用其中的一半作为开始增量。
计算弹簧、其邻居和边缘对每个球的净力。
将每个球按净力的方向移动增量,如果没有净力,则将其保持在原来的位置。
如果增量低于所需的精度,或者所有球都没有净力,则停止。否则,将增量除以2,然后转到步骤3。

08-19 20:43