Skip to content

[Nodejs] Weighted Random,帶有權重的隨機函式

Published: at 06:27 AM (1 min read)

前一陣子寫論文時,有用到一些輪盤法,用圖片簡言之

輪盤法

比如我們希望依照上方的圓餅圖的比例去選出A、B及C等項目。

以下的程式碼為使用 Nodejs 實作這樣的帶有權重的隨飢函式

[javascript] var items=[“A”, “B”, “C”, “other”]; var itemsWeight=[20, 15, 10, 55]; function weightedRandom(items, itemsWeight) { var totalWeight=eval(itemsWeight.join(”+”)); console.log(totalWeight); // 100 var randomArray=[]; for(var i=0; i<items.length; i++) { for(var j=0; j<itemsWeight[i]; j++) { randomArray.push(i); } } var randomNumber=Math.floor(Math.random()*totalWeight); return items[randomArray[randomNumber]]; } weightedRandom(items, itemsWeight); // 這樣就會依照原餅圖機率隨機選出囉! [/javascript]

PS. 如果不想重複選的話,就需要有一個陣列記住哪些選過了~

參考資料:

http://www.blogjava.net/sevenduan/archive/2009/12/11/305552.html