加權平均數算法


一·算法描述

隨機從一組數據中取出一個,每個數據都有被隨機選中的相應概率

二.實現方式

實現算法有兩種方式

方式一:先計算出每個數據項的權重,然后依據權重依次將每個數據項放入一個數組中,數據項在數組中的個數與數據項的權重呈正相關,為了簡便,也可以將數據項的索引放到數組中,比如一組數據的權重依次是 5 2 2 1,則可以生成這樣一個數組:[0, 0, 0, 0, 0, 1, 1, 2, 2, 3],生成數組后,從數組中隨機選出一個作為結果。

優點:選取的時間復雜度為:O(1),算法簡單;

缺點:空間占用極大,如果權重和為10000,則需要一個長度為10000的臨時數組,造成極大的空間浪費;

方式二:先計算出權重和為sum,然后從1 ~ sum中隨機選取一個數字r,遍歷每個數據項,將每個數據項的權重相加,遇到權重和大於等於r就停止,當前數據項就是所得結果;

優點:沒有額外的空間占用,算法也比較簡單;

缺點:選取的時候要遍歷數組,事件復雜度為:O(n);

三.對於方式二,如果選取的權重數字較大,那么就要遍歷到數組較靠后的位置才能得到結果,極端情況下要遍歷完整個數組才能得到結果,所以為了較高權重的數據較早可以被找到,可以對權重進行降序排序

優點:提高了平均選取速度;

缺點:需要對數組進行排序;

四.代碼(js實現)

方式一:

方式二:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM