我有一个看起来像这样的集合:
[
{
"id": 1,
"tier": 0
},
{
"id": 2,
"tier": 1
},
{
"id": 3
"tier": 2
},
{
"id": 4,
"tier": 0
}
]
有没有一种标准的方法来选择n 个元素,其中选择最低层元素的概率是p,下一个最低层是 (1- p )* p,依此类推,标准随机选择元素?
因此,例如,如果最有可能发生的事情发生并且我使用n = 2 和任何p > .5对上述示例运行查询(我认为这将永远是正确的),那么我会回来[{"id": 1, ...}, {"id": 4}]
;n = 3,则等[{"id": 4}, {"id": 1}, {"id": 2}]
。
例如,这里有一些伪 Python 代码,给定一个像objs这样的字典:
def f(objs, p, n):
# get eligible tiers
tiers_set = set()
for o in objs:
eligible_tiers.add(o["tier"])
tiers_list = sorted(list(tiers_set))
# get the tier for each index of results
tiers = []
while len(tiers) < min(n, len(obis)):
tiers.append(select_random_with_initial_p(eligible_tiers, p))
# get res
res = []
for tier in tiers:
res.append(select_standard_random_in_tier(objs, tier)
return res