想象一下,您有一個物件串列。每個物件看起來像:
{'itemName':'name',
'totalItemAppearance':100,
'appearancePerList': 20}
和一些數字 X,它代表可以包含此類專案的串列的數量。
我需要做的是隨機挑選一個專案,將它們放入串列中并尊重專案引數。
最后,我希望 X 個串列中使用的專案(在所有串列中)恰好是 'totalItemAppearance' 次,但在每個串列中它應該小于或等于 'appearancePerList'
它看起來很簡單,但我不知道如何正確構建演算法,而且我無法對這個問題所需的“分布問題”型別進行分類,所以我可以正確地詢問谷歌。感謝您的回復!
uj5u.com熱心網友回復:
首先,你不需要同時考慮所有不同型別的物件:不同型別的物件之間沒有關系。所以我只會考慮只有一種物件的情況。
您要做的是從一組滿足某些條件的物件中選擇一個均勻的隨機樣本。這里的物件是物件到串列的所有可能分布,條件是物件的總數應該是'totalItemAppearance'并且沒有串列包含超過'appearancePerList'的物件。
如果 'appearancePerList' 不是太小,那么您可以應用以下演算法(而不是等待永恒):
--> 將“totalItemAppearance”專案的統一隨機分布選擇到串列中(更容易做到)
--> 如果每個串列中最多有 'appearancePerList' 物件,則接受
--> 否則重復
該演算法將產生您想要的統一樣本。我不知道這種抽樣技術是否有名字(也許是拒絕抽樣的特例?)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488648.html
