返回信息流最近面试遇到一个有意思的题,想问问大家有没有啥好思路。
题目是:让设计一个数据结构,要求可以存储Object-Weight Pair,实现如下几个接口:1) Update;2) Insert;3) Remove;4) GetRandom.这个GetRandom的方法是随机地返回一个Object,要求概率满足:此object的weight / 所有weight的和
最原始的解法:
ArrayList + Map 实现了 O(1), O(1), O(1), O(N)
然后面试官觉得可以优化,就有了 Queue + BIT + Map的解法,达到了 全logN的复杂度。
但是面试官似乎还不太满意,说这个还能更好。后来我在领英上问了下思路,他给了我一个论文链接:
https://people.mpi-inf.mpg.de/~mehlhorn/ftp/DiscreteRandomVariates.pdf
说可以达到 O(1) 的期望。
想请问论坛大大们,有什么好的思路么。或者遇到过类似的问题可否分享一下
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #90907同步于 2016/8/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
问一个数据结构中GetRandom的设计实现题
panda007
2016/8/24镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 YUEYE 的大作中提到: 】
: 这题我在很多终面都遇到过。基本都是高手出的。双map能够达到所有操作的O(1)
来,细细道来! [ema11]
HashMap<String, Integer> map1 = new HashMap();
HashMap<Integer, String> map2 = new HashMap();
这题关键的地方在于随机出来的要等该。所以,你必须要存下来他的index。
这题早些年很喜欢考,所以对于老一辈程序员把这个称之为:“设计等概随机池”RandomPoll
【 在 panda007 的大作中提到: 】
:
: 来,细细道来!