【问题标题】:Create a random generator for a range [min, max] given a 0/1 random generator给定 0/1 随机生成器,为范围 [min, max] 创建一个随机生成器
【发布时间】:2023-03-28 11:12:01
【问题描述】:

给定一个随机生成器,它以相同的概率生成 0 或 1,如何创建一个随机生成器int generateRandom(int min, int max)在 [min, max] 范围内生成具有相同概率的随机数?

如果这个函数会以任意的最小值和最大值被多次调用,如何优化它以提高时间效率?

【问题讨论】:

    标签: random


    【解决方案1】:

    这是一个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 &lt;= n &lt;= max - min范围内它才返回n + min_

    【讨论】:

    • 假设max=6min=0,您的解决方案永远不会将最高位设置为1,但很容易解决。不过,我认为描述算法比实现更有意义。
    • @Voo 在那里我添加了一个解释并修复了一个错误
    【解决方案2】:

    我可以澄清一下您要优化的内容吗?这里至少有三层代码: 1:某种应用程序,调用项目2: 2:int generateRandom(int min, int max),调用项目3: 3:一些生成0或1的随机发生器 您是想让 2 运行得非常快还是让 3 运行得非常快?

    【讨论】:

    • 这不是答案,应该是评论。此外,我认为代码层在这里甚至不相关,他只是想弄清楚如何在任意两个任意数字之间生成一个真正的随机数,只需要一个返回一位的函数。
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 2014-02-25
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多