我需要开发一种算法,它可以在用户指定的区间内随机选择值。此外,这些值需要由用户定义的最小距离分隔。在我的情况下,这些值和区间是时间,但这对于开发通用算法可能并不重要。
例如:用户可能定义了三个时间间隔(0900-1200、1200-1500;1500-1800),并要在这些间隔中选择3个值(每个间隔1个)。用户还可以说他们希望这些值至少相隔30分钟。因此,值不能是1159、1201、1530,因为前两个元素只相隔2分钟。
将奖励几百个点(我能给多少就多少)给最有效的算法。答案可以是与语言无关的,但偏爱使用伪代码或JavaScript来回答。
注:
- 区间的数量和长度完全由用户确定。 - 两个随机选择的点之间的距离也完全由用户确定(但必须小于下一个区间的长度)。 - 用户定义的区间不会重叠。 - 可能存在用户定义的区间之间的间隙(例如0900-1200、1500-1800、2000-2300)。
我已经有了以下两种算法,并希望找到更高效的算法:
- 在区间#1中随机选择值。如果此值距离区间#2的开头小于用户指定的距离,则在随机选择区间#2的值之前调整区间#2的开头。对于所有区间重复此过程。 - 从所有区间中随机选择值。循环遍历所选值的数组,并确定它们是否由用户定义的最小距离分隔。如果不是(即值太接近),则随机选择新值。重复,直到有效数组。
例如:用户可能定义了三个时间间隔(0900-1200、1200-1500;1500-1800),并要在这些间隔中选择3个值(每个间隔1个)。用户还可以说他们希望这些值至少相隔30分钟。因此,值不能是1159、1201、1530,因为前两个元素只相隔2分钟。
将奖励几百个点(我能给多少就多少)给最有效的算法。答案可以是与语言无关的,但偏爱使用伪代码或JavaScript来回答。
注:
- 区间的数量和长度完全由用户确定。 - 两个随机选择的点之间的距离也完全由用户确定(但必须小于下一个区间的长度)。 - 用户定义的区间不会重叠。 - 可能存在用户定义的区间之间的间隙(例如0900-1200、1500-1800、2000-2300)。
我已经有了以下两种算法,并希望找到更高效的算法:
- 在区间#1中随机选择值。如果此值距离区间#2的开头小于用户指定的距离,则在随机选择区间#2的值之前调整区间#2的开头。对于所有区间重复此过程。 - 从所有区间中随机选择值。循环遍历所选值的数组,并确定它们是否由用户定义的最小距离分隔。如果不是(即值太接近),则随机选择新值。重复,直到有效数组。