算法设计与分析随机算法及计算复杂性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
unsigned int random(unsigned long low,unsigned long high)
{
seed = MULTIPLIER * seed + INCREMENT;
return ((seed >> 16) % (high – low) + low);
7.4 数值概率算法
7.2 随机算法的类型
数值概率算法 拉斯维加斯(Las Vegas)算法 蒙特卡罗(Monte Carlo)算法 舍伍德(Sherwood)算法。
7.2 随机算法的类型
1、数值概率算法:用于数值问题的求解。所 得到的解几乎都是近似解,近似解的精度随着 计算时间的增加而不断地提高。
2、舍伍德(Sherwood)算法:很多具有很好 的平均运行时间的确定性算法,在最坏的情况 下性能很坏。引入随机性加以改造,可以消除 或减少一般情况和最坏情况的差别。
7.2 随机算法的类型
3、拉斯维加斯(Las Vegas)算法:要么给 出问题的正确答案,要么得不到答案。反复求 解多次,可使失效的概率任意小。
4、蒙特卡罗(Monte Carlo)算法:总能得到 问题的答案,偶然产生不正确的答案。重复运 行,每一次都进行随机选择,可使不正确答案 的概率变得任意小。
#define MULTIPLIER 0x015A4E35L;
#define
INCREMENT 1;
static unsigned long seed;
void random_seed(unsigned long d)
{
if (d==0)
seed = time(0);
else
seed = d;
{ // 用随机投点法计算值
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;
}
7.5 舍伍德(Sherwood)算法
7.3 随机数发生器
产生随机数的公式:
d0 dn
d b d n1 c
an
Leabharlann Baidu
dn
/
65536
n 1,2,
产生0~65535的随机数 a1, a2 , 序列,
b、c、d为正整数,称为所产生的随机序列的种子。
常数b、c,对所产生的随机序列的随机性能有很大的 关系,b通常取一素数。
7.3 随机数发生器
间变坏
7.5 舍伍德(Sherwood)算法
二、舍伍德算法的基本思想
– 消除不同输入实例对算法性能的影响,使随机算法对 规模为的每一个实例,都有:TB ( x ) T A ( n ) s ( n )
三、期望运行时间:
T B ( n ) TB (x) / | X n | xX n
T B ( n ) T A ( n ) s ( n )当s(n)与 T A ( n ) 相比很小可以忽略
7. k = split(A,low,high); /* 按元素A[low]把数组划分为两个 */
7.1 随机算法引言
确定性的算法 :
– 算法的每一个计算步骤都是确定的, – 对于相同的输出,每一次执行过程都会产生相同的
输出。
随机算法:非形式描述
– 随机算法为使用随机函数产生器的算法。算法中的 一些判定依赖于随机函数产生器的输出。
– 随机算法对于相同的输入,在不同的运行过程中会 得到不同的输出。
时,舍伍德算法有很好的性能。 对所有输入实例而言,运行时间相对均匀。时间复杂性
与确定性算法的时间复杂性相当 .
7.5 舍伍德(Sherwood)算法
随机快速排序算法 算法9.1 随机选择枢点的快速排序算法 输入:数组A,数组元素的的起始位置low,终止位置high 输出:按非降顺序排序的数组A 1. template <class Type> 2. void quicksort_random(Type A[],int low,int high) 3. { 4. random_seed(0);/* 选择系统当前时间作为随机数种子 */ 5. r_quicksort(A,low,high); /* 递归调用随机快速排序算法 */ 6. }
例:用随机投点法计算值 设有一半径为r的圆及其外切四边形。向该正
方形随机地投掷n个点。设落入圆内的点数为k。 由于所投入的点在正方形上均匀分布,因而所 投 足入 够的 大点 时落 ,入k与圆n内之的比概就率逼为近这一概4rr率。22 。所4 从以而当n
4k
n
7.4 数值概率算法
public double darts(int n)
7.5 舍伍德(Sherwood)算法
1. void r_quicksort(Type A[],int low,int high)
2. {
3. int k;
4. if (low<high) {
5. k = random(low,high);/* 产生low到high之间的随机数k */
6. swap(A[low],A[k]);/* 把元素A[k]交换到数组的第一个位置*/
一、确定性算法的平均运行时间 TA(x) :确定性算法对输入实例的运行时间。 Xn :规模为的所有输入实例全体。
算法的平均运行时间:T A ( n ) TA (x) / | X n |
存在实例 x X n,TA ( x ) T A ( n ) 。 xXn
例:快速排序算法 当输入数据均匀分布时,运行时间是 ( n log n ) 。 当输入数据按递增或递减顺序排列时,算法的运行时
– 对于相同的输入,随机算法的执行时间也可能随不 同的运行过程而不同。
8.1 随机算法引言
随机算法的优点:
– 1、执行时间和空间,小于同一问题的已知最好的确定性算法; – 2、实现比较简单,容易理解。
很多确定性的算法,其性能很坏。可用随机选择的方 法来改善算法的性能。
某些方面可能不正确,对特定的输入,算法的每一次 运行不一定得到相同结果。出现这种不正确的可能性 很小,以致可以安全地不予理睬。