用python实现按权重对N个数据进行选择

Posted 阿牛的牙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python实现按权重对N个数据进行选择相关的知识,希望对你有一定的参考价值。

需求:某公司有N个人,根据每个人的贡献不同,按贡献值给每个人赋予一个权重。设计一种算法实现公平的抽奖。

 

需求分析:按照权重对数据进行选择。

 

代码实现:

  1 def fun(n,p):
  2     """
  3     n 人的编号
  4     p 每个人的权重
  5     """
  6     my_dict = {}
  7     my_sum = 0.0
  8     for i in range(100):
  9         my_dict[i] = [my_sum, my_sum +  p[i]]
 10         my_sum += p[i]
 11     # 随机产生浮点数,表示中奖
 12     bingo = random.random()
 13     for j in range(100):
 14         print(bingo, my_dict[j])
 15         if my_dict[j][0]< bingo < my_dict[j][1]:
 16             return j
 17 if __name__ == "__main__":
 18     import random
 19     n = [i for i in range(1,101)]
 20     # 随机100 个浮点数 
 21     p1 = [random.random() for _ in range(100)]
 22     print(len(p1))
 23     # 二次转换,保证和为1 排序,假设概率从小到大,与人一一对应
 24     p2 = list(sorted([i/sum(p1) for i in p1 ]))
 25     print("概率和:", sum(p2))
 26     print("抽中的是:", fun(n, p2), "")
~                                                  

个人实现, 不知道对不对

 

以上是关于用python实现按权重对N个数据进行选择的主要内容,如果未能解决你的问题,请参考以下文章

随机优先与权重——非平均概率的选择工具

按权重随机选择--计算机系统调度策略之一:前缀和+二分

在Python中对频率权重进行排序

求python 熵值法实现代码

选择排序(selection_sort)——Python实现

根据单个对应元素的比率或基于第三个列表对 Python 中的 2 个列表进行排序