我不知何故需要找到問題的解決方案,但無法確切知道可以實作什么以及如何實作。
假設我有一些屬性
prop1 - 7%
prop2 -3%
prop4 - 35%
等等。高于 (7,3,35) 的那些值是被挑選的百分比變化。
現在,我有一個介于 0 和 1 之間的亂數。
我可以以某種方式使用上述資訊并根據該亂數和百分比選擇屬性嗎?
怎么可能?對不起,我的世界之外的問題。
uj5u.com熱心網友回復:
您可以使用亂數在選項的加權串列中選擇一個選項,無論所有權重的總和是否為 100,使用以下演算法:
- 創建一個介于 0 和 1 之間的亂數
- 將該亂數乘以您的權重總和
- 遍歷您的選項,保持到目前為止考慮的所有選項的權重的運行總和。一旦您的累計總數高于您計算的數字,您就找到了您選擇的專案
一些示例代碼:
const options = [
{
id: 1, weight: 0.5
},
{
id: 2, weight: 2
},
{
id: 3, weight: 1
},
];
const pick = function (options) {
const weightTotal = options.reduce((sum, option) => sum option.weight, 0);
const seed = Math.random();
const weightedSeed = seed * weightTotal;
let runningTotal = 0;
for (let option of options) {
runningTotal = option.weight;
if (runningTotal > weightedSeed) {
return option;
}
}
};
console.log(pick(options).id);
這種方法要求你的可用選項是可迭代的,但它們的順序并不重要,因為無論如何你都在使用隨機種子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352344.html
標籤:javascript 算法
上一篇:WEBPACK_IMPORTED_MODULE_3CollectionGroup不是函式-firebase集合組查詢嵌套資料
