確率アルゴリズムの問題があります
目標は、3 つの項目を含むリストを取得することです。FinalListとして
4 つのソース リストがあります。
ALIST、BLIST、CLIST、DLIST
すべて不明な長さがあります。ユニークな要素が含まれています
(実際には、プログラムの最初はすべて空で、redis のソート済みリストから取得します。実行すると、そこに成長します)
このソース リストから項目を選択します。ランダムなアイテムをピックアップして FinalList を生成する
次の要件を確認してください
FinalListでは、
- ALISTのアイテム出現確率は43%
- BLISTのアイテム出現確率は37%
- CLISTのアイテムが出現する確率は19%
- DLISTのアイテムが出現する確率は1%
私はいくつかのコードを書きましたが、これは 4 つのリストのためだけに多くの要素があります。
from random import choice
final_list = []
slot = []
a_picked_times = 0
while a_picked_times < 43:
item = choice(ALIST)
ALIST.remove(item)
if item in already_picked_list:
continue
slot.append(item)
a_picked_times += 1
b_picked_times = 0
while b_picked_times < 37:
...
SOME CODE SIMILAR
# now slot is a list which contains 100 elements,
# in slot, there are 43 elements of ALIST'items, 37 of B, 19 of C, 1 of D
for i in range(3):
final_list.append( choice(slot) )
したがって、これにより確率要件を確保できます。 ただし、次の条件の下でのみ: この 4 つのリストには多くの要素があります。
list.remove( item ) はリスト内のすべての要素を削除するわけではないため、必要な時間でピックアップ項目を修正します。
A, B, C, D が空の場合、または要素が十分でない場合、確率要件をどのように確保できますか?
A、B、C、D リストはすべて redis ソート済みリストから取得されます。または redis を使用した解決策はありますか?