无需模拟:如何直接生成和为10亿的5个等概率随机计数?
高效计算多选项随机选择次数的方案
你的问题本质是多项分布采样:10亿次独立试验,每次从5个等概率选项中选一个,直接用统计方法生成结果即可,完全不需要逐次模拟。
两种高效方案
1. 生成符合随机分布的实际结果
用Python的numpy库内置的multinomial函数,底层基于C实现向量化运算,瞬间完成计算:
import numpy as np total_trials = int(1e9) # 5个选项的选中概率均等,各为0.2 probabilities = [0.2] * 5 # 直接生成10亿次试验后各选项的选中次数 choices = np.random.multinomial(total_trials, probabilities) print(choices)
2. 直接获取理论期望结果
如果不需要随机波动的实际采样值,仅需理论平均次数,每个选项的选中次数为总次数乘以单个选项的概率:
total_trials = int(1e9) single_count = total_trials // 5 choices = [single_count] * 5 # 若总次数无法被选项数整除,可将余数随机分配给其中几个选项 # 比如: # remainder = total_trials % 5 # for i in range(remainder): # choices[i] += 1 print(choices)
为什么比原方法高效
原代码在Python层面循环10亿次,每次都要调用随机函数并更新数组,耗时极长;而上述方案要么利用底层优化的统计库直接生成结果,要么仅做简单算术运算,时间复杂度从O(N)降到O(1),效率提升几个数量级。
内容的提问来源于stack exchange,提问作者Ilikecoding
相关产品推荐
相关产品推荐

