加权平均数算法


一·算法描述

随机从一组数据中取出一个,每个数据都有被随机选中的相应概率

二.实现方式

实现算法有两种方式

方式一:先计算出每个数据项的权重,然后依据权重依次将每个数据项放入一个数组中,数据项在数组中的个数与数据项的权重呈正相关,为了简便,也可以将数据项的索引放到数组中,比如一组数据的权重依次是 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