• 가중치 랜덤 알고리즘

    2019. 11. 12.

    by. 카유.

    function choosePercent(p) {
        let total = 0;
        for(let i = 0; i < p.length; i++) {
            total += p[i];
        }
        let r = Math.random() * total;
        for(let i = 0; i < p.length; i++) {
            if(p[i] == 0) continue;
            if(r <= p[i]) return i;
            else r -= p[i];
        }
        return -1;
    }

     

     

    여러개의 다른 확률에 의한 결과가 필요할때

    let p = choosePercent([50, 25, 15, 5]);

    위와 같이 50%, 25%, 15%, 5%를 배열에 담고 실행하면

     

    index 확률
    0 50%
    1 25%
    2 15%
    3 5%

    0이 나올 확률 50%

    1이 나올 확률 25%

    2가 나올 확률 15%

    3이 나올 확률 5%

    이처럼 확률에 해당하는 index가 나오게 됩니다.

    let p = choosePercent([40, 10, 10, 0, 30, 30]);

    배열의 총 합이 100을 넘거나 넘지 않아도 상관 없고

    확률이 중복이어도 되고 순서도 상관 없으며

    0%는 선택되지 않습니다.

     

    let p = choosePercent([0]);

    확률이 0%일때는 선택하지 않고

    배열의 범위 밖인 -1을 반환합니다.

    댓글