輪盤賭演算法

看風景就發表於2017-12-11

如果已知A類物件生成概率為P(A),B類物件生成概率為P(B),C類物件···,K類物件,他們的概率總和為1,問如何在A~K中隨機生成一個物件

正如下面的輪盤中獎項

 

所有獎項的概率和為1,轉一次輪盤總會抽中其中的一個獎項,問一次輪盤轉動產生的獎項是哪個

javascript實現

function fGetNum(){
    //所有概率和為1,0.15與0.150是為了防止Object.keys對key去重
    var probs = {'0.02':'0.5%','0.03':'0.4%','0.05':'0.3%',
                '0.1':'50','0.15':'30','0.150':'10','0.2':'5','0.3':'3'}
    var res = 0,
        p = Object.keys(probs),
        index = fRoulette(p);
    if(index != -1){
        res = probs[p[index]];
    }
    return res;
}
//通過概率獲取索引
function fRoulette(p){
    var rand = Math.random();
    var pointer=0;
    for(var i=0,len=p.length;i<len;i++){
        pointer += parseFloat(p[i]);
        if(rand <= pointer){    
            return i;
        }
    }
    return -1;
}

 

參考:http://blog.csdn.net/pymqq/article/details/51375522

      http://www.cnblogs.com/littlebugfish/p/3982593.html

相關文章