查看原文:
http://www.ibaiyang.org/2012/12/14/weighted-random-selection/
想必我们都知道 随即选择,比如说,我们从【1, 10】随即选择一个数,我们通常的前提是【1, 10】这10个数是等概率的,在C++里,产生这样的随即数非常简单
rand_number = rand() % 10 + 1
这样的随即算法在可以应用在 洗牌算法当中。
可是,在概率论中,统计出来的结果并没有那么理想,例如正态分布等等。
我们举一个简单的例子,例如统计成人身高,我们大家都事先的知道,这个分布一般情况是满足正在分布的,也就是说,可能如下情况:
- p = 0.05 [150以下]
- p = 0.2 [150 --- 160]
- p = 0.5 [160 --- 170]
- p = 0.2 [170 --- 175]
- p = 0.05 [175以上]
那么现在预测一个新的成人,其身高可能落在那个区间呢,对,这就是我们今天谈到的带权随即选择,根据出现的概率来随即选择。
应用到的方法是:Fitness_proportionate_selection
def weighted_choice_sub(weights):
rnd = random.random() * sum(weights)
for i, w in enumerate(weights):
rnd -= w
if rnd < 0:
return i
其中返回的结果是weights相应的索引。
经过测试:
import random
from collections import Counter
nr_data = 1000000
weights = [0.05, 0.2, 0.5, 0.2, 0.05]
count = Counter()
for x in xrange(nr_data):
index = weighted_choice_sub(weights)
count[index] += 1
count_sum = sum( count.values() )
for key, value in count.iteritems():
print float(value) / count_sum
得出的结果是:
>>>
0.049853
0.199878
0.499906
0.200211
0.050152
>>>
挺符合的。白杨到此一游!Enjoy It。
-----------------打造高质量的文章 更多关注 把酒泯恩仇---------------
为了打造高质量的文章,请 推荐 一下吧。。。。谢谢了,请关注我后续的文章,会更精彩哦
请关注sina微博:http://weibo.com/baiyang26
把酒泯恩仇官方博客:http://www.ibaiyang.org 【推荐用google reader订阅】
把酒泯恩仇官方豆瓣:http://www.douban.com/people/baiyang26/
如果您想转载本博客,请注明出处
如果您对本文有意见或者建议,欢迎留言
分享到:
相关推荐
在本文中,我们将深入探讨如何在不同的编程语言中生成随机数,以及生成随机数的一些关键概念和技术。 首先,我们需要理解“随机”在计算机科学中的含义。实际上,计算机生成的随机数并非真正的随机,而是伪随机。这...
本篇将详细介绍“好用的随机数产生器”及其特点。 首先,随机数的“均匀性”是关键。均匀分布意味着生成的随机数在整个可能的范围内是等概率的,避免了在某些区域出现聚集或稀疏的情况。在C#中,`System.Random`类...
在VC++(Visual C++)环境中,实现泊松随机数生成通常涉及到以下几个关键步骤: 1. **理解泊松分布**:泊松分布的参数λ(lambda)代表单位时间或单位面积内的平均事件发生次数。其概率质量函数为P(k) = (e^(-λ) *...
总结来说,C++中的随机数生成可以通过`<cstdlib>`库的`rand()`和`srand()`函数进行基础操作,而在C++11及更高版本中,`<random>`库提供了更强大的功能,包括自定义随机数生成器和各种概率分布。无论你是初学者还是...
在"26 入门matlab数理统计随机数的产生"这个主题中,我们将探讨以下几个关键知识点: 1. **随机数种子设定**:在MATLAB中,生成的随机数序列是可预测的,为了每次运行程序时得到不同的随机数,我们需要设置随机数...
在数学建模中,随机数扮演着至关重要的角色。它们被广泛应用于各种模拟、预测和数据分析任务中。这个“数学建模-2.随机数.zip”压缩包包含了一个名为“数学建模-2.随机数.ppt”的文件,很可能是某个讲座或课程的幻灯...
3. **自定义分布**:除了内置的分布外,用户还可以使用`makedist`创建自定义的概率分布,并用`random`函数生成这些分布的随机数。 4. **随机数质量**:MATLAB提供了高质量的随机数生成器,如Mersenne Twister算法,...
在模式识别领域,随机样本的生成与概率密度函数(Probability Density Function, PDF)的绘制是两个重要的基础概念,它们在理解和分析数据分布特征、构建模型以及进行预测时起到关键作用。这次的作业聚焦于这两点,...
【知识点详解】 在高中数学中,随机数的产生是一个...总的来说,随机数的产生在概率论中扮演着关键角色,它使得我们能够在理论上无法直接求解的情况下,通过实验模拟来逼近真实概率,从而加深对概率模型的理解和应用。
随机数是在一定范围内无规律地产生的数字,通常用于模拟不确定性或概率性事件。在易语言中,生成随机数涉及到几个关键函数和概念: 1. **随机数种子**:随机数序列的质量和重复性往往取决于种子值。在易语言中,...
Java实现按权重随机数是一种在编程中常见的需求,特别是在模拟、游戏开发或算法设计中,我们需要根据不同的权重来决定某个事件发生的概率。本篇将详细解释如何在Java中有效地实现这个功能。 首先,我们来看问题定义...
在Java编程环境中,生成随机数是一项常见的...理解各种分布的性质以及相应的生成算法是关键,同时合理利用现有的库可以极大地简化这一过程。通过这些方法,开发者可以在模拟实验、数据分析等场景中有效地使用随机数。
本文将深入探讨如何创建一个根据指定概率进行抽奖的程序,重点在于WPF(Windows Presentation Foundation)平台下的实现,并结合随机数算法来确保结果的公正性。我们将讨论以下几个关键知识点: 1. **随机数生成**...
3. **生成序列**:根据所选分布,调用相应的函数并指定所需的样本数量。例如,`rand(n)`将生成一个n×1的均匀分布随机数向量;`randn(n)`则会生成一个n×1的标准正态分布随机数向量。 4. **自定义分布**:如果需要...
玩家的猜测会与生成的数字进行比较,然后根据比较结果返回相应的提示。这一过程可能涉及到条件语句(如if-else)和循环结构(如while或for),以便在达到最大尝试次数前不断接收玩家的输入并给出反馈。此外,为了...
### 经典统计学中的概率分布 #### 一、概率分布概述 概率分布在统计学中扮演着极其重要的角色,它是理论分布的一种形式,用来描述随机变量取值的可能性大小。一个随机变量的不同取值对应不同的概率,这些概率组合...
在《Matlab概率统计函数.doc》文档中,主要介绍了MATLAB中用于概率统计的一些关键函数及其使用方法。MATLAB是一种广泛应用于工程计算、科学计算以及数据分析领域的高级编程语言,它提供了丰富的工具箱来支持各种数学...
例如,在JavaScript中,可以创建一个对象数组来存储奖项和概率,然后使用`Math.random()`生成随机数,并用`Array.prototype.reduce()`遍历奖项,根据累计概率判断奖项。Python中,可以使用`random.choices()`函数,...