如何解决根据范围随机选择数字和乘数的算法
我有3个数组(值可能会有所不同)
$numbers = [1,2,5,6,10,15];
$multipliers = [1,3];
$range = [0,10];
我需要一种算法,该算法可以使用来自$range
和$numbers
的随机元素随机获得$multipliers
内的值。
例如,它随机抽取2
中的$numbers
和3
中的$multipliers
,得出2 * 3 = 6,在$range
值之间
解决方法
幼稚的解决方案是从x
中选择$numbers
,从y
中选择$multipliers
,计算z=x*y
并返回它在范围内。如果没有,只需重新开始。该解决方案可能会运行很长时间,具体取决于数量和范围。一种可能的改进是针对numbers
中的每个元素预先计算multipliers
中哪个值范围是range
内的有效候选者。如果您对O(n logn)
中的数组进行排序,则可以使用第二个数组的二进制搜索(查找上限和下限)为第一个元素的每个数字计算有效范围。这仍然给您O(n logn)
的时间。然后,只需从第一个数组中随机选择一个元素,然后在所需范围内从第二个数组中随机选择一个元素,即可随机,乘和返回。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。