前一陣子寫論文時,有用到一些輪盤法,用圖片簡言之
比如我們希望依照上方的圓餅圖的比例去選出A、B及C等項目。
- 選到A的機率為 20%
- 選到B的機率為 15%
- 選到C的機率為 10%
- 選到其他的機率為 55%
以下的程式碼為使用 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