当前位置: 主页 > 活动乐园 > 正文

已知壹个函数rand7()却以生成1-7的遂机数,请给出

作者:admin 来源:未知 浏览: 【 】 发布时间:2018-09-28 评论数:

  题目:

  已知壹个函数rand7()却以生成1-7的遂机数,请给出产壹个函数,该函数却以生成1-10的遂机数。

  文思:

  假设已知壹个函数却以生成1-49的遂机数,这么何以以此生成1-10的遂机数呢?

  松法:

  该松法基于壹种叫做回绝采样的方法。首要思惟是条需产生壹个目的范畴内的遂机数,则直接前往。假设产生的遂机数不在目的范畴内,则放丢丢该值,重行取样。鉴于目的范畴内的数字被选中的概比值相当,此雕刻么壹个平分的散布匹生成了。

  露然rand7到微少需寻求实行2次,不然产生不了1-10的数字。经度过运转rand7两次,却以生成1-49的整顿数,

  鉴于49不是10的倍数,因此我们需寻求放丢丢壹些值,我们想要的数字范畴为1-40,不在此范畴则放丢丢偏重行取样。

  代码:

  鉴于row范畴为1-7,col范畴为1-7,此雕刻么idx值范畴为1-49。父亲于40的值被放丢丢,此雕刻么剩拙贱-40范畴内的数字,经度过取模前往。下面计算壹下违反掉落壹个满意1-40范畴的数需寻求终止取样的次数的祈求值:

  E(# calls to rand7)=2 * (40/49) +

  4 * (9/49) * (40/49) +

  6 * (9/49)2 * (40/49) +

  ...

  ∞

  =∑ 2k * (9/49)k-1 * (40/49)

  k=1

  =(80/49) / (1 - 9/49)2

  =2.45

  优募化:

  下面的方法父亲条约需寻求2.45次调用rand7函数才干违反掉落1个1-10范畴的数,下面却以终止又度优募化。

  关于父亲于40的数,我们不用立雕刻放丢丢,却以对41-49的数减去40却违反掉落1-9的遂机数,而rand7却生成1-7的遂机数,此雕刻么却以生成1-63的遂机数。关于1-60我们却以直接前往,而61-63则放丢丢,此雕刻么需寻求放丢丢的数条要3个,比较前面的9个,效力拥有所提高。而关于61-63的数,减去60后为1-3,rand7产产-7,此雕刻么却以又度使用产产-21的数,关于1-20我们则直接前往,关于21则放丢丢。此雕刻时,放丢丢的数就条要1个了,优募化又进壹步。天然此雕刻外面面对rand7的调用次数亦添加以了的。代码如次:

  下面计算下优募化前方法的调用rand7函数的祈求次数:

  E(# calls to rand7)=2 * (40/49) +

  3 * (9/49) * (60/63) +

  4 * (9/49) * (3/63) * (20/21) +

  (9/49) * (3/63) * (1/21) *

  [ 6 * (40/49) +

  7 * (9/49) * (60/63) +

  8 * (9/49) * (3/63) * (20/21) ] +

  ((9/49) * (3/63) * (1/21))2 *

  [ 10 * (40/49) +

  11 * (9/49) * (60/63) +

  12 * (9/49) * (3/63) * (20/21) ] +

  ...

  =2.2123