📣 Back to School开学季 - VIP通行证5折优惠!蓝莓、Offer多多同步优惠
查看: 1440| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

如何weighted sample without replacement

全局:

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

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

x
k种不同颜色的球,个数为[n1, n2, n3, ..., n_k], 如何sample without. 1point3acres
replacement?要求sample operation time complexity log(k)

class WeightedSample:-baidu 1point3acres
    def __init__(self, num_balls):
        pass

    def sample(self):
        pass # return a color in time complexity of log(k)


看了https://en.wikipedia.org/wiki/Reservoir_sampling 似乎也做不到logk, 这里
面有什么技巧吗?

上一篇:2020年DS intern 面试结果总结及反思
下一篇:regression问题如何“特别对待”预测值特定区间的modeling
🔗
ZYYYZ 2021-1-18 08:21:26 | 只看该作者
全局:
我有一种方法是二分查找的。感觉搜索过程是logk


  1. import itertools, bisect, random
  2. . 1point3acres.com
  3. def weighted_sample(values, probs):
  4.     cumulative_probs = [0.0] + list(itertools.accumulate(probs))
  5.     interval_idx = bisect.bisect(cumulative_probs, random.random()) - 1
  6.     return values[interval_idx].google  и

  7. values = [3, 5, 7, 11]
  8. probs = [9/18, 6/18, 2/18, 1/18]


  9. d = {}

  10. for _ in range(1000000):
  11.     value = weighted_sample(values, probs)
  12.     d[value] = d.get(value, 0) + 1
  13.    
  14. print(d)

  15. {5: 332339, 3: 501134, 7: 110865, 11: 55662}
复制代码
回复

使用道具 举报

🔗
 楼主| capybara9673 2021-1-18 08:29:46 | 只看该作者
全局:
YZDH 发表于 2021-1-18 08:21
我有一种方法是二分查找的。感觉搜索过程是logk

[mw_shl_code=python,true]

你的解法是with replacement情况下,二分可以做logk。这个是without replacement, 我不知道怎么可以在logk时间内更新 cdf 数组
回复

使用道具 举报

全局:
感觉没有更好的办法,每次sampling都需要O(N)来update cdf
回复

使用道具 举报

🔗
AbelEinzbern 2021-1-18 10:32:33 | 只看该作者
全局:
有一种方法可以做到 O(log(k)) 来update cdf, 用 fenwick tree/ binary indexed tree 来存prefix sum 以及query。但是缺点是,query单个prefix sum 的时间会从O(1) 增加到 O(log(k)), 每次operation的时间会增加到 O(log(k)^2)
回复

使用道具 举报

全局:
用heap吧。
我assume题的意思是sample logk但是init复杂度另算
回复

使用道具 举报

🔗
 楼主| capybara9673 2021-1-18 12:17:19 | 只看该作者
全局:
lilianzcc 发表于 2021-1-18 11:57
用heap吧。
我assume题的意思是sample logk但是init复杂度另算

heap key用什么呢?heap size取k吗?
回复

使用道具 举报

🔗
 楼主| capybara9673 2021-1-18 12:25:51 | 只看该作者
全局:
AbelEinzbern 发表于 2021-1-18 10:32. ----
有一种方法可以做到 O(log(k)) 来update cdf, 用 fenwick tree/ binary indexed tree 来存prefix sum 以及q ...
..
嗯嗯,我面试的时候提到过这个,反馈不明显。似乎面试官脑子中的思路不是从数据结构的角度来提示,感觉像是数学思路来解决
回复

使用道具 举报

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

本版积分规则

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