【问题标题】:random number using another random function [duplicate]使用另一个随机函数的随机数[重复]
【发布时间】:2014-10-13 17:29:45
【问题描述】:
我最近在一次采访中被问到这个问题:
给你一个公平的 Randon5() 函数,它以相同的概率返回 1-5 之间的数字。现在您需要使用 Random5() 编写一个公平的 Random7() 函数,该函数将返回 1-7 之间的数字,没有其他可以使用。
提前致谢。
【问题讨论】:
标签:
algorithm
random
probability
【解决方案1】:
一般来说,不可能在有界的有限时间内做到这一点,因为 7 不是 5 的幂。你可以这样做,以使过程永远运行的概率为 0,即它会终止,但它只是一个什么时候的问题。
其中一种方法是运行 1-5 生成器两次以获取 1 到 25 之间的随机数。如果该数字大于 21,则重复。否则,如果您得到一个介于 1 和 21 之间的数,则在除以 7 时取余数并加 1。由于 7 除以 21,这将给您一个介于 1 和 7 之间的统一随机数。
每次尝试获取 1 到 21 之间的数字时,失败的几率只有 4/25。因此,在成功之前您必须迭代该过程的预期次数少于 2。