zoukankan      html  css  js  c++  java
  • 趣题: 一道面试题的解法

    原题:

    Given a random number generator which can generate the number in range (1,5) uniformly. How can you use it to build a random number generator which can generate the number in range (1,7) uniformly?

    译文:

    给定一个随机数生成器,这个生成器能均匀生成15(1,5)的随机数,如何使用这个生成器生成均匀分布的17(1,7)的数?

     

    在解答这个问题之前,先要搞清楚均匀的含义,均匀就是说生成器取到范围之内的各个数的概率是相同的,比如(1,5)生成器取到每个数的概率均为1/5=25%. 也就是说我们要做的事情就是利用这个已有的生成器去构造一个 能均匀生成17的生成器。

     

    这个问题看似有点无从入手,一个只能生成5个数的随机数生成器 怎么扩展到7个阿? 难道给(1,5)×(7/5)? 这样显然是不行的。因为相乘一个常数,结果产生5个数。

     

    我们不妨换一个角度思考问题,如果这个题目换成要你生成(2,10)的随机数均匀生成器,那是不是简单了许多?你可能马上就想到了,我用(1,5)生成器 相继生成两个随机数,然后相加,他们的范围就是2~10 ,并且他们之间的分布是均匀的。 如果按着这个思路,我们就可以把这个题解答了。

     

    上面的思想其实就是用(1,5) 生成器去扩展它的生成数范围,一次不行,我两次呢? 没错,我们先后取两次,然后把结果相乘,那么可以知道,这两个数相乘后的范围是125 并且取到1~25 中间的任何一个数的可能性是相同的。2173倍,于是我们就有了 这样的映射:

    1~3 –> 1

    4~6 -> 2

    19~21->7

    如果得到的数大于21,则重取。这样做,我们至少可以保证,生成的1~7的数的概率是相同的,因此也满足题目的要求。

  • 相关阅读:
    zabbix监控系统客户端安装
    可以学习的博客地址
    Linux下Nagios的安装与配置
    ShopNC多用户商城标题去版权 后台去版权方法2.0版本
    解析crontab php自动运行的方法
    暑假周报告(第五周)
    暑假周报告(第四周)
    暑假周报告(第三周)
    暑假周报告(第二周)
    《大道至简》读后感
  • 原文地址:https://www.cnblogs.com/xhinker/p/1541094.html
Copyright © 2011-2022 走看看