`
把酒泯恩仇
  • 浏览: 27177 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

根据相应概率产生随机数【太经典了】关键是简单

阅读更多

 

查看原文:

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/

如果您想转载本博客,请注明出处

如果您对本文有意见或者建议,欢迎留言

2
2
分享到:
评论

相关推荐

    产生随机数

    在本文中,我们将深入探讨如何在不同的编程语言中生成随机数,以及生成随机数的一些关键概念和技术。 首先,我们需要理解“随机”在计算机科学中的含义。实际上,计算机生成的随机数并非真正的随机,而是伪随机。这...

    好用的随机数产生器(均匀,可批量,少有重复) C#

    本篇将详细介绍“好用的随机数产生器”及其特点。 首先,随机数的“均匀性”是关键。均匀分布意味着生成的随机数在整个可能的范围内是等概率的,避免了在某些区域出现聚集或稀疏的情况。在C#中,`System.Random`类...

    泊松随机数产生

    在VC++(Visual C++)环境中,实现泊松随机数生成通常涉及到以下几个关键步骤: 1. **理解泊松分布**:泊松分布的参数λ(lambda)代表单位时间或单位面积内的平均事件发生次数。其概率质量函数为P(k) = (e^(-λ) *...

    C++生成随机数

    总结来说,C++中的随机数生成可以通过`&lt;cstdlib&gt;`库的`rand()`和`srand()`函数进行基础操作,而在C++11及更高版本中,`&lt;random&gt;`库提供了更强大的功能,包括自定义随机数生成器和各种概率分布。无论你是初学者还是...

    26 入门matlab数理统计随机数的产生.zip

    在"26 入门matlab数理统计随机数的产生"这个主题中,我们将探讨以下几个关键知识点: 1. **随机数种子设定**:在MATLAB中,生成的随机数序列是可预测的,为了每次运行程序时得到不同的随机数,我们需要设置随机数...

    数学建模-2.随机数.zip

    在数学建模中,随机数扮演着至关重要的角色。它们被广泛应用于各种模拟、预测和数据分析任务中。这个“数学建模-2.随机数.zip”压缩包包含了一个名为“数学建模-2.随机数.ppt”的文件,很可能是某个讲座或课程的幻灯...

    MATLAB语言常用算法程序集 随机数生成.zip

    3. **自定义分布**:除了内置的分布外,用户还可以使用`makedist`创建自定义的概率分布,并用`random`函数生成这些分布的随机数。 4. **随机数质量**:MATLAB提供了高质量的随机数生成器,如Mersenne Twister算法,...

    随机样本的生成和概率密度函数的绘制——模式识别课程作业

    在模式识别领域,随机样本的生成与概率密度函数(Probability Density Function, PDF)的绘制是两个重要的基础概念,它们在理解和分析数据分布特征、构建模型以及进行预测时起到关键作用。这次的作业聚焦于这两点,...

    2020_2021学年高中数学第三章概率3.2.2整数值随机数randomnumbers的产生课时跟踪训练含解析新人教A版必修3202102261122

    【知识点详解】 在高中数学中,随机数的产生是一个...总的来说,随机数的产生在概率论中扮演着关键角色,它使得我们能够在理论上无法直接求解的情况下,通过实验模拟来逼近真实概率,从而加深对概率模型的理解和应用。

    易语言-易语言取指定位数的随机数

    随机数是在一定范围内无规律地产生的数字,通常用于模拟不确定性或概率性事件。在易语言中,生成随机数涉及到几个关键函数和概念: 1. **随机数种子**:随机数序列的质量和重复性往往取决于种子值。在易语言中,...

    Java实现按权重随机数

    Java实现按权重随机数是一种在编程中常见的需求,特别是在模拟、游戏开发或算法设计中,我们需要根据不同的权重来决定某个事件发生的概率。本篇将详细解释如何在Java中有效地实现这个功能。 首先,我们来看问题定义...

    Java环境下各种分布随机数的生成研究与实现.zip

    在Java编程环境中,生成随机数是一项常见的...理解各种分布的性质以及相应的生成算法是关键,同时合理利用现有的库可以极大地简化这一过程。通过这些方法,开发者可以在模拟实验、数据分析等场景中有效地使用随机数。

    常见的抽奖-根据指定概率抽奖(改进)

    本文将深入探讨如何创建一个根据指定概率进行抽奖的程序,重点在于WPF(Windows Presentation Foundation)平台下的实现,并结合随机数算法来确保结果的公正性。我们将讨论以下几个关键知识点: 1. **随机数生成**...

    随机序列产生程序

    3. **生成序列**:根据所选分布,调用相应的函数并指定所需的样本数量。例如,`rand(n)`将生成一个n×1的均匀分布随机数向量;`randn(n)`则会生成一个n×1的标准正态分布随机数向量。 4. **自定义分布**:如果需要...

    猜数字

    玩家的猜测会与生成的数字进行比较,然后根据比较结果返回相应的提示。这一过程可能涉及到条件语句(如if-else)和循环结构(如while或for),以便在达到最大尝试次数前不断接收玩家的输入并给出反馈。此外,为了...

    经典统计学-概率分布

    ### 经典统计学中的概率分布 #### 一、概率分布概述 概率分布在统计学中扮演着极其重要的角色,它是理论分布的一种形式,用来描述随机变量取值的可能性大小。一个随机变量的不同取值对应不同的概率,这些概率组合...

    Matlab概率统计函数.doc

    在《Matlab概率统计函数.doc》文档中,主要介绍了MATLAB中用于概率统计的一些关键函数及其使用方法。MATLAB是一种广泛应用于工程计算、科学计算以及数据分析领域的高级编程语言,它提供了丰富的工具箱来支持各种数学...

    转盘式抽奖-奖项概率可调整

    例如,在JavaScript中,可以创建一个对象数组来存储奖项和概率,然后使用`Math.random()`生成随机数,并用`Array.prototype.reduce()`遍历奖项,根据累计概率判断奖项。Python中,可以使用`random.choices()`函数,...

Global site tag (gtag.js) - Google Analytics