第7章-随机算法v1.1

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7 算法设计与分析
4k n
4
© ZZU
第七章 随机算法
计算定积分 设f(x)是[0,1]上的连续函数,且0f(x)1。 需要计算的积分为I f ( x ) dx ,积分I等于图中的面积G。
0 1
在图所示单位正方形内均匀地作投点试验,则随机点落在曲线下 面的概率为 1 f ( x) 1
Pr { y f ( x)}
对majority2算法的分析
若数组T不含主元素,则每次调用majority(T, n)返 回false, 从而majority2肯定也是返回false。若数组T 含有主元素, 则算法majority(T, n)返回true的概率是 p>1/2,而当majority(T, n)返回true时, majority2也 返回true。 另一方面,majority2第一次调用majority(T, n)返回 false的概率为1-p, 第二次调用majority(T, n)仍以概 率p返回true。因此当数组T含有主元素时, majority2返回true的概率是p+(1-p)p=1-(1-p)2>3/4。 即算法majority2是一个偏真3/4正确的MC蒙特卡罗 算法。
21 算法设计与分析 © ZZU
第七章 随机算法
“洗牌”算法
有时候会遇到这样的情况,即所给定的确定型算法无法直 接修改成舍伍德算法。此时可以借助随机预处理技术,不 改变原有的确定型算法,仅对其输入进行随机洗牌,同样 可以收到舍伍德算法的效果。 所谓随机洗牌就是将输入的数组随机排列。下面就是一个 随机洗牌算法。 void shuffle(int a[], int n) //将数组a中的元素进行随机排列 { for(i=0;i<n/2;i++) { rnd=random(n-i)+i; swap(a,rnd,i); } }
– 如果数组有主元素,算法可能返回true,以大于1/2的概率;如果没有 主元素,则算法肯定返回false
35 算法设计与分析 © ZZU
第七章 随机算法
对majority算法的分析 若算法返回结果为true,即随机选择的元素x是数组 T的主元素,则显然数组T含有主元素。反之, 若返回 结果为false, 则数组T未必没有主元素。由于若数组T 有主元素,则它的非主元素个数小于n/2, 故上述情况 发生的概率小于1/2。由此可见, majority算法是一 个偏真的1/2正确算法。
0

0
dydx f ( x)dx
0
假设向单位正方形内随机地投入n个点(xi,yi)。如果有m个点落入 G内,则随机点落入G内的概率
8 算法设计与分析
m I n
© ZZU
第七章 随机算法
计算连续函数积分的算法

y = f(x)
G double Darts (int n) { double x, y; int k = 0; for (int i=1; i<=n; i++) { x=Random(); /*随机产生一个(0,1)区间的数*/ y=Random(); if (y<=f(x)) k++; } return k/double(n); }
a0 d a n (ban 1 c) modm n 1,2,
其中b0,c0,dm。d称为该随机序列的种子。如何选取该 方法中的常数b、c和m直接关系到所产生的随机序列的随机性 能。这是随机性理论研究的内容,已超出本书讨论的范围。从 直观上看,m应取得充分大,因此可取m为机器大数,另外应 取gcd(m,b)=1,因此可取b为一素数。
t ( x) p( x) s( x) (1 p( x))(e( x) t ( x)) 。 平均时间,则有:
解此方程可得:
24 算法设计与分析
1 p( x) t ( x) s ( x) e( x ) p( x)
© ZZU
第七章 随机算法
n后问题
对于 n 后问题的任何一个解而言,每一个 皇后在棋盘上的位置无任何规律,不具有系统
4 算法设计与分析 © ZZU
第七章 随机算法
随机化算法的分类
A 数值随机 化算法 C B 舍伍德算法
D
拉斯维加斯算 法
蒙特卡罗算法
5
算法设计与分析
© ZZU
第七章 随机算法
数值随机化算法
6
算法设计与分析
© ZZU
第七章 随机算法
用随机投点法计算值 设有一半径为r的圆及其外切四边形。向该正方形随机地投掷n个 点。设落入圆内的点数为k。由于所投入的点在正方形上均匀分 2 r 布,因而所投入的点落入圆内的概率为 2 。所以当n足够大
22 算法设计与分析 © ZZU
第七章 随机算法
拉斯维加斯( Las Vegas )算法
拉斯维加斯算法的一个显著特征是它所作的随机性
决策有可能导致算法找不到所需的解。
void obstinate(Object x, Object y) {// 反复调用拉斯维加斯算法LV(x,y),直到找到问题x的一个解y bool success= false; while (!success) success=lv(x,y); }
© ZZU
9
算法设计与分析
ห้องสมุดไป่ตู้
第七章 随机算法
舍伍德算法
舍伍德算法总能求得问题的一个解,且所求得解的结 果总是正确的。其主要目的是消除算法所需计算时间 对输入实例的依赖。 当一个确定型算法最坏情况下的计算复杂性与其平均 情形下的复杂度有较大差别时,可以在这个确定型算 法中引入随机性将它改造成一个舍伍德算法,消除或 减少问题的好坏实例间的这种差别。 舍伍德算法的精髓不是避免算法的最坏情况行为,而 是设法消除这种最坏情形行为与特定实例之间的关联 性。
或换句话说,若数组T含有主元素,则算法以大于1/2 的概率返回true; 若数组T没有主元素,则算法肯定 返回false。
36
算法设计与分析
© ZZU
第七章 随机算法
重复调用2次majority算法

实际上,50%的错误概率是不可接受的,例如重复调用技术 可将错误降低到任何可接受值的范围。现在讨论重复调用2次 的算法majority2。 bool Majority2(Type T[], int n, double { // 重复调用2次算法majority
4r
时,k与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); }
第七章 随机算法
郑州大学
© ZZU © ZZU
第七章 随机算法
学习要点
理解产生伪随机数的方法 掌握数值随机化算法的设计思想
掌握拉斯维加斯算法的设计思想
掌握舍伍德算法的设计思想 掌握蒙特卡罗算法的设计思想
2
算法设计与分析
© ZZU
第七章 随机算法
随机化算法的特点 1. 当算法执行过程中面临选择时,随机化算法 通常比最优选择算法省时。
2. 对所求问题的同一实例用同一随机化算法求
解两次,两次求解所需的时间甚至所得的结 果可能有相当大的差别。 3. 设计思想简单,易于实现。
3
算法设计与分析
© ZZU
第七章 随机算法
随机数
随机数在随机化算法设计中扮演着十分重要的角色。在现实计算 机上无法产生真正的随机数,因此在随机化算法中使用的随机数 都是一定程度上随机的,即伪随机数。 线性同余法是产生伪随机数的最常用的方法。由线性同余法产生 的随机序列a0,a1,…,an满足
27
算法设计与分析
© ZZU
第七章 随机算法
蒙特卡罗(Monte Carlo)算法
•设 p 是一个实数,且 1/2<p<1 。如果一个蒙特
卡罗算法对于问题的任一实例得到正确解的概
率不小于p,则称该蒙特卡罗算法是p正确的, 且称p-1/2是该算法的优势。
如果对于同一实例,蒙特卡罗算法不会 给出2个不同的正确解答,则称该蒙特卡罗算 法是一致的。
28 算法设计与分析 © ZZU
第七章 随机算法
主元素问题
问题描述
– 设T[1:n]是一个含有n个元素的数组。当|{i|T[i]=x}|>n/2时,称元素x是 数组T的主元素
算法描述
– bool majority(Type T[], int n) // 判定主元素的蒙特卡罗算法 –{
• • • • • • • RandomNumber rnd; int i=rnd.random(n)+1; //产生1~n之间的随机下标 Type x=T[i]; // 随机选择数组元素 int k=0; for (int j=1;j<=n;j++) if (T[j]==x) k++; return (k>n/2); //当 k>n/2 时,数组T含有主元素 }
第七章 随机算法
舍伍德算法与快速排序
舍伍德算法的一个典型应用就是在快速排序中。
在快速排序算法中,若用拟中位数作为划分标准,可保 证在线性时间内完成。但是确定拟中位数要付出额外开 销。若选用第一个元素为划分基准,最坏时的时间复杂 性为O(n2)。
为了改进它的性能,我们可以改变基准选取的原则,不 是每次都选取待排序列的第一个元素,而是在待排序列 中随机选取一个元素作为基准(每次将选择到的元素与第 一个元素交换,然后就和确定性算法一样做)。既保证算 法的线性时间平均性能,又避免了计算拟中位数的麻烦。
23
算法设计与分析
© ZZU
第七章 随机算法
拉斯维加斯( Las Vegas )算法
设p(x)是对输入x调用拉斯维加斯算法获得问题 的一个解的概率。一个正确的拉斯维加斯算法应该
对所有输入x均有p(x)>0。设t(x)是算法obstinate找
到具体实例x的一个解所需的平均时间 ,s(x)和e(x)分 别是算法对于具体实例x求解成功或求解失败所需的
性,而更像是随机放置的。由此容易想到 拉斯
维加斯算法。 如果将上述随机放置策略与回溯法相 结合,可能会获得更好的效果。
25
算法设计与分析
© ZZU
第七章 随机算法
n后问题
可以先在棋盘的若干行中随机地放置皇后, 然后在后继行中用回溯法继续放置,直至找到一个 解或宣告失败。随机放置的皇后越多,后继回溯搜 索所需的时间就越少,但失败的概率也就越大。 stopVegas 0 5 12
26 算法设计与分析
p
s
e -47.23 10.20
t 262.00 80.39 222.11
© ZZU
1.0000 262.00 0.5039 33.88 0.0465 13.00
第七章 随机算法
蒙特卡罗(Monte Carlo)算法
•在实际应用中常会遇到一些问题,不论采 用确定性算法或随机化算法都无法保证每 次都能得到正确的解答。蒙特卡罗算法则 在一般情况下可以保证对问题的所有实例 都以高概率给出正确解,但是通常无法判 定一个具体解是否正确。
借用快速排序来解决。算法的基本思路也是采用 划分,以基准元素为标准,将序列划分成大于和 小于基准的两部分,第K大元素或者就是基准, 否则只可能位于其中的一部分,再对这一部分进 行递归处理就可以了。为了避免在最坏情形下时 间复杂度达到O(n2),这里对基准的选取需要加入 随机性。
18 算法设计与分析 © ZZU
14
算法设计与分析
© ZZU
第七章 随机算法
舍伍德(Sherwood)算法
No.1
线性时间选择算法
No.2
快速排序算法
这两种算法的核心都在于选择合适的划分 基准。舍伍德算法随机地选择一个数组元素作 为划分基准。
17 算法设计与分析 © ZZU
第七章 随机算法
舍伍德算法与线性时间选择算法 在无序序列中选择第K大(或小)的元素是最常 见的问题。若K=1或K=n,则显然可以在O(n)的 时间内解决;但若K=(n+1)/2,就要难得多了。
if (majority(T,n)) return true;
else return (majority(T,n));
)
}
如果有主元素,该算法返回true的概率为 p+(1-p)p = 1-(1p)2>3/4,所以该算法是一个偏真3/4正确的蒙特卡罗算法。
37 算法设计与分析 © ZZU
第七章 随机算法
相关文档
最新文档