查看: 1182| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] Random Pick with Weight without repetition

全局:

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

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

x
Random Pick with Weight 的变形, 要求根据weight来random 选出 一个item, 下一次random 选出item 的时候根据剩下的items的weights来实现概率的选取,不能output之前已经output过的item。

比如 a:1, b:1,c:3,d;5

d有50%的概率被第一次选出, 如果第一次选的是d,

下一次random 的时候剩下的有a:1, b:1,c:3,  a 有20%的机率被选到。。

最后的item有100%的概率被选到。

考官提示tree结构的解法。。但是我不知道是不是binary search tree还是怎么弄个selection tree.

每次poll出一个item之后,是不是得重新更新tree还是怎么样。。请教各位大神有没什么好的解法。。谢谢!

上一篇:分享一个notion刷题模板
下一篇:刷题时候的困倦大家怎么克服的
推荐
maristie 2021-5-30 00:45:23 | 只看该作者
全局:
本帖最后由 maristie 于 2021-5-30 00:58 编辑

感觉这题挺麻烦的,像是 Random Pick with Weight + Random Flip Matrix的结合。不仅要维护区间,还要 remapping 区间,不好做。用普通的 balanced tree 最坏情况和每次重建一棵树的复杂度一样。

我能想到的最好的办法是线段树,每个 key 对应一个区间,统计区间内有效的区间长度和,根据左右子树的长度和的比例决定跳左子树或右子树的概率。每次 pick 一个 key 以后就删除对应区间。查找和区间删除的运行时间都是 O(log n) (n 是所有权重之和)。但正常公司(哪怕是google)不会考线段树吧?
p.s. 随手查了查,好像的确有一些面试官会考这玩意儿……有毒
回复

使用道具 举报

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

本版积分规则

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