次のようなコレクションがあります。
[
{
"id": 1,
"tier": 0
},
{
"id": 2,
"tier": 1
},
{
"id": 3
"tier": 2
},
{
"id": 4,
"tier": 0
}
]
最下層の要素を選択する確率がp、次の最下層が (1- p ) * pなどである要素を標準的なランダム選択で選択する標準的な方法はありますか?
したがって、たとえば、最も可能性の高いことが起こり、 n = 2 および任意のp > .5を使用して上記の例に対してクエリを実行すると(これは常に true になると思います)、返され[{"id": 1, ...}, {"id": 4}]
ます。n = 3 の場合、[{"id": 4}, {"id": 1}, {"id": 2}]
など。
たとえば、 objsとしてそのような辞書が与えられた疑似 Python コードは次のとおりです。
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