算法设计与分析-第七章随机算法及计算复杂性

合集下载

算法与计算复杂性课程(7)概率算法

算法与计算复杂性课程(7)概率算法

∑ ≤ 2
n−1
T(i) + O(n)
n i=n/2
注意n为奇数,上式没有T(n/2)项 11
预期时间估计(续)
Hale Waihona Puke ∑ T(n) ≤2
n−1
T (i) + tn
n i=n/2
设T (k) ≤ ck 对一切 k < n为真,则
T (n) ≤ 2 [c n + c( n + 1) + ... + c(n − 1)] + tn n2 2
2
伪随机数生成算法
伪随机数生成算法 ---线性同余法 生成伪随机序列为{ai}, i= 0,1,…, n,…, 0<ai<m
⎩⎨⎧aa0n
=d = (ban−1
+
c ) mod
m
n = 1,2,...
模数:m, 机器最大数.
乘数:b, 2≤b<m,计算前给定
常数:c, 0≤c<m,计算前给定
种子:d, 0≤d<m, 计算时随机给出
9
例2 随机选择算法
算法 RandSelect(A, p, r, k) //从A[p..r]中选第k小 1. if p=r then return A[p] 2. i←Random(p, r) 3. 以A[i]为标准划分A 4. j←划分后小于等于A[i]的数构成数组的大小 5. if k≤ j 6. then return RandSelect(A, p, p+j-1, k) 7. else return RandSelect(A, p+j, r, k-j)
B 的平均复杂性
∑ t B
(n)
=

算法设计与分析_总结7

算法设计与分析_总结7

第一章:算法定义: 算法是若干指令的有穷序列, 满足性质: (1)输入: 有外部提供的量作为算法的输入。

(2)输出: 算法产生至少一个量作为输出。

1. (3)确定性:组成算法的每条指令是清晰, 无歧义的。

2. (4)有限性:算法中每条指令的执行次数是有限的, 执行每条指令的时间也是有限的。

3. 程序定义: 程序是算法用某种程序设计语言的具体实现。

可以不满足算法的性质(4)。

4. 算法复杂性分为时间复杂性和空间复杂性。

5. 可操作性最好且最有使用价值的是最坏情况下的时间复杂性。

6. O(n)定义: 存在正的常数C 和自然数N0, 当N>=N0时有f(N)<=Cg(N),则称函数f(N)当N 充分大时有上界, 记作f(N)=O(g(n)). 7. Ω(n)定义: 存在正的常数C 和自然数N0, 当N>=N0时有f(N)>=Cg(N),则称函数f(N)当N 充分大时有上界, 记作f(N)=Ω(g(n)). 8. (n)定义:当f(n)=O(g(n))且f(N)=Ω(g(n)), 记作f(N)= (g(n)), 称为同阶。

求下列函数的渐进表达式: 3n2+10n ~~~O(n2) n2/10+2n~~~O(2n) 21+1/n~~~O(1) logn 3~~~O(logn) 10log3n ~~~O(n) 从低到高渐进阶排序: 2 logn n2/3 20n 4n2 3n n!第二章:1. 分治法的设计思想: 将一个难以直接解决的问题, 分割成一些规模较小的相同问题, 以便各个击破分而治之。

2. 例1 Fibonacci 数列 代码(注意边界条件)。

int fibonacci(int n) {if (n <= 1) return 1;return fibonacci(n-1)+fibonacci(n-2);}3. Ackerman 函数双递归。

A(1,1)代入求值。

A(1,1)=A(A(0,1),0)=A(1,0)=24. 全排列的递归算法代码。

计算机科学算法设计与复杂性分析

计算机科学算法设计与复杂性分析

计算机科学算法设计与复杂性分析计算机科学算法设计与复杂性分析是计算机科学领域的重要课题。

在计算机科学领域中,算法是解决问题的步骤和方法。

它的设计涉及到问题的建模和解决方案的设计与实现。

在实际应用中,算法的性能和复杂性是评估其优劣的关键因素。

本文将介绍计算机科学中算法设计的基本原则和复杂性分析的方法。

一、算法设计的基本原则在计算机科学中,算法设计的基本原则包括以下几个方面:1. 清晰和明确的问题描述:在设计算法之前,首先需要对问题进行清晰和明确的描述。

问题描述应包括问题的输入和输出,以及问题的约束条件。

2. 模块化和分解:复杂的问题可以通过将其分解为若干个较简单的子问题来进行解决。

模块化的设计思想有助于提高算法的复用性和可维护性。

3. 合适的数据结构选择:选择合适的数据结构对于算法的性能至关重要。

不同的数据结构适用于不同类型的问题,例如数组、链表、栈、队列等。

4. 适当的算法选择:在设计算法时,需要综合考虑算法的时间复杂性和空间复杂性。

有时候,一个简单但时间复杂性较高的算法可能比一个复杂但时间复杂性较低的算法更加合适。

二、复杂性分析的方法复杂性分析是用于评估算法性能的重要方法,常用的复杂性分析方法包括时间复杂性分析和空间复杂性分析。

1. 时间复杂性分析:时间复杂性是衡量算法在执行过程中所需时间的度量。

常用的时间复杂性分析方法有最坏情况分析、平均情况分析和最好情况分析。

最坏情况分析给出了算法在最坏情况下的执行时间上界,平均情况分析则考虑了各种输入情况的概率分布,最好情况分析给出了算法在最理想情况下的执行时间下界。

2. 空间复杂性分析:空间复杂性是衡量算法在执行过程中所需空间的度量。

与时间复杂性类似,空间复杂性也可以进行最坏情况分析、平均情况分析和最好情况分析。

通常情况下,空间复杂性主要考虑算法所需的额外空间。

三、算法设计与复杂性分析的应用举例为了更好地理解算法设计与复杂性分析的具体应用,下面将介绍两个与计算机科学相关的实际问题。

算法设计与分析——算法复杂性分析

算法设计与分析——算法复杂性分析

算法设计与分析——算法复杂性分析这篇博客的内容摘⾃课本,针对课本中缺少的5道证明题,作为练习,给出证明。

算法运⾏时所需要的计算机时间资源的量称为时间复杂性。

这个量应该集中反应算法的效率,并从运⾏该算法的实际计算机中抽象出来。

换句话说,这个量应该是只依赖于要解的问题的规模、算法的输⼊和算法本⾝的函数。

如果分别⽤ N,I和A 表⽰算法要解的问题的规模、算法的输⼊和算法本⾝,⽽且⽤ T 表⽰时间复杂性,那么,应该有 T=T(N,I,A)。

通常 A 隐含在复杂性函数名中,因⽽将 T 简写为 T(N,I) 。

现在,时间复杂性分析的主要问题是如何将复杂性函数具体化,即对于给定的 N,I和A ,如何导出 T(N,I) 的数学表达式,来给出计算T(N,I) 的法则。

根据 T(N,I) 的概念,它应该是算法在⼀台抽象的计算机上运⾏所需要的时间。

设此抽象的计算机所提供的原运算有 k 种,它们分别记为O1,O2,...,Ok 。

⼜设每执⾏⼀次这些元运算所需要的时间分别为 t1,t2,...,tk 。

对于给定的算法 A ,设经统计,⽤到元运算 Oi 的次数为 ei,i=1,2,...,k 。

很清楚,对于每⼀个 i,1≤i≤k,ei 是 N和I 的函数,即 ei=ei(N,I)。

因此有 式中, ti(i=1,2,...,k ),是与 N和I ⽆关的常数。

显然,不可能对规模为 N 的每⼀种合法的输⼊都去统计 ei(N,I),i=1,2,...,k 。

因此 T(N,I) 的表达式还要进⼀步简化,或者说,只能在规模为 N 的某些或某类有代表性的合法输⼊中统计相应的 ei,i=1,2,...,k ,评价其时间复杂性。

通常只考虑三种情况下的时间复杂性,即最坏情况、最好情况和平均情况下的时间复杂性,并分别记为 Tmax(N)、Tmin(N)和Tavg(N) 。

在数学上有 式中, DN 是规模为 N 的合法输⼊的集合; I∗是 DN 中使 T(N,I∗) 达到 Tmax(N) 的合法输⼊;I∼是 DN 中使 T(N,I∼)达到 Tmin(N) 的合法输⼊;⽽ P(I) 是在算法的应⽤中出现输⼊ I 的概率。

第7章_随机化算法

第7章_随机化算法

第7章_随机化算法随机化算法是一类基于随机数生成的算法,它的主要思想是通过引入随机性来改善算法的效率、正确性或可伸缩性。

在计算机科学中,随机化算法被广泛应用于各个领域,如优化问题、图论、排序等。

本文将介绍随机化算法的概念、应用以及一些常见的随机化算法。

一、概念随机化算法是一种利用随机数生成器的算法,通过引入随机性来改善算法的性能表现。

随机化算法的核心思想是使用随机数来决定算法的一些操作,使算法具有更好的平均性能或概率分布。

随机化算法有两个主要的特点:1.随机性:随机化算法依赖于随机数生成器产生的随机数,使用这些随机数来决定算法的一些操作。

2.概率分布:随机化算法通常具有其中一种概率分布特性,即算法的输出结果在一定概率上是正确的。

二、应用随机化算法在实际应用中有广泛的用途,主要包括以下几个方面:1.优化问题:对于一些优化问题,随机化算法可以提供一个近似解。

常见的例子有旅行商问题、背包问题等。

2.图论:在图论中,随机化算法可以用于生成随机图、图的遍历等问题。

3.排序:随机化算法可以用于改进排序算法的时间复杂度。

例如,快速排序算法就是一种经典的随机化排序算法。

4.模拟:在模拟领域,随机化算法可以用于生成随机事件,如蒙特卡洛模拟法。

1.快速排序算法:快速排序是一种基于分治思想的排序算法,它通过随机地选择一个元素作为基准,将数组分成左右两部分,然后对左右两部分分别进行快速排序。

2.蒙特卡洛模拟法:蒙特卡洛模拟法是一种通过随机采样来估计数学问题的方法。

它通过生成大量随机数,并利用这些随机数的统计性质来得出数学问题的近似解。

3.随机化算法在图论中的应用:在图论中,随机化算法可以用于生成随机图、图的遍历等问题。

例如,随机化算法可以用于生成连通图,即图中任意两个顶点之间存在至少一条路径。

4. Metropolis-Hastings算法:Metropolis-Hastings算法是一种用于模拟复杂概率分布的随机化算法。

算法分析与计算复杂性

算法分析与计算复杂性
T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) ) 也就是说,在大O表示法中,任何非0正常数都属于同一数量级,记为O(1)。
• 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前
看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出 的是在某种意义上的局部最优解。
②证明:(1)利用数学方法 (2)仿真模拟分析
算法的复杂性分析
• 算法的复杂性评价方面:时间,空间
时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空 间。
• 时间复杂性
时间复杂度的定义
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个 辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的 同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时 间复杂度。
• 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选
择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会 影响以后的状态,只与当前状态有关。
Thank you~
= 2*(1/n)*(1/log2n) + 4*(1/log2n) + 3
当n趋向于无穷大,1/n趋向于0,1/log2n趋向于0 所以极限等于3。
T(n) = O(n*log2n)
1) 加法规则 T(n,m) = T1(n) + T2(n) = O (max ( f(n), g(m) ) 2) 乘法规则 T(n,m) = T1(n) * T2(m) = O (f(n) * g(m)) 3) 一个特例(问题规模为常量的时间复杂度) 在大O表示法里面有一个特例,如果T1(n) = O(c), c是一个与n无关的任意常数,T2(n) = O ( f(n) ) 则 有

算法与计算复杂性课程(7)概率算法

算法与计算复杂性课程(7)概率算法

概率算法随机数概念伪随机数生成算法几种主要的概率算法Sherwood算法Las Vegas算法Monte Carlo算法1伪随机数随机数与伪随机数概率算法中要进行随机选择,需要大量随机数.通常根据某种规则生成随机数,这些随机数不是真正随机的,但在一定程度上可以模拟随机数,一般叫做伪随机数随机变量X的取值范围是(0,1)且对任意的0<a<1,P{0<X≤a}=a, 则称X服从(0,1)上的均匀分布23伪随机数生成算法---线性同余法生成伪随机序列为{a i }, i = 0,1,…, n ,…,0<a i <m⎩⎨⎧=+==−,...2,1mod )(10n m c ba a d a n n 模数:m , 机器最大数.乘数:b , 2≤b <m ,计算前给定常数:c , 0≤c <m ,计算前给定种子:d , 0≤d <m, 计算时随机给出伪随机数生成算法4乘同余法⎩⎨⎧===−,...2,1mod 10n m ba a d a n n 参数:c = 0,d ≠0,m =231-1, b =75实例:d =116,807, 282,475,249, 1,622,650,073, 984,943,658, 1,144,108,930, 470,211,272, 101,027,544, 1,457,850,878……确定型算法与随机算法1.特点:确定型算法: 对某个特定输入的每次运行过程是可重复的,运行结果是一样的.随机算法:对某个特定输入的每次运行过程是随机的,运行结果也可能是随机的.2. 随机算法的优势:在运行时间或者空间需求上随机算法比确定型算法往往有较好的改进随机算法设计简单6随机算法复杂性度量随机算法A对于规模为n的某个给定的实例I 的一次执行的时间与另一次可能不一样.随机算法A对于某个规模为n的实例I 的运行时间的期望:算法A反复求解实例I 的平均时间.一般情况下,许多随机算法对于规模为n的不同的实例,运行时间的期望都一样,因此这个值代表随机算法的平均时间的期望.79确定型排序算法Quicksort 最坏情况下时间为O (n 2)平均情况下为O (n log n )确定型排序+选择算法如果选用中位数进行划分, 时间为O(n log n )随机快速排序算法期望时间O (n log n )最坏情况概率非常小,在实际应用中可以忽略算法比较13拟中位数选择算法最坏情况O (n )平均情况O (n )随机算法平均时间O (n )最坏情况O (n 2)每次恰好选到边界元素与实例无关,只与选择有关概率很小,可以忽略期望时间O (n )算法比较15算法能得到正确的解算法比确定型算法简单算法的平均性能与确定型算法一样算法改善了最坏情况的期望运行时间运行时间基本与输入实例无关确定算法最坏情况在随机选择出现的概率接近0实现途径通过改进确定型算法得到将确定型选择原则改为随机选择在确定型算法前增加随机洗牌步骤Sherwood算法总结Las Vegas 算法总结一次运行可能得不到解得到的解一定是正确的改进途径:与确定型算法相结合改进确定型算法的平均情况下复杂度修改确定性算法得到20例5串相等测试问题:A有一个长串x, B有长串y,A和B希望知道x=y?方法一:A 将x 发送给B,B 测试x = y?发送消耗:长串占用信道资源大方法二:A 用x 导出一个短串f(x) (fingerprints)A 将f(x) 发送到BB 使用同样方法导出相对于y 的短串f(y)B 比较f(x) 与f(y)如果f(x) ≠f(y),则x ≠y;如果f(x) = f(y),则不确定.25fingerprints的产生方法设x 和y 的二进制表示为正整数I(x), I(y)选择素数p, fingerprint函数为Ip(x) = I(x) mod pA 传送p 和Ip(x) 给B. 当p 不太大时,传送一个短串. 存在问题:x = y ⇒Ip(x) = Ip(y)Ip(x) = Ip(y) ⇏x = y出错条件:固定p | (I(x) −I(y))26算法二Knuth, Morris, Pratt利用有限状态自动机模式匹配算法Introduction to Algorithms运行时间:O(m+n)算法三随机算法设计思想:设X(j) = xjx j+1 …x j+m-1改造算法一不是比较每个X(j) (j = 1, 2, …, n-m+1) 与Y,而是将Ip (Y) 与I p(X(j)) 比较其他算法34时间复杂度W p, I p(Y), I p(X(1)) 计算O(m) 时间从Ip(X(j)) 计算I p(X(j+1)) 总共需要O(n)时间总时间为O(m+n)出错条件:∏≠−⇔=∧≠)}(|{|))(()(| |))(()( )(jXYj ppjXIYIp jXIYIjXY算法分析38例7素数测试•求x的m次幂•求a的模n的m次幂•Fermart小定理•测试算法分析40算法的问题Fermat小定理的条件是必要条件,不是充分条件,满足这个条件的也可能是合数.对上述所有与n 互素的正整数a,都满足上述条件的合数n 称为Carmichael数,如561,1105,1729,2465等。

计算理论计算复杂性ppt课件

计算理论计算复杂性ppt课件
((x1)x2(x3)) (x2(x3)x4x5) ((x4)x5) • 合取范式cnf (conjunctive normal form)
3cnf: 每个子句文字数不大于3, 2cnf: 每个子句文字数不大于2
可满足问题SAT
• 可满足性问题: SAT = { <> | 是可满足的布尔公式 }
• 思想: 将字符串对应到布尔公式 利用接受的形式定义.
• 过程: 任取ANP, 设N是A的nk时间NTM. w(|w|=n), N接受w
N有长度小于nk的接受格局序列 能填好N在w上的画面(一个nknk表格) f(w)可满足 • 结论: SAT是NP完全的
N接受w能填好N在w上的画面
# q0 w0 w1 … wn #
2)若0,1都在带上,重复以下步骤. O(n)
3) 检查带上0,1总数的奇偶性,
若是奇数,就拒绝.
O(n) log n
4) 再次扫描带,
第1个0开始,隔1个0删除1个0; O(n)
第1个1开始,隔1个1删除1个1.
总时间:
5)若带上同时没有0和1,则接受. O(n) O(nlogn)
否则拒绝.”
{0k1k|k0}TIME(nlogn)
快速验证
HP = {<G,s,t>|G是包含从s到t的 哈密顿路径的有向图}
CLIQUE={<G,k>|G是有k团的无向图} 目前没有快速算法,但其成员是可以快速验证的. 注意:HP的补可能不是可以快速验证的. 快速验证的特点: 1. 只需要对语言中的串能快速验证. 2. 验证需要借助额外的信息:证书,身份证.
• 二元可满足性问题: 2SAT = { <> | 是可满足的2cnf }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7.3 随机数发生器
产生随机数的公式:
d0 dn
d bdn1c
an dn/65536
n1,2,
产生0~65535的随机数 a1,a2, 序列,
b、c、d为正整数,称为所产生的随机序列的种子。
常数b、c,对所产生的随机序列的随机性能有很大的 关系,b通常取一素数。
7.3 随机数发生器
#define MULTIPLIER 0x015A4E35L;
7.6 拉斯维加斯(Las Vegas)算法
一、一般概念 拉斯维加斯算法有时运行成功,有时失败,需 要反复运行同一实例,直到成功为止。
BOOL las_vegas():解问题的某个实例的代码段。 运行成功返回true,否则返回false。
拉斯维加斯算法反复地运行下面的代码段: while(!las_vegas(P(x))) ; 直到运行成功返回为止。
7.2 随机算法的类型
3、拉斯维加斯(Las Vegas)算法:要么给 出问题的正确答案,要么得不到答案。反复求 解多次,可使失效的概率任意小。
4、蒙特卡罗(Monte Carlo)算法:总能得到 问题的答案,偶然产生不正确的答案。重复运 行,每一次都进行随机选择,可使不正确答案 的概率变得任意小。
7.2 随机算法的类型
数值概率算法 拉斯维加斯(Las Vegas)算法 蒙特卡罗(Monte Carlo)算法 舍伍德(Sherwood)算法。
7.2 随机算法的类型
1、数值概率算法:用于数值问题的求解。所 得到的解几乎都是近似解,近似解的精度随着 计算时间的增加而不断地提高。
2、舍伍德(Sherwood)算法:很多具有很好 的平均运行时间的确定性算法,在最坏的情况 下性能很坏。引入随机性加以改造,可以消除 或减少一般情况和最坏情况的差别。
例:快速排序算法 当输入数据均匀分布时,运行时间是 (nlogn)。 当输入数据按递增或递减顺序排列时,算法的运行时
间变坏
7.5 舍伍德(Sherwood)算法
二、舍伍德算法的基本思想
– 消除不同输入实例对算法性能的影响,使随机算法对 规模为的每一个实例,都有:T B(x)TA(n)s(n)
7.7 蒙特卡罗(Monte Carlo)算法
蒙特卡罗算法则在一般情况下可以保证对问题 的所有实例都以高概率给出正确解,但是通常 无法判定一个具体解是否正确。
设p是一个实数,且1/2<Байду номын сангаас<1。如果一个蒙特 卡罗算法对于问题的任一实例得到正确解的概 率不小于p,则称该蒙特卡罗算法是p正确的, 且称p-1/2是该算法的优势。
8.1 随机算法引言
随机算法的优点:
– 1、执行时间和空间,小于同一问题的已知最好的确定性算法; – 2、实现比较简单,容易理解。
很多确定性的算法,其性能很坏。可用随机选择的方 法来改善算法的性能。
某些方面可能不正确,对特定的输入,算法的每一次 运行不一定得到相同结果。出现这种不正确的可能性 很小,以致可以安全地不予理睬。
if (k>n/2) {x = A[i]; return TRUE;} else return FALSE; }
7.7 蒙特卡罗(Monte Carlo)算法
2、如果存在主元素,以大于1/2的概率返回 true,小于1/2的概率返回false。
连续运行k次,返回的概率减少为2-k,算法错 误的概率为2-k 。
– int RepeatedElement(Type a[],int n){
while (1){ int i=random()%n+1; int j= random()%n+1; if((i!=j)&&(a[i]==a[j])) return(i); }
–}
7.6 拉斯维加斯(Las Vegas)算法
random_seed(0); s = log(1/e);
for (t=1;t<=s;t++) {
i = random(0,n-1) ; k = 0;
for (j=0;j<n;j++)
if (A[i]==A[j])
k++;
if (k>n/2) { x = A[i]; flag = TRUE; break; }
确定性的算法 :
– 算法的每一个计算步骤都是确定的, – 对于相同的输出,每一次执行过程都会产生相同的
输出。
随机算法:非形式描述
– 随机算法为使用随机函数产生器的算法。算法中的 一些判定依赖于随机函数产生器的输出。
– 随机算法对于相同的输入,在不同的运行过程中会 得到不同的输出。
– 对于相同的输入,随机算法的执行时间也可能随不 同的运行过程而不同。
while循环则任何一次迭代中退出的概率为
p=
n 2
(n 2
1)
.当n

10时,
p

1/5,则不退出的
n2
概率≤ 4/5。
算法在前calogn(c为固定常数)次迭代内不退出的 概率<(4/5) calogn=n-calog(4/5),若取c ≥ 1/log(5/4),则 其值< n-a,
因此,算法在calogn次迭代以内终止的概率≥ 1n-a。每次迭代花费O(1)的时间,算法的执行时间 为O(logn)。
#define
INCREMENT 1;
static unsigned long seed;
void random_seed(unsigned long d)
{
if (d==0)
seed = time(0);
else
seed = d;
}
unsigned int random(unsigned long low,unsigned long high)
算法9.7 求数组A的主元素 输入:n个元素的数组A[] 输出:数组A的主元素
BOOL majority(Type A[],Type &x,int n) { int i,j,k;
random_seed(0); i = random(0,n-1) ; k = 0;
for (j=0;j<n;j++) if (A[i]==A[j]) k++;
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]交换到数组的第一个位置*/
例:识别重复元素 考虑一个有n个数字的数组a[],其中有n/2个不
同的元素,其余元素是另一个元素的拷贝,即 数组中共有(n/2)+1个不同的元素。问题是 要识别重复的元素。 确定性算法:
至少需要(n/2)+2个时间步。
7.6 拉斯维加斯(Las Vegas)算法
拉斯维加斯(Las Vegas)算法
}
return 4*k/(double)n;
}
7.5 舍伍德(Sherwood)算法
一、确定性算法的平均运行时间 TA(x) :确定性算法对输入实例的运行时间。 Xn :规模为的所有输入实例全体。
算法的平均运行时间:TA(n) TA(x)/|Xn|
存在实例 x Xn,TA(x)TA(n)x Xn。
7. k = split(A,low,high); /* 按元素A[low]把数组划分为两个 */
8. r_quicksort(A,low,k-1);
/* 排序第一个子数组 */
9. r_quicksort(A,k+1,high); /* 排序第二个子数组 */
10. }
11. }
算法的期望运行时间是 (nlogn) 。
}
return flag;
}
算法的错误概率小于所给参数e。算法的运行时间为O(nlog(1/e)) 。
7.7 蒙特卡罗(Monte Carlo)算法
素数测试 一、一般方法
– 被测试的数除以2到 n 的数,余数为0,是合数, 否则是素数。
二、蒙特卡罗算法
素数测试
Wilson定理:对于给定的正整数n,判定n是一个素数的充要条件
是(n-1)! -1(mod n)。
费尔马小定理:如果p是一个素数,且0<a<p,则ap-1(mod p)。
二次探测定理:如果p是一个算素法数p,ri且m0e<是x<一p个,偏则假方3程/4x正2确1(的mo蒙d p)
的解为x=1,p-1。
特卡罗算法。通过多次重复调用错
int power(int a, int p, int n)
7.6 拉斯维加斯(Las Vegas)算法
p(x):对输入实例成功地运行las_vegas的概 率
若存在常数δ>0,使得对的所有实例p,都有 p(x)>= δ ,则失败的概率小于1- δ 。
连续运行k次,失败的概率降低为(1- δ )k。 k充分大, (1- δ )k趋于0。
7.6 拉斯维加斯(Las Vegas)算法
第七章 随机算法及NP完全问题
7.1 随机算法引言 7.2 随机算法的类型 7.3 随机数发生器 7.4 数值概率算法 7.5 舍伍德(Sherwood)算法 7.6 拉斯维加斯(Las Vegas)算法 7.7 蒙特卡罗(Monte Carlo)算法 7.8 NP完全问题
7.1 随机算法引言
二、一般方法
每个元素和其它元素比较,并计数。如果计数值大 于n /2,该元素就是的主元素。
相关文档
最新文档