回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

【算法面试高频题】rand7()问题

🔗
匿名用户-4XDZU  2021-9-26 16:57:58 |倒序浏览

2018(7-9月) 码农类General 硕士 全职@google - 内推 - Onsite  | 😐 Neutral 😣 Hard | Pass | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
# 1. 题目
已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10()随机1~10。


# 2. 解析
这道题主要是考察的对概率的理解。

要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n 的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1-10*n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数。由于(rand7()-1)*7+rand7()可以构造出均匀分布在1-49的随机数(原因见下面的说明),可以将41~49这样的随机数剔除掉,得到的数1-40仍然是均匀分布在1-40的,这是因为每个数都可以看成一个独立事件。

在进入题目之前,我想先给读者举个例子。设想一个简单的例子,假设已知rand2()可以均匀的生成[1,2]的随机数,现在想均匀的生成[1,4]的随机数,该如何做呢?

我想如果你也像我一样第一次接触这个问题,那么很可能会这么考虑——令两个rand2()相加,再做一些必要的边角处理。如下:

rand2() + rand2() = ? ==> [2,4]
   1    +   1     = 2
   1    +   2     = 3
   2    +   1     = 3
   2    +   2     = 4

// 为了把生成随机数的范围规约成[1,n],于是在上一步的结果后减1
(rand2()-1) + rand2() = ? ==> [1,3]
   0       +   1     = 1
   0       +   2     = 2
   1       +   1     = 2
   1       +   2     = 3


可以看到,使用这种方法处理的结果,最致命的点在于——其生成的结果不是等概率的。在这个简单的例子中,产生2的概率是50%,而产生1和3的概率则分别是25%。原因当然也很好理解,由于某些值会有多种组合,因此仅靠简单的相加
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
60) return 1 + num % 10;
        // 说明刚才生成的在61-63之间,利用随机数再操作一遍
        num = (num - 60 - 1) * 7 + rand7();
        if(num <= 20) return 1 + num % 10;
    }   
}


# 归纳总结 randm()->randn()
已知random_m()随机数生成器的范围是[1, m] 求random_n()生成[1, n]范围的函数,m < n && n <= m*m 一般解法:

int random_n()
{
    int val = 0;
    int t;   //t为n的最大倍数,且满足t<m*m
    do
    {
        val = m * (random_m() - 1) + random_m();
    }while(val > t);
    return val;
}

评分

参与人数 1大米 +10 收起 理由
葡萄的奶茶 + 10 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分


上一篇:亚马逊OA放送 一题全过一题9/11请问还有机会吗?
下一篇:Optiver 笔试
地里匿名用户
🔗
匿名用户-IYGKP  2021-9-28 11:07:42
楼主厉害,学到了
回复

使用道具 举报

🔗
chunshun 2021-9-28 20:14:22 | 只看该作者
全局:
楼主厉害,非常感谢
回复

使用道具 举报

🔗
Faine 2021-10-6 03:29:07 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表