PHP 與 JS 中獎機率的演算法

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP 與 JS 中獎機率的演算法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

經典的機率演算法。

現在有數組:[10, 20, 30, 40] 。

假設對應中獎幾率:特等獎10%,一等獎20%,二等獎30%,三等獎40%,總共100%。

演算法開始時,從數組中選出一個值$value,再從1-100機率空間內隨機選出一個數$rand。

比較$value和$rand,如果$rand在$value機率範圍之內,則直接返回$value對應的key。

如果不在,則將機率空間的值減去$value值。

在本例中,第一次判斷之後,就是減去10,也就是說第二次是在1-90這個範圍內篩選的。

這樣篩選到最後,總會有一個數滿足要求。

就相當於去一個箱子裡摸東西,

第一個不是,第二個不是,第三個還不是,那最後一個一定是。

這個演算法簡單,而且效率非常高。

PHP實現
<?php    function getRand($arr)    {        $result = '';        //機率數組的總機率精度        $sum = array_sum($arr);        //機率數組迴圈        foreach ($arr as $key => $value) {            $rand = mt_rand(1, $sum);            if ($rand <= $value) {                $result = $key;                break;            } else {                $sum -= $value;            }        }        unset ($arr);        return $result;    }使用範例:$a = [10, 20, 30, 40];// 輸出3的機率最大echo 'PHP:' . getRand($a);
Javascript實現
<script>    function getRand(arr) {        var result = 0;        var sum = arr.reduce(function(a, b) {            return a + b;        });        for (index in arr) {            rand = Math.round(Math.random() * (sum - 1) + 1);            if (rand <= arr[index]) {                return index;            } else {                sum -= arr[index];            }        }        return result;    }    // 使用樣本,輸出2的機率最大    var a = [10, 20, 30, 40];    document.write('<br />Javascript:' + getRand(a));</script>使用範例:    // 使用樣本,輸出3的機率最大    var a = [10, 20, 30, 40];    document.write('<br />Javascript:' + getRand(a));

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.