用一个平均分布的随机函数,构造另外一个平均分布的随机函数

Random7 Using Random5
:Given a random generator random5(), the return value of random5() is 0 - 4 with equal probability. Use random5() to implement random7().

class Solution(object):
    def random7(self):
      num = self.random25()
      while num > 20:
        num = self.random25()
      return num % 7
    
def random25(self):
      return 5 * random5() + random5()

关键在于def random25(self):
return 5 * random5() + random5()
.其实这跟我亚马逊二面时那个用random2()构造一个平均分布的随机函数,底层原理是一样的。randomR()只能直接构造出个数为R的幂的随机分布函数。不管是用它这种方法,还是我那种二叉查询的方法,时间复杂度也是一样的。

上一段是第一步,可以得出一个分布个数为等比数列的随机函数系列。第二步其实也相对简单了,就是拿其中最小的一个分布数大于等于7(如果是其它值原理也一样)的随机函数,分布数中必有最大的7的倍数(7a)。随机结果若小于7a,则可得结果,若否则递归之

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_23204557

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值