📣 独立日限时特惠: VIP通行证立减$68
查看: 1383| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

[数组] 求问 G家一道跟概率相关的题

全局:

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

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

x
G 家onsite 遇到一个题

从m 个人里面选一个(0-m-1),没有 Random.nextInt() 函数,只有一个硬币(coinFace(), return 1 or 0),如何选出唯一的candidate,实现代码,返回这个人的idx。要求每个人被选中的概率是1/m。

我的想法是如果m 是2 的次方数, 每次选上一次一半的人, 选多了或选少了,重选;直到最后只剩2个人选一个。
没有想到solid 的证明方法。。  
如果m 不是2 的次方数, 没想到怎么解决。。。

不知道大家有什么好的方法吗? 谢谢。

上一篇:有什么网站是可以迅速复习编程语言基本语法的?
下一篇:第一次参加contest 只做出来两题
全局:
抛n次,保证2的n次方大于m,抛的次序看成二进制数,如果在1-m之间返回这个数,否则重新抛n次。
回复

使用道具 举报

全局:
把m想成是二进制 每一位都可以flip
回复

使用道具 举报

🔗
shuang_ca 2019-1-27 13:08:29 | 只看该作者
全局:
def shit(m):
   f=ceiling(log(m,2))-1
   s=0
   for i = (0:f)
       s = s +  2^i * coinFace()
   if s <= m:
       return s
   else:
       return shit(m)
#assume m >= 1
#assume coinFace() is not a pseudo stuff
回复

使用道具 举报

🔗
杨超越 2019-1-27 13:28:27 | 只看该作者
全局:
楼上的大家的思路应该是正确的
可以这样想 每次我们最后选定的那个数 其实是给定了个condition 就是在当前范围里 我们才会选
比如 0->4
这5个数,bit组合有8种,但有3种是需要被drop掉的,prob = (1/8)/(5/8) = 1/5
不知道我这样理解对不对~
回复

使用道具 举报

🔗
14417335 2019-1-28 06:35:21 | 只看该作者
全局:
在最坏情况下浪费的情况还是较大的。连续三次都要扔掉的概率是0.5^3仍然有12.5%

也可以考虑伪随机的构造:假设33是要求的数
先用硬币抛若干次得到一个seed,一个m,一个c。
第一次 f(1) = (seed * m + c) % 33
第二次 f(2) = (f(1) * m + c) % 33
...
回复

使用道具 举报

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

本版积分规则

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