概率算法

合集下载

抽奖概率-三种算法

抽奖概率-三种算法

抽奖概率-三种算法最近接触到⼀个抽奖需求,加上平时玩的暗⿊3很少掉暗⾦装备,就抽空学习下这类概率问题,暂时按⽹络称为掉宝类型概率。

例如游戏中打败⼀个boss,会掉落下⾯其中⼀个物品,⽽每个物品都有⼀定概率:1. 靴⼦ 20%2. 披风 25%3. 饰品 10%4. 双⼿剑 5%5. ⾦币袋 40%现在的问题就是如何根据概率掉落⼀个物品给玩家。

⼀. ⼀般:⽣成⼀个列表,分成⼏个区间,例如列表长度100,1-20是靴⼦的区间,21-45是披风的区间等,然后随机从100取出⼀个数,看落在哪个区间。

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

⼆、离散算法:也就是上⾯的改进,竟然1-20都是靴⼦,21-45都是披风,那抽象成⼩于等于20的是靴⼦,⼤于20且⼩于等于45是披风,就变成⼏个点[20,45,55,60,100],然后也是从1到99随机取⼀个数R,按顺序在这些点进⾏⽐较,知道找到第⼀个⽐R⼤的数的下标,⽐⼀般算法减少占⽤空间,还可以采⽤⼆分法找出R,这样,预处理O(N),随机数⽣成O(logN),空间复杂度O(N)。

请点击查看详细:三、Alias MethodAlias Method就不太好理解,实现很巧妙,推荐先看看这篇⽂章:⼤致意思:把N种可能性拼装成⼀个⽅形(整体),分成N列,每列⾼度为1且最多两种可能性,可能性抽象为某种颜⾊,即每列最多有两种颜⾊,且第n列中必有第n种可能性,这⾥将第n种可能性称为原⾊。

想象抛出⼀个硬币,会落在其中⼀列,并且是落在列上的⼀种颜⾊。

这样就得到两个数组:⼀个记录落在原⾊的概率是多少,记为Prob数组,另⼀个记录列上⾮原⾊的颜⾊名称,记为Alias数组,若该列只有原⾊则记为null。

之前的例⼦,为了便于演⽰换成分数1. 靴⼦ 20% -> 1/42. 披风 25% -> 1/53. 饰品 10% -> 1/104. 双⼿剑 5% -> 1/205. ⾦币袋 40% -> 2/5然后每个都乘以5(使每列⾼度为1),再拼凑成⽅形拼凑原则:每次都从⼤于等于1的⽅块分出⼀⼩块,与⼩于1的⽅块合成⾼度为1由上图⽅形可得到两个数组:Prob: [3/4, 1/4, 1/2, 1/4, 1]Alias: [4, 4, 0, 1, null] (记录⾮原⾊的下标)之后就根据Prob和Alias获取其中⼀个物品随机产⽣⼀列C,再随机产⽣⼀个数R,通过与Prob[C]⽐较,R较⼤则返回C,反之返回Alias[C]。

蒙特卡洛算法计算概率分布

蒙特卡洛算法计算概率分布

蒙特卡洛算法计算概率分布
蒙特卡洛算法是一种基于随机模拟的计算方法,可以用于计算概率分布。

下面是一个使用蒙特卡洛算法计算概率分布的示例:
假设我们要计算一个函数 $f(x)$ 在区间 $[a,b]$ 上的概率分布。

我们可以按照以下步骤进行:
1. 生成随机数:在区间 $[a,b]$ 上生成大量的随机数。

这些随机数可以通过随机数生成器或者其他方法获得。

2. 计算函数值:对于每个生成的随机数 $x_i$,计算函数 $f(x_i)$ 的值。

3. 统计分布:统计函数值出现的次数,并将其与总的随机数数量相除,得到函数值在区间 $[a,b]$ 上的概率分布。

通过重复上述步骤多次(通常称为“蒙特卡洛模拟”),我们可以获得函数在区间$[a,b]$ 上的概率分布的估计。

需要注意的是,蒙特卡洛算法的准确性取决于生成的随机数数量和质量。

为了获得更准确的结果,通常需要生成大量的随机数,并采用合适的随机数生成方法。

蒙特卡洛算法在许多领域都有应用,如统计学、计算机科学、金融工程等。

它可以用于计算复杂问题的近似解,或者对难以直接计算的概率分布进行估计。

这只是一个简单的示例,实际应用中可能需要根据具体问题进行适当的修改和扩展。

蒙特卡洛算法是一种强大的工具,但在使用时需要谨慎考虑其局限性和误差来源。

希望这个解释对你有帮助!如果你有任何其他问题,请随时提问。

概率公式算法

概率公式算法

概率公式算法
概率公式是用来计算概率的数学公式。

常用的概率公式有:
贝叶斯公式:P(A|B) = P(B|A) * P(A) / P(B)
高斯公式:P(x|u,s) = 1 / (sqrt(2 * pi) * s) * e^(-1/2 * ((x - u) / s)^2)
条件概率公式:P(A|B) = P(A,B) / P(B)
独立性公式:P(A,B) = P(A) * P(B)
这些公式可以用来计算不同情况下的概率,在机器学习、数据分析等领域有广泛应用。

除了上面提到的几个常用的概率公式,还有其他一些常用的概率公式,如:
概率密度函数(PDF):用来描述连续型随机变量的概率密度。

概率质量函数(PMF):用来描述离散型随机变量的概率密度。

狄利克雷公式:用来计算组合概率。

随机变量转移矩阵:用来描述随机变量之间的转移关系。

多项式公式:用来计算多项式的概率分布。

期望值公式:用来计算随机变量的期望值。

这些公式都有着独特的应用领域,在统计学、概率论、数学建模等领域有着重要的作用。

1到10牛牛各种概率计算

1到10牛牛各种概率计算

1到10牛牛各种概率计算1、52张牌,每人派5张牌。

5张牌中,其中3张加起来点数为10的倍数的,为牛,而另外2张加起来,取个位数为点数。

J、Q、K都当10点。

如K,3,7,6,8 就是K,3,7为牛,6,8为4点。

2、把纸牌按点数分为1,2,3,4,5,6,7,8,9,10,10种类型。

KQJ10为一种。

3、胜负方式,有点算点数,点数相同算最大的牌。

没点都牌大。

10点为牛牛。

分情况计算:1)五张都为10的情况:C5/16=0.0016806722689076;2)四张为10,一张为1~9的情况:C4/16*C1/36=0.0252100840336134;3)三张为10,二张为1~9的情况:C3/16*C2/36=0.135746606334842;4)二张为10,三张为1~9的情况:C2/16*C3/36=0.32967032967033;5)一张为10,四张为1~9的情况:C1/16*C4/36=0.3626373626373626;6)五张都为1~9的情况:C5/36=0.1450549450549451.分析:其中1),2),3)至少有3张为10,所以肯定有牛。

4)当中的三张和为10,20或者二张和为10。

5)当中四张1~9当中3张和为10,20或者2张和为10。

6)当中:三张加起来等于10或者20的情况。

和为10的有:118,127,136,145,226,235,334 ,442。

和为20的有:992,983,974,965,884,875,776,668。

将这16种情况按是否有重号重新分类:118,226,334,442,992,884,776,668 重号的有8种。

每种个有24种情况1;127,136,145,235,983,974,965,875不重号的有8种。

每种个有64种情况2;19,28,37,46,55 2个和为10。

情况3。

4)三张为1~9, 3张中选2张和为10,或者3张和为10,20,情况1,2的共有(24+64)*8*(16*15/2)=84480种。

二项分布算法

二项分布算法

二项分布算法
二项分布算法是一种用于计算二项分布概率的算法。

在概率论中,二项分布是指在进行n次独立的是/非试验中,成功的次数的概率分布。

在二项分布中,每次试验只有两个可能结果:成功或失败。

成功的概率为p,失败的概率为1-p。

我们可以使用二项分布算法来计算
在n次试验中,成功k次的概率。

具体方法如下:
1. 定义二项分布概率密度函数:P(k) = C(n,k) * p^k *
(1-p)^(n-k),其中C(n,k)表示从n个物品中选择k个物品的组合数。

2. 通过计算公式得出概率:P(k) = n! / (k! * (n-k)!) * p^k * (1-p)^(n-k),其中!表示阶乘。

3. 针对每一个k,都进行一次计算,得出概率P(k)。

4. 将所有的P(k)相加,得出二项分布的概率。

二项分布算法的应用非常广泛,例如在生物学中,可以用它来计算某种基因在群体中出现的概率;在金融学中,可以用它来计算投资的风险。

- 1 -。

九年级概率算法知识点归纳总结

九年级概率算法知识点归纳总结

九年级概率算法知识点归纳总结概率算法是概率论与数学算法结合的一门学科,主要研究与应用概率相关的数学方法与计算机算法。

它在现代科学与工程中具有广泛的应用,包括人工智能、数据挖掘、生物信息学等领域。

在初中九年级的数学学习中,概率算法也是一个重要的知识点。

本文将对九年级概率算法的相关知识进行归纳总结,以帮助同学们更好地理解与掌握。

一、概率的基本概念与性质1.样本空间与事件:样本空间是指一个随机试验所有可能结果的集合,事件是样本空间的子集。

概率的计算是建立在样本空间与事件的基础上的。

2.概率的基本性质:概率介于0与1之间,对于必然事件,概率为1;对于不可能事件,概率为0。

3.等可能原则:在一些随机试验中,如果每一个结果发生的概率相等,那么事件A发生的概率可用A中的有利结果数除以样本空间中所有可能结果的数目来计算。

二、概率的运算规则1.加法规则:对于两个互不相容事件A和B,即事件A和B不可能同时发生,其和事件发生的概率等于事件A和事件B分别发生的概率之和。

2.减法规则:对于事件A和事件B,其差事件A-B的概率等于事件A发生的概率减去事件A和事件B同时发生的概率。

3.乘法规则:对于两个独立事件A和B,即事件A的发生不影响事件B的发生,其交事件发生的概率等于事件A发生的概率乘以事件B在事件A发生的条件下发生的概率。

4.全概率公式:对于一组互不相容的事件A1, A2, ..., An,它们构成了样本空间的划分,即它们的和事件为样本空间,那么对于任一事件B,其概率可以由每个事件和事件B的交集的概率之和来计算。

三、条件概率与贝叶斯定理1.条件概率:在事件A发生的条件下事件B发生的概率记作P(B|A),表示已知事件A发生,在A的前提下事件B发生的可能性大小。

2.乘法定理:根据条件概率的定义,可以得到P(A∩B) = P(B|A) *P(A),其中P(A∩B)表示事件A和事件B同时发生的概率。

3.贝叶斯定理:根据乘法定理,可以得到贝叶斯定理的表达式,它表达了在已知事件A发生的条件下,事件B发生的概率与在已知事件B发生的条件下,事件A发生的概率之间的关系。

概率算法-n皇后的LV算法

概率算法-n皇后的LV算法

概率算法-n皇后的LV算法概率算法结束了,要交作业了,其中⼀个题⽬是⽤LV算法解n皇后问题,并且给出当皇后数为12-20时,对于的随机放置皇后数(stepVegas)值。

不想全部从头写,打算找⼀个⽤回溯法求解n皇后的正确代码(因为lv算法⾥⾯有⽤到回溯部分),如果找到了,只需修改部分就可以⽤了。

虽然有个⼩错误,但是其它都对,算法写的很精炼。

有了回溯法,修改就⽅便了。

回溯法是采⽤了穷举遍历的思想,优点是可以⼀次性找到所有解,缺点是算法性能较差。

由于n皇后的解是离散分布的,导致了在遍历搜索的过程中,很多都是做“⽆⽤功”。

这个时候LV算法就有了⽤武之地,先随机放置stepVegas个皇后(在前stepVegas⾏),剩下的n-stepVegas⾏调⽤回溯算法就⾏了。

由于遍历搜索的范围缩⼩,算法所需时间减少,响应的返回的解也只是部分解。

但是可以通过多次执⾏返回更多的解。

这⾥还有⼀个问题就是stepVegas的值取多少最好,stepVegas过⼩,遍历搜索范围缩⼩不明显,算法时间过长,返回的解多。

stepVegas过⼤,遍历搜索范围⼩,但是随机放置stepVegas个满⾜要求的皇后同样需要花费⼤量时间。

事实上stepVegas的个数与n皇后解的分布情况有关。

举个例⼦,对于8后⽽⾔⼀共有92个解:简要统计第1⾏皇后放第1列的解有4个。

第1⾏皇后放第2列的解有8个。

.....分析前两个皇后第1⾏皇后放第1列,第2⾏皇后必须放5,6,7才有解。

7解最多。

第1⾏皇后放第2列,第2⾏皇后必须放4,5,6,7,8才有解。

第1⾏皇后放第3列,第2⾏皇后必须放1,5,6,7,8才有解。

6解最多。

.....可以看到⽆论第⼀⾏皇后也即第⼀个皇后放哪,都有可⾏解。

这个时候stepVegas=1显然不好,因为要返回所有解就必须随机取遍所有位置。

要返回所有解的话整体上的性能还不如回溯法。

stepVegas=2,由于并不是每个随机组合都有解,此时可以体现LV算法的优势。

概率算法

概率算法

1
9.1.2 随机数发生器
一、产生随机数的公式:
⎧ d0 = d ⎪ ⎨ d n = b d n −1 + c ⎪ a = d / 65536 n ⎩ n n = 1, 2 , L
(9.1.1)
产生 0~65535 的随机数 a1 , a 2 , L 序列,
b 、 c 、 d 为正整数, d 称为所产生的随机序列的种子。


≤ n+
n −1 n −1 ⎤ 4⎡ ⎢ i + i⎥ n ⎢ i = n / 2 +1 i = n / 2 ⎥ ⎡ ⎤ ⎦ ⎣ ⎣ ⎦


≤ n+
n −1 n −1 ⎤ 4⎡ ⎢ i + i⎥ n ⎢ i= n / 2 i = ⎡n / 2 ⎤ ⎥ ⎣ ⎡ ⎤ ⎦


= n+
8 n
i = ⎡n / 2 ⎤
9.2
舍伍德(Sherwood)算法
一、确定性算法的平均运行时间
T A ( x ) :确定性算法 A 对输入实例 x 的运行时间。 X n :规模为 n 的所有输入实例全体。
算法 A 的平均运行时间:
2
T A(n) =
x∈ X n
∑T
A ( x) /
|Xn |
存在实例 x ∈ X n , T A ( x ) >> T A ( n ) 。 例:快速排序算法 当输入数据均匀分布时,运行时间是 Θ ( n log n ) 。 当输入数据按递增或递减顺序排列时,算法的运行时间变坏 二、舍伍德算法的基本思想 消除不同输入实例对算法性能的影响,使随机算法 B 对规模为 n 的每一个实例 x ∈ X n , 都有:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

其中,x1, x2, …, xn是实变量,fi是未知量x1,x2,…,xn的非线 性实函数。要求确定上述方程组在指定求根范围内的一组 解x1*, x2*, …, xn* 。 在指定求根区域D内,选定一个随机点x0作为随机搜索的出 发点。在算法的搜索过程中,假设第j步随机搜索得到的随 机搜索点为xj。在第j+1步,计算出下一步的随机搜索增量 ∆xj。从当前点xj依∆xj得到第j+1步的随机搜索点。当x<ε时, 取为所求非线性方程组的近似解。否则进行下一步新的随 机搜索过程。
t ( x) = p ( x) s ( x) + (1 − p ( x))(e( x) + t ( x))
解此方程可得:
1 − p( x) t ( x) = s ( x) + e( x ) p ( x)
16
一、n后问题
对于n后问题的任何一个解而言,每一个皇后在棋盘上的位置无任何规 律,不具有系统性,而更象是随机放置的。由此容易想到下面的拉斯维 加斯算法。 在棋盘上相继的各行中随机地放置皇后,并注意使新放置的皇后与已放 置的皇后互不攻击,直至n个皇后均已相容地放置好,或已没有下一个 皇后的可放置位置时为止。 如果将上述随机放置策略与回溯法相结合,可能会获得更好的效果。可 以先在棋盘的若干行中随机地放置皇后,然后在后继行中用回溯法继续 放置,直至找到一个解或宣告失败。随机放置的皇后越多,后继回溯搜 索所需的时间就越少,但失败的概率也就越大。 stopVegas
10
二、搜索有序表
有序字典是表示有序集很有用的抽象数据类 型,它支持对有序集的搜索、插入、删除、 前驱、后继等运算;有许多基本数据结构可 用于实现有序字典。 下面讨论用数组表示有序集。P208 P
11
三、跳跃表
舍伍德型算法的设计思想还可用于设计高效的数据结构。 如果用有序链表来表示一个含有n个元素的有序集S,则在最坏情况下, 搜索S中一个元素需要Ω(n)计算时间。 提高有序链表效率的一个技巧是在有序链表的部分结点处增设附加指针 以提高其搜索性能。在增设附加指针的有序链表中搜索一个元素时,可 借助于附加指针跳过链表中若干结点,加快搜索速度。这种增加了向前 附加指针的有序链表称为跳跃表。 应在跳跃表的哪些结点增加附加指针以及在该结点处应增加多少指针完 全采用随机化方法来确定。这使得跳跃表可在O(logn)平均时间内支持关 于有序集的搜索、插入和删除等运算。
2 2
n
double Darts(int n) { // 用随机投点法计算值 static RandomNumber dart; int k=0; for (int i=1;i <=n;i++) { double x=dart.fRandom(); double y=dart.fRandom(); if ((x*x+y*y)<=1) k++; } return 4*k/double(n); }
其中,p1<p2<…<pk是k个素数,m1, m2, …, mk是k个正整数。 如果n是一个合数,则n必有一个非平凡因子x,1<x<n,使得x可以整除n。 给定一个合数n,求n的一个非平凡因子的问题称为整数n的因子分割问 题。 int Split(int n) { int m = floor(sqrt(double(n))); for (int i=2; i<=m; i++) if (n%i==0) return i; return 1; } 事实上,算法split(n)是对范围在1~x的所有整数进行了试除而得到范围 在1~x2的任一整数的因子分割。
12
在一般情况下,给定一个含有n个元素的有序链表,可以将它改造成一个 完全跳跃表,使得每一个k级结点含有k+1个指针,分别跳过2k-1,2k-11,…,20-1个中间结点。第i个k级结点安排在跳跃表的位置i2k处,i0。 这样就可以在时间O(logn)内完成集合成员的搜索运算。在一个完全跳跃 表中,最高级的结点是 logn 级结点。 完全跳跃表与完全二叉搜索树的情形非常类似。它虽然可以有效地支持 成员搜索运算,但不适应于集合动态变化的情况。集合元素的插入和删 除运算会破坏完全跳跃表原有的平衡状态,影响后继元素搜索的效率。
13
为了在动态变化中维持跳跃表中附加指针的平衡性,必须使跳跃表中k级 结点数维持在总结点数的一定比例范围内。注意到在一个完全跳跃表中, 50%的指针是0级指针;25%的指针是1级指针;…;(100/2k+1)%的指针是 k级指针。因此,在插入一个元素时,以概率1/2引入一个0级结点,以概 率1/4引入一个1级结点,…,以概率1/2k+1引入一个k级结点。另一方面, 一个i级结点指向下一个同级或更高级的结点,它所跳过的结点数不再准 确地维持在2i-1。经过这样的修改,就可以在插入或删除一个元素时, 通过对跳跃表的局部修改来维持其平衡性。
15
7.4 拉斯维加斯(Las Vegas)算法
拉斯维加斯算法的一个显著特征是它所作的随机性决策有可能导致算法 找不到所需的解。 void obstinate(Object x, Object y) { • // 反复调用拉斯维加斯算法LV(x,y),直到找到问题的一个解y • bool success= false; • while (!success) success=lv(x,y); } 设p(x)是对输入x调用拉斯维加斯算法获得问题的一个解的概率。一个正 确的拉斯维加斯算法应该对所有输入x均有p(x)>0。 设t(x)是算法obstinate找到具体实例x的一个解所需的平均时间 ,s(x)和e(x) 分别是算法对于具体实例x求解成功或求解失败所需的平均时间,则有:
9
一、线性时间选择算法
快速排序算法、线性时间选择算法 P206 有时也会遇到这样的情况,即所给的确定性算法无法直接改造成舍伍德 型算法。此时可借助于随机预处理技术,不改变原有的确定性算法,仅 对其输入进行随机洗牌,同样可收到舍伍德算法的效果。例如,对于确 定性选择算法,可以用下面的洗牌算法Shuffle将数组a中元素随机排列, 然后用确定性选择算法求解。这样做所收到的效果与舍伍德型算法的效 果是一样的。 template<class Type> void Shuffle(Type a[], int n) { // 随机洗牌算法 static RandomNumber rnd; for (int i=0;i<n;i++) { int j=rnd.Random(n-i)+i; Swap(a[i], a[j]); } }
8
7.3 舍伍德(Sherwood)算法
设A是一个确定性算法,当它的输入实例为x时所需 的计算时间记为tA(x)。设Xn是算法A的输入规模为 n的实例的全体,则当问题的输入规模为n时,算法 A所需的平均时间为 t A (n) = ∑ t A ( x) / | X n |
x∈ X n
这显然不能排除存在x∈Xn使得 t A ( x ) >> t A ( n) 的可 能性。希望获得一个概率算法B,使得对问题的输 入规模为n的每一个实例均有 t B ( x) = t A (n) + s (n) 这就是舍伍德算法设计的基本思想。当s(n)与tA(n)相 比可忽略时,舍伍德算法可获得很好的平均性能。
18
Pollard算法
在开始时选取0~n-1范围内 的随机数,然后递归地由 xi=(xi-12-1)mod n产生无穷序 列x1, x2, …, xk, … 对于i=2k,以及2k<j≤2k+1, 算法计算出xj-xi与n的最大 公因子d=gcd(xj-xi,n)。如 果d是n的非平凡因子,则实 现对n的一次分割,算法输 出n的因子d。 对Pollard算法更深入的分析 可知,执行算法的while循 环约 次后,Pollard算法会 输出n的一个因子p。由于n 的最小素因子p ,故 Pollard算法可在O(n1/4)时 间内找到n的一个素因子。
r
∫ ∫
0 0

0
假设向单位正方形内随机地投入 n 个点(xi,yi)。如果有m个点落入G内, m 则随机点落入G内的概率 I≈
n
7
三、解非线性方程组
求解下面的非线性方程组
f1 ( x1 , x 2 ,L , x n ) = 0 f ( x , x ,L, x ) = 0 2 1 2 n LLLLLLLL f n ( x1 , x 2 ,L , x n ) = 0
算法设计与分析
山东师范大学信息科学与工程学院软件工程研究所 徐连诚 E-Mail:lchxu@ 2006年12月4日
第七章 概率算法
学习要点
理解产生伪随机数的算法 掌握数值概率算法的设计思想 掌握蒙特卡罗算法的设计思想 掌握拉斯维加斯算法的设计思想 掌握舍伍德算法的设计思想
2
引言
前面几张所讨论的分治、动态规划、贪心法、回溯和分支限界等算法的 每一计算步骤都是确定的,本章所讨论的概率算法允许执行过程中随机 选择下一计算步骤。 在多数情况下,当算法在执行过程中面临一个选择是,随机性选择常比 最优选择省时,因此概率算法可在很大程度上降低算法复杂性。 概率算法的一个基本特征是对所求解问题的同一实例用同一概率算法求 解两次可能得到完全不同的效果(所需时间或计算结果)。 本章将要介绍的概率算法包括: 数值概率算法 求解数值问题的近似解,精度随计算时间增加而不断 提高 舍伍德算法 消除算法最坏情形行为与特定势力之间的关联性,并不 提高平均性能,也不是刻意避免算法的最坏情况行为 拉斯维加斯算法 求解问题的正确解,但可能找不到解 蒙特卡罗算法 求解问题的准确解,但这个解未必正确,且一般情况 下无法有效判定正确性
6
二、计பைடு நூலகம்定积分
设f(x)是[0,1]上的连续函数,且 0≤f(x) ≤ 1。 1 需要计算的积分为 I = ∫ f ( x)dx , 积分I 等于图中的面积G。 0 在图所示单位正方形内均匀地作投 点试验,则随机点落在曲线下面的 概率为 P { y ≤ f ( x)} = 1 f ( x ) dydx = 1 f ( x)dx
相关文档
最新文档