algorithm - 使用给定的随机数生成函数查找随机数生成器

标签 algorithm random number-theory

这是一道面试题:

给定一个生成 [1,5] 范围内随机数的函数,我们需要使用此函数生成 [1,9] 范围内的随机数。 我想了很多,但无法写出满足随机性的方程式。 请大家回答。这可能对以后的采访有帮助。

最佳答案

改编自“Expand a random range from 1–5 to 1–7

它假设 rand5() 是一个返回 1 到 5 范围内的统计随机整数的函数。

int rand9()
{
    int vals[5][5] = {
        { 1, 2, 3, 4, 5 },
        { 6, 7, 8, 9, 1 },
        { 2, 3, 4, 5, 6 },
        { 7, 8, 9, 0, 0 },
        { 0, 0, 0, 0, 0 }
    };

    int result = 0;
    while (result == 0)
    {
        int i = rand5();
        int j = rand5();
        result= vals[i-1][j-1];
    }
    return result;
}

它是如何工作的?可以这样想:想象一下在纸上打印出这个二维数组,把它钉在飞镖板上,然后随机向它扔飞镖。如果你命中一个非零值,它是 1 到 9 之间的统计随机值,因为有相同数量的非零值可供选择。如果你击中了零,就继续扔飞镖直到你击中非零。这就是这段代码所做的:i 和 j 索引在飞镖板上随机选择一个位置,如果我们没有得到好的结果,我们就继续扔飞镖。

这在最坏的情况下可以永远运行,但从统计上讲,最坏的情况永远不会发生。 :)

关于algorithm - 使用给定的随机数生成函数查找随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190340/

相关文章:

c# - 基于先前排序的排序

string - 找出是否存在两个相邻的相同子串

c# - 随机不是那么随机

c - 使用赔率的随机数生成器

c# - 如何枚举 x^2 + y^2 = z^2 - 1(有附加约束)

algorithm - 在坐标 2D 平原中从点 1 移动到点 2 的方法数

mysql - 使用max、group by、临时表和随机行选择的mysql查询结果的性能

按顺序查找一组大于 x 的素数的乘积的算法

math - 是否有可能设计一个接受无理数的自动机?

algorithm - 我怎样才能找到包含一些给定点的最小圆圈?