导航:首页 > 源码编译 > c概率算法

c概率算法

发布时间:2023-05-16 06:16:25

A. 如何有效提高概率算法获得正确解的概率或提高算法的求解精度

1)数值概率算法:常用于数值问题的求解,得到的往往是近似解
(1)解的精度随计算时间的增加而提高
(2)在许多情况下,计算出问题的精确解是不可能或没必要
2)蒙特卡罗算法:用于求解问题的准确解,可以求得问题的一个解,但该解未必正确
(1)求得正确解的概率依赖于算法的计算时间
多次执行蒙特卡罗算法,可以提高获得正确解的概率
(2)无法有效判定所得到的解是否肯定正确。
3)拉斯维加斯算法:不会得到不正确的解
(1)有时找不到问题的解
(2)找到正确解的概率随算法计算时间的增加而提高
(3)用同一拉斯维加斯算法反复对问题实例求解足够多次,可使求解失败的概率任意小。
4)舍伍德算法:总能求解得到问题的一个解,而且所求得得解总是正确的。
将确定性算法引入随机性改造成舍伍德算法,可消除或减少问题对于好坏实例间的差别。

B. 怎么计算概率

概率是对事件发生可能性大小的度量。不会发生的概率为0,一定会发生的概率是100%,也可以说是1.例如抛硬币,正面和反面出现的可能性都是50%,筛子每面出现的可能性都是六分之一,这些概率值通过直觉和经验就能想出来。虽然我们知道实验几次不一定是这个结果,但试验次数很多时,出现的频率就会接近概率值,无穷次时,频率就会等于概率。

通过直观和经验就能知道概率的几个基本命题,也可以说是公理,苏联的数学家柯尔莫哥洛夫总结了3条概率公理。

1. 事件发生的概率不小于0

2. 集合中的事件必有一件发生,则发生的概率之和等于1

3. 集合中事件互相不容,没有交集,则发生至少一个的概率等于每个事件概率之和

这3个公理不需记忆,应用时也不需刻意用,用直觉和经验靠算术思维就能想出概率计算方法。

通过这3个公理也可以推导出6个定理,也不需记忆,甚至不需要知道。

概率计算不像方程应用,简单地分别考虑每个数值含义列出等式,然后变换方程就能求解。列概率算式无法这样做,那些概率定理和概率公式以及写法,如:贝叶斯公式 P(A|B)=P(B|A)*P(A)/P(B) ,对列出概率算式帮助不大,也无法降低分析和推理难度,也就是说概率知识的公理化意义不大。概率计算时,只需按算术思维,按直觉和经验直接列出算式,然后进行四则运算即可。简单的场合,可以直接列出一个算式就可以算出概率值,在稍微复杂的场合需要分别列出几个算式,然后再去转换,这些复杂场合的概率算法常见的有频次算法,集合对应算法,和反向算法。

C. 概率计算公式是什么

条件概率:

条件概率:已知事件B出现的条件下A出现的概率,称为条件概率,记作:P(A|B)

条件概率计算公式:

当P(A)>0,P(B|A)=P(AB)/P(A)

当P(B)>0,P(A|B)=P(AB)/P(B)

乘法公式:

P(AB)=P(A)×P(B|A)=P(B)×P(A|B)

推广:P(ABC)=P(A)P(B|A)P(C|AB)

全概率公式:

设:若事件A1,A2,…,An互不相容,且A1+A2+…+An=Ω,则称A1,A2,…,An构成一个完备事件组。

概率算法:概率算法的一个基本特征是,对所求问题的同一实例用同一概率算法求解两次可能得到完全不同的效果。

随机数在概率算法设计中扮演着十分重要的角色。在现实计算机上无法产生真正的随机数,因此在概率算法中使用的随机数都是一定程度上随机的,即伪随机数。

D. (六) 概率算法

前面所讨论算法的每一计算步骤都是确定的,而本次所讨论的概率算法允许算法在执行过程中随机地选择下一个计算步骤。在许多情况下,当算法在执行过程中面临一个选择时,随机性选择常比最优选择省时。因此概率算法可在很大程度上降低算法的复杂度。

概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求解两次可能得到完全不同的效果。这两次求解所需的时间甚至所得到的结果可能会有相当大的差别。一般情况下, 可将概率算法大致分为四类:数值概率算法、蒙特卡罗(MonteCarlo) 算法、拉斯羡孝陵维加斯(Las Vegas) 算法和舍伍德(Sherwood) 算法。

随机数在随机化算法设计中扮演着十分重要的角色。在现实计算机上无法产生真正的随机数,因此在随机化算法中使用的随机数都是一定程度上随机的,即伪随机数。
线性同余法 是产生伪随机数的最常用的方法。由线性同余法产生的随机序列 满足

其中 。d称为该随机序列的种子。如何选取该方法中的常数b、c和m直接关系到所产生的随机序列的随机性能。这是随机性理论研究的内容,已超出本书讨论的范围。从直观上看,m应取得充分大,因此可取m为机器大数,另外应取 ,因此可取b为一素数。

为了在设计概率算法时便于产生所需的随机数,建立一个随机数类RandomNumber:该类包含一个需由用户初始化的种子randSeed。给定初始种子后,即可产生与之相应的随机序列。种子randSeed是一个无符号长整型数, 可由用户选定也可用系统时间自动产生。函数Random的输入参数 是一个无符号长整型数,它返回 范围内的一个随机整数。函数fRandom返回[0,1) 内的一个随机实数。

数值概率算法常用于数值问题的求解。这类算法所得到的往往是近似解。且近似解的精度随计算时间的增加而不断提高。在许多情况下,要计算出问题的精确解是不可能的或没有必要的,因此用数值概率算法可得到相当满意的解。

当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时

舍伍德算法就是一种利用随机算法改造确定性算法,消除或减少问题的好坏实例间的这种差别。舍伍德算法精髓不是避免算法的最坏情况行为,而是设法消除这种最坏情形行为与特定实例之间的关联性。

思想:利用随机算法改造已有算法,使得算法的性能尽量与输入数据无关,即平滑算法的性能。它总能求得问兄戚题的一个解,且求得的解总是正确的。

算法的性能 =平均性能 + 一个很小的随机值。 舍伍德算法是为了得到好的平均性能。

一个算法,对于不同的输入数据,其算法的性能是不一样的。比如快排算法,每次选择第一个元素作为基准,慎带对序列从小到大排序:

拉斯维加斯算法不会得到不正确的解。一旦用拉斯维加斯算法找到一个解,这个解就一定是正确解。但有时用拉斯维加斯算法会找不到解。

与蒙特卡罗算法类似,拉斯维加斯算法找到正确解的概率随着它所用的计算时间的增加而提高。对于所求解问题的任一实例,用同一拉斯维加斯算法反复对该实例求解足够多次,可使求解失效的概率任意小。

蒙特卡罗算法用于求问题的准确解。对于许多问题来说,近似解毫无意义。例如,一个判定问题其解为“是”或“否”,二者必居其一,不存在任何近似解答。又如,我们要求一个整数的因子时所给出的解答必须是准确的,一个整数的近似因子没有任何意义。

用蒙特卡罗算法能求得问题的一个解,但这个解未必是正确的。求得正确解的概率依赖于算法所用的时间。算法所用的时间越多,得到正确解的概率就越高。蒙特卡罗算法的主要缺点也在于此。一般情况下,无法有效地判定所得到的解是否肯定正确。

在实际应用中常会遇到一些问题,不论采用确定性算法或随机化算法都无法保证每次都能得到正确的解答。蒙特卡罗算法则在一般情况下可以保证对问题的所有实例都以高概率给出正确解,但是通常无法判定一个具体解是否正确。

有些蒙特卡罗算法除了具有描述问题实例的输入参数外,还具有描述错误解可接受概率的参数。这类算法的计算时间复杂性通常由问题的实例规模以及错误解可接受概率的函数来描述。

参考链接: http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html

数值概率算法的应用

舍伍德算法的应用

拉斯维加斯算法的应用

蒙特卡罗算法的应用

E. 概率算法

最近做了一个活动抽奖需求,项目需要控制预算,概率需要分布均匀,这样才能获得所需要的概率结果。
例如抽奖得到红包奖金,而每个奖金的分布都有一定概率:

现在的问题就是如何根据概率分配给用户一定数量的红包。

算法思路 :生成一个列表,分成几个区间,例如列表长度100,1-40是0.01-1元的区间,41-65是1-2元的区间等,然后随机从100取出一个数,看落在哪个区间,获得红包区间,最后用随机函数在这个红包区间内获得对应红包数。

时间复杂度 :预处理O(MN),随机数生成O(1),空间复杂度O(MN),其中N代表红包种类,M则由最低概率决定。

优缺点 :该方法优点是实现简单,构造完成之后生成随机类型的时间复杂度就是O(1),缺点是精度不够高,占用空间大,尤其是在类型很多的时候。

算法思路 :离散算法通过概率分布构造几个点[40, 65, 85, 95,100],构造的数组的值就是前面概率依次累加的概率之和。在生成1~100的随机数,看它落在哪个区间,比如50在[40,65]之间,就是类型2。在查找时,可以采用线性查找,或效率更高的二分查找。

算法复杂度 :比一般算法减少占用空间,还可以采用二分法找出R,这样,预处理O(N),随机数生成O(logN),空间复杂度O(N)。

优缺点 :比一般算法占用空间减少,空间复杂度O(N)。

算法思路 :Alias Method将每种概率当做一列,该算法最终的结果是要构造拼装出一个每一列合都为1的矩形,若每一列最后都要为1,那么要将所有元素都乘以5(概率类型的数量)。

此时会有概率大于1的和小于1的,接下来就是构造出某种算法用大于1的补足小于1的,使每种概率最后都为1,注意,这里要遵循一个限制:每列至多是两种概率的组合。

最终,我们得到了两个数组,一个是在下面原始的prob数组[0.75,0.25,0.5,0.25,1],另外就是在上面补充的Alias数组,其值代表填充的那一列的序号索引,(如果这一列上不需填充,那么就是NULL),[4,4,0,1,NULL]。当然,最终的结果可能不止一种,你也可能得到其他结果。

举例验证下,比如取第二列,让prob[1]的值与一个随机小数f比较,如果f小于prob[1],那么结果就是2-3元,否则就是Alias[1],即4。

我们可以来简单验证一下,比如随机到第二列的概率是0.2,得到第三列下半部分的概率为0.2 * 0.25,记得在第四列还有它的一部分,那里的概率为0.2 * (1-0.25),两者相加最终的结果还是0.2 * 0.25 + 0.2 * (1-0.25) = 0.2,符合原来第二列的概率per[1]。

算法复杂度 :预处理O(NlogN),随机数生成O(1),空间复杂度O(2N)。

优缺点 :这种算法初始化较复杂,但生成随机结果的时间复杂度为O(1),是一种性能非常好的算法。

阅读全文

与c概率算法相关的资料

热点内容
软通动力程序员节2021 浏览:845
安卓系统如何卸载安装包 浏览:868
短信删除助手文件夹 浏览:688
java办公自动化 浏览:340
php中超链接 浏览:253
linux默认路由设置 浏览:36
linux如何挂载iso 浏览:432
vs程序换文件夹后不能编译 浏览:557
安卓源码编译输入脚本没反应 浏览:47
phpmysql自增 浏览:167
把ppt保存为pdf 浏览:533
汽车密封件加密配件 浏览:887
黑马程序员15天基础班 浏览:560
java调整格式 浏览:521
香港云服务器租用价 浏览:78
linuxsublime3 浏览:560
imac混合硬盘命令 浏览:278
沈阳用什么app租房车 浏览:857
00后高中生都用什么app 浏览:239
戴尔塔式服务器怎么打开独立显卡 浏览:808