【发布时间】:2023-03-28 11:12:01
【问题描述】:
给定一个随机生成器,它以相同的概率生成 0 或 1,如何创建一个随机生成器int generateRandom(int min, int max)在 [min, max] 范围内生成具有相同概率的随机数?
如果这个函数会以任意的最小值和最大值被多次调用,如何优化它以提高时间效率?
【问题讨论】:
标签: random
给定一个随机生成器,它以相同的概率生成 0 或 1,如何创建一个随机生成器int generateRandom(int min, int max)在 [min, max] 范围内生成具有相同概率的随机数?
如果这个函数会以任意的最小值和最大值被多次调用,如何优化它以提高时间效率?
【问题讨论】:
标签: random
这是一个python解决方案
import math
import random
def power_two(n):
return int(math.log(n, 2))
def generate_random(min_, max_):
p2 = power_two(max_ - min_) + 1
while True:
n = 0
for i in xrange(p2):
n <<= 1
if random.randint(0, 1):
n += 1
if n <= max_ - min_:
return n + min_
首先它用power_two计算它需要多少位,然后它逐位生成一个数字,只有在0 <= n <= max - min范围内它才返回n + min_
【讨论】:
max=6 和min=0,您的解决方案永远不会将最高位设置为1,但很容易解决。不过,我认为描述算法比实现更有意义。
我可以澄清一下您要优化的内容吗?这里至少有三层代码: 1:某种应用程序,调用项目2: 2:int generateRandom(int min, int max),调用项目3: 3:一些生成0或1的随机发生器 您是想让 2 运行得非常快还是让 3 运行得非常快?
【讨论】: