




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1算法设计与分析算法设计与分析2Ch.1 概率算法概率算法1. 故事:故事:想象自己是神化故事的主人公,你想象自己是神化故事的主人公,你有一张不易懂的地图,上面描述了一处宝有一张不易懂的地图,上面描述了一处宝藏的藏宝地点。经分析你能确定最有可能藏的藏宝地点。经分析你能确定最有可能的两个地点是藏宝地点,但二者相距甚远。的两个地点是藏宝地点,但二者相距甚远。假设你如果已到达其中一处,就立即知道假设你如果已到达其中一处,就立即知道该处是否为藏宝地点。你到达两处之一地该处是否为藏宝地点。你到达两处之一地点及从其中一处到另一处的距离是点及从其中一处到另一处的距离是5天的天的行程。进一步假设有一条恶龙,每
2、晚光顾行程。进一步假设有一条恶龙,每晚光顾宝藏并从中拿走一部分财宝。假设你取宝宝藏并从中拿走一部分财宝。假设你取宝藏的方案有两种:藏的方案有两种:1.1 引言引言3 方案方案1. 花花4天的时间计算出准确的藏宝地点,然天的时间计算出准确的藏宝地点,然后出发寻宝,一旦出发不能重新计算后出发寻宝,一旦出发不能重新计算 方案方案2. 有一个小精灵告诉你地图的秘密,但你有一个小精灵告诉你地图的秘密,但你必须付给他报酬,相当于龙必须付给他报酬,相当于龙3晚上拿走的财宝晚上拿走的财宝 Prob 1.1.1 若忽略可能的冒险和出发寻宝的代若忽略可能的冒险和出发寻宝的代价,你是否接受小精灵的帮助?价,你是否接
3、受小精灵的帮助? 显然,应该接受小精灵的帮助,因为你只需显然,应该接受小精灵的帮助,因为你只需给出给出3晚上被盗窃的财宝量,否则你将失去晚上被盗窃的财宝量,否则你将失去4晚被晚被盗财宝量。盗财宝量。 但是,若冒险,你可能做得更好!但是,若冒险,你可能做得更好!1.1 引言引言4 设设x是你决定之前当日的宝藏价值,设是你决定之前当日的宝藏价值,设y是恶龙每是恶龙每晚盗走的宝藏价值,并设晚盗走的宝藏价值,并设x9y 方案方案1:4天计算确定地址,行程天计算确定地址,行程5天,你得到的宝天,你得到的宝藏价值为:藏价值为:x-9y 方案方案2:3y付给精灵,行程付给精灵,行程5天失去天失去5y,你得到
4、的,你得到的宝藏价值为:宝藏价值为:x-8y 方案方案3:投硬币决定先到一处,失败后到另一处投硬币决定先到一处,失败后到另一处(冒冒险方案险方案) 一次成功所得:一次成功所得:x-5y,机会,机会1/2 二次成功所得:二次成功所得:x-10y,机会,机会1/21.1 引言引言期望赢利:期望赢利:x-7.5y52. 意义意义 该故事告诉我们:当一个算法面临某种选择该故事告诉我们:当一个算法面临某种选择时,有时随机选择比耗时做最优选择更好,尤其时,有时随机选择比耗时做最优选择更好,尤其是当最优选择所花的时间大于随机选择的平均时是当最优选择所花的时间大于随机选择的平均时间的时侯间的时侯 显然,概率算
5、法只能是期望的时间更有效,显然,概率算法只能是期望的时间更有效,但它有可能遭受到最坏的可能性。但它有可能遭受到最坏的可能性。63. 期望时间和平均时间的区别期望时间和平均时间的区别v 确定算法的平均执行时间确定算法的平均执行时间 输入规模一定的所有输入实例是等概率出现时,算法输入规模一定的所有输入实例是等概率出现时,算法的平均执行时间。的平均执行时间。v 概率算法的期望执行时间概率算法的期望执行时间 反复解同一个输入实例所花的平均执行时间。反复解同一个输入实例所花的平均执行时间。 因此,对概率算法可以讨论如下两种期望时间因此,对概率算法可以讨论如下两种期望时间n 平均的期望时间平均的期望时间:
6、所有输入实例上平均的期望执行时:所有输入实例上平均的期望执行时间间n 最坏的期望时间最坏的期望时间:最坏的输入实例上的期望执行时间:最坏的输入实例上的期望执行时间74. 例子例子n快速排序中的随机划分快速排序中的随机划分n要求学生写一算法,由老师给出输入实例,按运行时间打分,要求学生写一算法,由老师给出输入实例,按运行时间打分,所有学生均不敢用简单的划分,运行时间在所有学生均不敢用简单的划分,运行时间在1500-2600ms,三个学,三个学生用概率的方法划分,运行时间平均为生用概率的方法划分,运行时间平均为300ms。n8皇后问题皇后问题系统的方法放置皇后系统的方法放置皇后(回溯法回溯法)较合
7、适,找出所有较合适,找出所有92个解个解 O(2n),若只,若只找找92个其中的任何一个解可在线性时间内完成个其中的任何一个解可在线性时间内完成O(n)。 随机法:随机法:随机地放置若干皇后能够改进回溯法,特别是当随机地放置若干皇后能够改进回溯法,特别是当n较大时较大时n判断大整数是否为素数判断大整数是否为素数确定算法无法在可行的时间内判断一个数百位十进制数是否素数,确定算法无法在可行的时间内判断一个数百位十进制数是否素数,否则密码就不安全。否则密码就不安全。 概率算法将有所作为:若能接受一个任意小的错误的概率概率算法将有所作为:若能接受一个任意小的错误的概率85. 概率算法的特点概率算法的特
8、点 (1) 不可再现性不可再现性 在同一个输入实例上,每次执行结果不尽相同,例在同一个输入实例上,每次执行结果不尽相同,例如如n N-皇后问题皇后问题n概率算法运行不同次将会找到不同的正确解概率算法运行不同次将会找到不同的正确解n 找一给定合数的非平凡因子找一给定合数的非平凡因子每次运行的结果不尽相同,但确定算法每次运行结果必每次运行的结果不尽相同,但确定算法每次运行结果必定相同定相同 (2) 分析困难分析困难 要求有概率论,统计学和数论的知识要求有概率论,统计学和数论的知识96. 本章约定本章约定 随机函数随机函数uniform,随机随机,均匀均匀,独立独立n 设设a,b为实数,为实数,ab
9、, uniform(a, b) 返回返回x,a x b 设设i,j为整数,为整数,ij, uniform(i, j)=k, i k j 设设X是非空有限集,是非空有限集, uniform(X) X 10例例1:设设p是一个素数,是一个素数,a是一个整数满足是一个整数满足1a0 do if (j is odd) s sa mod p;a a2 mod p;j j div 2;return s;Draw (a, p) / 在在X中随机取一元素中随机取一元素j uniform(1.p-1);return ModularExponent(a, j, p); / 在在X中随机取一元素中随机取一元素12n
10、 伪随机数发生器伪随机数发生器在实用中不可能有真正的随机数发生器,多数情况在实用中不可能有真正的随机数发生器,多数情况下是用伪随机数发生器代替。下是用伪随机数发生器代替。大多数伪随机数发生器是基于一对函数:大多数伪随机数发生器是基于一对函数:S: X X, 这里这里X足够大,它是种子的值域足够大,它是种子的值域R: X Y, Y是伪随机数函数的值域是伪随机数函数的值域使用使用S获得种子序列:获得种子序列:x0=g, xi=S(xi-1), i0然后使用然后使用R R获得伪随机序列:获得伪随机序列:yi=R(xi), i 0该序列必然是周期性的,但只要该序列必然是周期性的,但只要S S和和R R
11、选的合适,该选的合适,该周期长度会非常长。周期长度会非常长。TC中可用中可用rand()和和srand(time), 用用GNU C更好更好13n 基本特征基本特征n随机决策随机决策n在同一实例上执行两次其结果可能不同在同一实例上执行两次其结果可能不同n在同一实例上执行两次的时间亦可能不太相在同一实例上执行两次的时间亦可能不太相同同n 分类分类nNumerical, Monte Carlo, Las Vegas, Sherwood.n很多人将所有概率算法很多人将所有概率算法(尤其是数字的概率算尤其是数字的概率算法法)称为称为Monte Carlo算法算法1.2 概率算法的分类概率算法的分类14
12、n 数字算法数字算法n随机性被最早用于求数字问题的近似解随机性被最早用于求数字问题的近似解n例如,求一个系统中队列的平均长度的问题,确定例如,求一个系统中队列的平均长度的问题,确定算法很难得到答案算法很难得到答案概率算法获得的答案一般是近似的,但通常算法执行的时概率算法获得的答案一般是近似的,但通常算法执行的时间越长,精度就越高,误差就越小间越长,精度就越高,误差就越小使用的理由使用的理由 现实世界中的问题在原理上可能就不存在精确解现实世界中的问题在原理上可能就不存在精确解例如,实验数据本身就是近似的,一个无理数在计算例如,实验数据本身就是近似的,一个无理数在计算机中只能近似地表示机中只能近似
13、地表示 精确解存在但无法在可行的时间内求得精确解存在但无法在可行的时间内求得有时答案是以置信区间的形式给出的有时答案是以置信区间的形式给出的1.2 概率算法的分类概率算法的分类15n Monte Carlo算法算法 (MC算法算法)蒙特卡洛算法蒙特卡洛算法1945年由年由J. Von Neumann进行核武模拟提出进行核武模拟提出的。它是以概率和统计的理论与方法为基础的一种数值计算的。它是以概率和统计的理论与方法为基础的一种数值计算方法,它是双重近似:一是用概率模型模拟近似的数值计算,方法,它是双重近似:一是用概率模型模拟近似的数值计算,二是用伪随机数模拟真正的随机变量的样本。二是用伪随机数模
14、拟真正的随机变量的样本。这里我们指的这里我们指的MC算法是:算法是: 若问题只有若问题只有1个正确的解,而无近个正确的解,而无近似解的可能时使用似解的可能时使用MC算法算法例如,判定问题只有真或假两种可能性,没有近似解例如,判定问题只有真或假两种可能性,没有近似解 因式分解,我们不能说某数几乎是一个因子因式分解,我们不能说某数几乎是一个因子n 特点:特点:MC算法总是给出一个答案算法总是给出一个答案,但该答案未必正确,但该答案未必正确,成成功功(即答案是正确的即答案是正确的)的概率正比于算法执行的时间的概率正比于算法执行的时间n 缺点:缺点:一般不能有效地确定算法的答案是否正确一般不能有效地确
15、定算法的答案是否正确1.2 概率算法的分类概率算法的分类16n Las Vegas算法算法 (LV算法算法)LV算法绝不返回错误的答案。算法绝不返回错误的答案。n 特点:特点:获得的答案必定正确获得的答案必定正确,但有时它仍,但有时它仍根本就找根本就找不到答案不到答案。 和和MC算法一样,成功的概率亦随算法执行时间增加而算法一样,成功的概率亦随算法执行时间增加而增加。无论输入何种实例,只要算法在该实例上运行足增加。无论输入何种实例,只要算法在该实例上运行足够的次数,则算法失败的概率就任意小。够的次数,则算法失败的概率就任意小。 Sherwood算法算法Sherwood算法总是给出正确的答案。算
16、法总是给出正确的答案。当某些确定算法解决一个特殊问题平均的时间比最坏时当某些确定算法解决一个特殊问题平均的时间比最坏时间快得多时,我们可以使用间快得多时,我们可以使用Sherwood算法来算法来减少,甚减少,甚至是消除好的和坏的实例之间的差别至是消除好的和坏的实例之间的差别。1.2 概率算法的分类概率算法的分类17这类算法主要用于找到一个数字问题的近似解这类算法主要用于找到一个数字问题的近似解1.3.1 值计算值计算n实验:将实验:将n根飞镖随机投向一正方形的靶子,计算落入此正方根飞镖随机投向一正方形的靶子,计算落入此正方形的内切圆中的飞镖数目形的内切圆中的飞镖数目k。假定飞镖击中方形靶子任一
17、点的概率相等假定飞镖击中方形靶子任一点的概率相等(用计算机模拟比任用计算机模拟比任一飞镖高手更能保证此假设成立一飞镖高手更能保证此假设成立)设圆的半径为设圆的半径为r,面积,面积s1= r2, 方靶面积方靶面积s2=4r2由等概率假设可知落入圆中的飞镖和正方形内的飞镖平均比为:由等概率假设可知落入圆中的飞镖和正方形内的飞镖平均比为:由此知:由此知: 1.3 数字概率算法数字概率算法2244krnr4 /4nk n k18n求求近似值的算法近似值的算法n为简单起见,只以上图的右上为简单起见,只以上图的右上1/4象限为样本象限为样本nDarts (n) nk 0;nfor i 1 to n do
18、nx uniform(0, 1);ny uniform(0, 1); / 随机产生点随机产生点(x,y)nif (x2 + y2 1) then k+; /圆内圆内nnreturn 4k/n;n实验结果实验结果: =3.141592654n = 1000万万: 3.140740, 3.142568 (2位精确位精确)n = 1亿亿: 3.141691, 3.141363 (3位精确位精确)n = 10亿亿: 3.141527, 3.141507 (4位精确位精确)1.3.1 值计算值计算19n 求求近似值的算法近似值的算法nEx.1 若将若将y uniform(0, 1) 改为改为 y x,
19、则则上述的算法估计的值是什么?上述的算法估计的值是什么?1.3.1 值计算值计算20Monte Carlo积分积分(但不是指我们定义的但不是指我们定义的MC算法算法)n概率算法概率算法1设设f: 0, 1 0, 1是一个连续函数,则由曲线是一个连续函数,则由曲线y=f(x), x轴轴, y轴和直线轴和直线x=1围成的面积由下述积分给出:围成的面积由下述积分给出:向单位面积的正方形内投镖向单位面积的正方形内投镖n次,落入阴影部分的镖的次,落入阴影部分的镖的数目为数目为k,则,则显然,只要显然,只要n足够大足够大1.3.2 数字积分数字积分 (计算定积分的值计算定积分的值)10( )Sf x dx
20、/1kSSk nn/Sk n 21n概率算法概率算法1nHitorMiss (f, n) nk 0;nfor i 1 to n do nx uniform(0, 1);ny uniform(0, 1);nif y f(x) then k+;nnreturn k/n;nNote: 是是S/4的面积,的面积, =S, 1.3.2 数字积分数字积分 (计算定积分的值计算定积分的值)1201x dx12041x dx22n 概率算法概率算法1Ex2. 在机器上用在机器上用 估计估计值,给出不值,给出不同的同的n值及精度。值及精度。Ex3. 设设a, b, c和和d是实数,且是实数,且a b, c d,
21、 f:a, b c, d是一个连续函数,写一概率算法计是一个连续函数,写一概率算法计算积分:算积分:注意,函数的参数是注意,函数的参数是a, b, c, d, n和和f, 其中其中f用函用函数指针实现,请选一连续函数做实验,并给出数指针实现,请选一连续函数做实验,并给出实验结果。实验结果。1.3.2 数字积分数字积分 (计算定积分的值计算定积分的值)12041x dx( )baf x dx23n概率算法概率算法1n*Ex4. 设设,是是(0,1)之间的常数,证明:之间的常数,证明:n若若I是是 的正确值,的正确值,h h是由是由HitorHissHitorHiss算法返算法返回的值,则当回的值
22、,则当n I(1-I)/2时有:时有:nProb|h-I| Tj;1.4.2 随机的预处理随机的预处理44例例2:离散对数计算:离散对数计算离散对数计算困难使其可用于密码算法,数字签名等离散对数计算困难使其可用于密码算法,数字签名等定义:设定义:设 a=gx mod p记记 logg,pa=x,称,称x为为a的的(以以g为底模除为底模除p)对数对数从从p,g,a计算称计算称x为离散对数问题。为离散对数问题。简单算法:简单算法: 计算计算gx对所有的对所有的x,最多计算,最多计算0 x p-1 或或 1xp,实际上离散对数,实际上离散对数是循环群。是循环群。 验证验证a=gx mod p 是否成
23、立。是否成立。dlog(g, a, p) / 当这样的对数不存在时,算法返回当这样的对数不存在时,算法返回p x 0; y 1; do x+;y y*g; / 计算计算y=gx while ( a y mod p) and (x p); return x1.4.2 随机的预处理随机的预处理2,7xlog3x32 mod7例无解,不存在使45问题:最坏问题:最坏O(p)循环次数难以预料循环次数难以预料当满足一定条件时平均循环当满足一定条件时平均循环p/2次次当当p=24位十进制数,循环位十进制数,循环1024次次千万亿次千万亿次/秒秒 (1016次次/秒秒) 大约算大约算1年年(108秒秒/年年
24、)若若p是数百位十进制?随机选择都可能无法在可行的时间内求解。是数百位十进制?随机选择都可能无法在可行的时间内求解。假设有一个平均时间性能很好,但最坏情况差的确定算法求假设有一个平均时间性能很好,但最坏情况差的确定算法求logp,ga,怎样用怎样用Sherwood算法求解该问题?算法求解该问题?设设p=19, g=2当当a=14, 6时,时,log2,1914 = 7, log2,196=14,与,与a的取值相关的取值相关当用当用dlog求求14的离散对数时,循环的离散对数时,循环7次,求次,求6的对数时要执行的对数时要执行14次,次,用用sherwood算法应该使得与算法应该使得与a无关,用
25、随机预处理的方法计算无关,用随机预处理的方法计算logg,pa1.4.2 随机的预处理随机的预处理46定理定理(见见p877, 31.6) dlogRH(g, a p) / 求求logg,pa, a = gx mod p,求,求x / Sherwood算法算法 r uniform(0.p-2); b ModularExponent(g, r, p); /求幂模求幂模b=gr mod p c ba mod p; / y logg,pc; / 使用确定性算法求使用确定性算法求logp,gc, y=r+x return (y-r) mod (p-1); / 求求xEx. 分析分析dlogRH的工作原
26、理,指出该算法相应的的工作原理,指出该算法相应的u和和v1.4.2 随机的预处理随机的预处理,log(mod)(loglog)mod(1)log(mod)for 02g pg pg prg pstpstpgprrp(mod)(mod)modmo?drxr xgp gppgpc47随机预处理提供了一种加密计算的可能性随机预处理提供了一种加密计算的可能性假定你想计算某个实例假定你想计算某个实例x,通过,通过f(x)计算,但你缺乏计算计算,但你缺乏计算能力或是缺乏有效算法,而别人有相应的计算能力,愿能力或是缺乏有效算法,而别人有相应的计算能力,愿意为你计算意为你计算(可能会收费可能会收费),若你愿意
27、别人帮你计算,但,若你愿意别人帮你计算,但你不愿意泄露你的输入实例你不愿意泄露你的输入实例x,你将如何做?,你将如何做?可将随机预处理使用到可将随机预处理使用到f的计算上:的计算上: 使用函数使用函数u将将x加密为某一随机实例加密为某一随机实例y 将将y提交给提交给f计算出计算出f(y)的值的值 使用函数使用函数v转换为转换为f(x)上述过程,他人除了知道你的实例大小外,不知道上述过程,他人除了知道你的实例大小外,不知道x的任的任何信息,因为何信息,因为u(x,r)的概率分布的概率分布(只要只要r是随机均匀选择的是随机均匀选择的)是独立于是独立于x的。的。1.4.2 随机的预处理随机的预处理4
28、8设两个数组设两个数组val1.n和和ptr1.n及及head构成一个有构成一个有序的静态链表:序的静态链表:valhead valptrhead valptrptrhead valptrn-1head例:例:1.4.3 搜索有序表搜索有序表if val i:ptri0 if val i给出下一个关键字的下标 不是最大关键字即 是最大关键字49若若val1.n本身有序,可用折半查找找某个给定的本身有序,可用折半查找找某个给定的key,时,时间为间为O(lgn)。但因此处理链式结构,故最坏时间是。但因此处理链式结构,故最坏时间是(n)(n)。尽管如此,我们能够找到一个确定性算法,平均时间尽管如此
29、,我们能够找到一个确定性算法,平均时间为为 。相应的相应的SherwoodSherwood算法的期望时间是算法的期望时间是 ,它虽然并不比确,它虽然并不比确定性算法快,但他消除了最坏实例。定性算法快,但他消除了最坏实例。假定表中元素互不相同,且所求的关键字表中存在,则给假定表中元素互不相同,且所求的关键字表中存在,则给定定x x,我们是求下标,我们是求下标i i,使,使vali=x,这里这里1i n。任何实例可以有两个参数刻画:任何实例可以有两个参数刻画: 前前n n个整数的排列个整数的排列 x x的的rank1.4.3 搜索有序表搜索有序表()On()On50设设Sn是所有是所有n!个排列的
30、集合,设个排列的集合,设A是一个确定性算是一个确定性算法法 tA(n, k, )表示算法表示算法A的执行时间,此时间与被的执行时间,此时间与被查找元素的秩查找元素的秩k,以及,以及val的排序的排序相关。若相关。若A A是一是一个概率算法,则个概率算法,则tA(n, k, )表示算法的期望值。无表示算法的期望值。无论算法是确定的还是概率的,论算法是确定的还是概率的,wA(n)和和mA(n)表示最表示最坏时间和平均时间,因此有:坏时间和平均时间,因此有: 1.4.3 搜索有序表搜索有序表1( )max ( , , )|1 1( )( , , )!11,2,.,1/!nAnnAASknwnt n
31、kkn andSmntn kn nknnSn的概率是,在 中每个排列的概率是51时间为时间为O(n)的确定算法的确定算法设设xvali且且x在表中,则从位置在表中,则从位置i开始查找开始查找x的算法为:的算法为:Search(x, i) /仍可改进仍可改进while x vali do i ptri;return i;在表在表val1.n中查找中查找x的算法为:的算法为:A(x) return Search(x, head);1.4.3 搜索有序表搜索有序表52时间为时间为O(n)的确定算法的确定算法分析:分析:设设rank(x)=k, 则:则: 算法算法A在在n个元素的表中查找个元素的表中查
32、找x所需的访问所需的访问数组元素的次数,显然与数组元素的次数,显然与无关无关 算法算法A A最坏时的访问次数最坏时的访问次数 算法算法A A平均的访问次数平均的访问次数 1.4.3 搜索有序表搜索有序表( , )Atn kw ( )Anm ( )An1,1, ,( , ),( ),1,2,.,11( )( , )2( )( )AAnAAnnNkn tn kknNknwnnnNknnmntn knT nO n 若是为最坏情况,此时设的概率相等,则综上所述,53时间为时间为O(n)的概率算法的概率算法D(x) i uniform(1.n);y vali;case x y: return Searc
33、h(x, ptri); / case2 otherwise: return i; / x = y1.4.3 搜索有序表搜索有序表54时间为时间为O(n)的概率算法的概率算法性能分析:性能分析: 设设rank(x)=k, rank(vali)=j (D访问数组次数访问数组次数)若若 k j, 则则 ,属于,属于case2,从第,从第j小元素搜索小元素搜索若若 k = j, 则则 ,属于,属于case3 1.4.3 搜索有序表搜索有序表( , )Dtn kk( , )-Dtn kkj( , )0Dtn k DDnN,w (n)?j1,knSearchn-1w (n)n1 当时,执行次数为, 121
34、111121,( )?11,2,.,1,2,.,11( )( , )()1(1)(1)()11()22333DjnnnnDDjkjkkjnjnN mnjnknnmntn kkkjn nnj jnjnjnnnn 及的概率均为显然平均时间性能优于确定算法55平均时间为平均时间为 的确定算法的确定算法B(x) /设设x在在val1.n中中i head;max vali; / max初值是表初值是表val中最小值中最小值for j i to do / 在前在前 个数中找不大于个数中找不大于x / 的最大整数的最大整数y相应下标相应下标i y valj; if max y x then i j; max
35、 y; / endforreturn Search(x, i); / 从从y向后搜索向后搜索for循环的目的:找不超过循环的目的:找不超过x的最大整数的最大整数y,使搜索从,使搜索从y开始,若将开始,若将val1.n中中的的n个整数看作是均匀随机分布的,则在个整数看作是均匀随机分布的,则在val1.l中求中求y值就相当于在值就相当于在n个整数中,个整数中,随机地取随机地取l个整数,求这个整数,求这l个整数中不大于个整数中不大于x的最大整数的最大整数y。1.4.3 搜索有序表搜索有序表()Onnn56平均时间为平均时间为 的确定算法的确定算法算法分析:算法分析:可用一个与可用一个与l和和n相关的
36、随机变量来分析,更简单的分析如下:相关的随机变量来分析,更简单的分析如下:设设n个整数的排列满足:个整数的排列满足:a1 a2 0,更好的情况是,更好的情况是Obstinate(x) repeatLV(x, y, success);until success;return y; 设设t(x)是算法是算法obstinate找到一个正确解的期望时间,则找到一个正确解的期望时间,则若要最小化若要最小化t(x), 则需在则需在p(x), s(x)和和e(x)之间进行某种折衷,例如,若之间进行某种折衷,例如,若要较少失败的时间,则可降低成功的概率要较少失败的时间,则可降低成功的概率p(x)。1.5 La
37、s Vegas 算法算法0, ( )p x常数( )( ) ( )(1( )( ( )( )LV1( )( )( )( )( )t xp x s xp xe xt xLVp xt xs xe xp x成功的概率失败的概率60传统的回溯法传统的回溯法置当前行为第置当前行为第1行,当前列为第行,当前列为第1列,即列,即ij1;while i 8 do / 当前行号当前行号 8检查当前行:从当前列检查当前行:从当前列j起向后逐列试探,寻找安全列号;起向后逐列试探,寻找安全列号;if 找到安全列号找到安全列号 then 放置皇后,将列号记入栈中,并将下一行置为当前行,即放置皇后,将列号记入栈中,并将下
38、一行置为当前行,即i+; j1; /当前列置为当前列置为1 else 退栈回溯到上一行,即退栈回溯到上一行,即i-; 移去该行已已放置的皇后,以该皇后所在列的下一列作为当前移去该行已已放置的皇后,以该皇后所在列的下一列作为当前 列;列;1.5.1 8后问题后问题12341234iji+j 135度对角线度对角线:同一条对同一条对角线上的元素的行列号之和角线上的元素的行列号之和相等相等 i-j或或j-i 45度对角线度对角线:同一条同一条对角线上的元素的行列号之对角线上的元素的行列号之差相等差相等 61611.5.1 8后问题后问题2.Las Vegas方法v向量try1.8中存放结果tryi表
39、示第i个皇后放在(i,tryi)位置上vtry1.k称为k-promising是指:若k个皇后的位置(0k 8): (1,try1),(2,try2),(k,tryk)互相不攻击,则称try1.k是k-promising的.形式化:对 ,若 有 (式1)则: 行冲突:无须考虑,因为第i个皇后放在第i行,故同一行不会有两皇后,1, i jkijtryi-tryji-j,0,j-i62621.5.1 8后问题后问题v 列冲突:若对任意不同的两行i、j,因为其列数之差不为0,故任意两皇后不可能在同一列上。v 135对角线冲突: 和 冲突时有:v即 。故任两皇后不会在135对角线上冲突。v 45对角线
40、冲突: v 和 冲突时有:v即tryi-tryj=i-jv故任两皇后不会在45对角线上冲突。v 综上所述,式1成立时try1.k是k-promising。v 显然,若k 1,则向量try1.k是k-promising的,对v 8后问题,解是8-promising的。, i try ia itry ijtry j, j try ja try itry jji, i try ia, j try ja itry ijtry j63631.5.1 8后问题后问题算法:QueensLv (success)/贪心的LV算法,所有皇后都是随机放置/若Success=true,则try1.8包含8后问题的一个
41、解。col,diag45,diag135;/列及两对角线集合初值为空k 0;/行号repeat /try1.k是k-promising,考虑放第k+1个皇后nb 0;/计数器,nb值为(k+1)th皇后的open位置总数for i i to 8 do /i是列号 if (i col) and (i-k diag45) and (i+k diag135) then /列i对(k+1)th皇后可用,但不一定马上将其放在第i列 nb nb+1; if uniform(1.nb)=1 then /或许放在第i列 j i;/注意第一次uniform一定返回1,即j一定有值1 /endif /endfor
42、64641.5.1 8后问题后问题if(nb 0) then /nb=0时,第k+1个皇后尚未放好,所有位置不安全。/在所有nb个open位置上,(k+1)th皇后选择位置j的概率为1/nb tryk+1 j;/放置(k+1)th个皇后 col col j ; diag45 diag45 j-k ; diag135 diag135 j+k ; kk+1;/try1.k+1是(k+1)-promisinguntil (nb = 0) or (k=8);/当前皇后找不到合适的位置或try是 / 8-promising是结束。success (nb0);65651.5.1 8后问题后问题v 分析设p
43、是成功的概率(一次成功) s:成功时搜索的结点的平均数。(一个皇后放好算是搜索树上的一个结点)e:失败时搜索的结点的平均数。显然s=q(空向量try算在内)p和e理论上难于计算,但实验用计算机可以计算出:p=0.1293e=6.971在重复上述算法,直至成功时(相当于obstinate的时间),所搜索的平均结点数:大大优于回溯法,回溯法约为114个结点才能求出一个解。Ex.证明:当放置(k+1)th皇后时,若有多个位置是开放的,则算法QueensLV选中其中任一位置的概率相等。(1) /55.927.tsp e p66661.5.1 8后问题后问题v 改进上述LV算法过于消极:一旦失败,从头再
44、来而回溯法又过于乐观:一旦放置某个皇后,就进行系统回退一步的策略,而这一步往往不一定有效。 折中的方法会更好吗?一般情况下为此。先用LV方法随机地放置前若干个结点,例如k个。然后使用回溯法放置后若干个结点,但不考虑重放前k个结点。若前面的随机选择位置不好,可能使得后面的位置不成功,如若前两个皇后的位置是1、3。随机放置的皇后越多,则后续回溯阶段的平均时间就越少,失败的概率也就越大。67671.5.1 8后问题后问题折中算法只需将QueensLV的最后两行改为:until nb = 0 or k = stopVegas;if (nb0)then backtrace (k, col, diag45
45、, diag135,success);else success false;stopVegas控制随机放置皇后的个数。68681.5.1 8后问题后问题改进后算法的实验室结果:纯回溯时间:40msstepVegas=2 or 3:10ms(平均)纯贪心LV:23ms(平均)结论:一半略少的皇后随机放置较好。StepVegaspset011141141139.6339.6320.87522.5339.6728.230.493113.4815.129.0140.261810.318.7935.150.16249.337.2946.9260.13579.056.9853.570.129396.975
46、5.9380.129396.9753.93搜索的平均节点数完全回溯完全随机69691.5.1 8后问题后问题-问题1:为什么仅随机放一个皇后,其效果就会大大优于纯回溯方法?-问题2:预先随机选几个皇后放置为好?由于解缺乏规律性(至少在皇后数不等于4k+2,k为某整数时),故求出stepVegas的最优值较难,但是找到一个较好(不一定是最优)的stepVegas还是可以的。12皇后:StepVegaspset时间01262262125ms50.503933.8847.2380.3937ms120.04651310.2222.11基本与纯回溯相同70701.5.1 8后问题后问题在Apple II
47、机器上,20个皇后:n确定性的回溯算法:找到第一个解的时间大于2个小时。n概率算法,随机地放置前10个皇后:5分半钟找到36个不同的解。后者找一个接比前者大约快1000倍!Ex. 写一算法,求n=1220时最优的StepVegas值。-Obstinate算法在何时无限循环?当问题不存在解时。对于n皇后,要求n=4,即问题至少有一个解存在时,Obstinate算法才有可能结束。71711.5.2 模模p平方根平方根n定义1:设p是一个奇素数,若整数x1,p-1且存在一个整数y,使则x称为模p的二次剩余(quadratic residue),若y 1,p-1,则y称为x模p的平方根。v例:63是5
48、5模103的平方根,55是模103的二次剩余。n定义2:若整数 ,且z不是模p的二次剩余,则z是模p的非二次剩余。2modxyp55mod10355263 mod1033969mod1035525563 (mod103)1,1zp72721.5.2 模模p平方根平方根n定理1:任何一个模p的二次剩余至少有两个不同的平方根。npf:设x是模p的二次剩余,y是x模p的平方根。n因为n故n只要证 且 就可证明p-y是不同于y的x模p的另一个平方根。np是奇数, ,否则p是偶数。n另一方面,n2222()2(mod)pyppyyyp2() (mod)xpyppyy11yppyy11pyp1. /y1p
49、yp(1)1. /yp-1pypp73731.5.2 模模p平方根平方根n定理2:任一模p的二次剩余至多有两个不同的平方根pf:设 a和b是x模p的平方根。即 成立。n若k=0,则a=bn若k0,则ab不妨设ab. 又 由Th31.7知即 即 , 也就是说任意两个不同的平方根,均只有b和(p-b)两种不同形式。220(mod)abp22|()pab| ()pab22abk p222212(mod ) ,abpak pr bk pr1abp|()()pab ab|()pab()abkp()2abp1k abpapb74741.5.2 模模p平方根平方根n定理3:1到p-1之间的整数恰有一半是模p
50、的二次剩余(余数)。pf:由定理1和定理2知,任一模p的二次剩余恰有两个不同的平方根,即任取二次剩余 ,只有y和p-y这两个不同的平方根 ,在1,p-1中恰有(p-1)/2对不同的平方根,每对平方根对应的模p的余数必定在1,p-1中,即此区间上恰有(p-1)/2个模p的二次剩余n定理4:对 ,p是任一奇素数,有n且x是模p的二次剩余当且仅当npf:略(可用费马定理)1,1xp1,1xp (1)/21(mod)pxp 1y1pyp22() (mod)ypyp(1)/21(mod)pxp 75751.5.2 模模p平方根平方根n判定x是否为模p的二次剩余?n只要利用定理4和计算方幂模 即可。n已知
51、p是奇素数,x是模p的二次剩余,如何计算x模p的两个平方根?n当 时,两平方根易求,分别是n当 时,没有有效的确定性算法,只能借助与Las Vegas算法。nLas Vegas算法。用 表示x的两个平方根中较小的一个。nDef:模p乘法(类似于复数乘法),a,b,c,d0,p-1(1)/4px(1)/2modpxp3(mod4)p 1(mod4)p x()()mod()mod()mod()mod)mod /See p.863,(31.18)ab x cdxpacbdxadbcxpacbdxpadbcpxp式76761.5.2 模模p平方根平方根v例:设由定理4可知,7是模53的二次剩余,求7模
52、53的平方根。当省略模53符号是, 计算过程如下:531(mod 4),7.7px求 的平方根2671(mod53) /26=(53-1)/226(17)mod5323(17)(17)(17)82 7(17)(17)(82 7)22 10 717(22 10 7)(22 10 7)18 16 717(18 16 7)(18 16 7)4946 717(17)(4946 7)042 717(042 7)(042 7)520 76121326()()()()77771.5.2 模模p平方根平方根注:上例中, , 由定理4知, 是模53的二次非剩余。 同样可知 亦是摸53的二次非剩余。26(17)m
53、od53(042 7)(042 7)mod5326(17)1(mod53) 1726(1)/2p17(42 42 7mod530 7)mod53(12348mod530 7)mod53(520 7)mod5378781.5.2 模模p平方根平方根n若计算知当 时,已知 和 中有一个是模p的二次剩余,而另一个不是二次剩余,会怎样呢?例如,假定两等式相加得: 两式相减的: 26(17)7(mod53cd)20(mod53)c 71(mod53) /(7)mod534cda即+是二次剩余,定理052c(7)mod53a(7)mod53a71(mod53) /7)mod53cdcd 即(不是二次剩余0
54、c 272(mod53)d71(mod53)d79791.5.2 模模p平方根平方根n例:通过计算可知为了获得7的一个平方根,需要找唯一的一个证书y使得 , 。这可使用一个Euclid算法解决n算法:设x是模p的二次剩余,p是素数且26(27)041 7(mod53)152y411mod53y 41 221(mod53), 故y=22.它是7模53一个平方根21(mod4),(mod )pyxp找2722 (mod53), 另一平方根为53-22=3180801.5.2 模模p平方根平方根rootLV(x, p, y, success)/计算ya uniform(1.p-1);/我们并不知道a
55、应取多少if then /可能性很小 success true; y a;else 计算e,d使得 if d=0 then success false;/无法求出 else/c=0 success true; 计算y使得 /算法成功的概率0.5,接近0.5。故平均调用两次即可求得x的平方根。2(mod)axp(1)/20,1,()(mod );pc dpaxcd xp x1(mod ),11/Euclidd ypypy修改算法可求81811.5.3 整数的因数分解整数的因数分解设n是一个大于1的整数,因数分解问题是找到n的一个唯一分解:这里 是正整数,且 均为素数。若n是合数,则至少有一个非平
56、凡的因数(不是1和n本身).n的因数分解问题,即为找n的非平凡因数(设n是一个合数),它由两部分构成:nprime(n)判定n是否为素数,可由Monte Carlo算法确定。 split(n)当n为分数时,找n的一个非平凡的因数。1212kmmmknpppim12kppp82821.5.3 整数的因数分解整数的因数分解n朴素的split算法nsplit(n)n/若n是素数,返回1,否则返回找到的n的最小非平凡因数nfor i2 to do n if (n mod i)=0 thenn return i; /i2n return 1; /返回平凡因数nn83831.5.3 整数的因数分解整数的因
57、数分解n性能分析: 最坏情况。当n是一个中等规模的整数(如大约50位十进制整数)时,最坏情况的计算时间亦不可接受。n的位数 ,当m=50时,上述算法的时间约为无论是确定性的还是概率的,没有算法能够在多项式时间O(p(m)内分解n。Dixom的概率算法分解n的时间为Note:无论k和b是何正常数,均有:( )()T nn 10log(2)mmO(1)10lognm/210mn 251010(log)/()(2)(10)mOmkm bO mOO84841.5.3 整数的因数分解整数的因数分解n合数的二次剩余(模素数到模合数的推广)设n是任一正整数,整数 。若x和n互素,且存在一整数 使 ,则x称为
58、是模n的二次剩余,y称为是模n的平方根。一个模p的二次剩余,当p为素数时,恰有两个不同的平方根,但p为合数,且至少有两个奇素数因子时,不再为真。例: ,注意29应与35互素,才有可能是模35的二次剩余。n定理:若n=pq,p、q是两个互不相同的素数,则每一个模n的二次剩余恰有4个平方根。1,1xn1,1yn2(mod )xyn2222813222729(mod35)85851.5.3 整数的因数分解整数的因数分解 上节的测试x是否是模p的二次剩余及找x的平方根的方法是一个有效的算法(指rootLV),当n是一个合数,且n的因子分解给定时,同样存在有效的算法。但n的因数分解未给定时,目前还没有有
59、效算法测试x是否为二次剩余及找x的平方根。nDixon因数分解算法。n 基本思想,找两个与n互素的整数a和b,使 但 蕴含着 即 n假定 ,则n的某一非平凡因子x满足: . n n和a+b的最大公因子是n的一个非平凡因子。 3.例如: 22(mod )abn(mod )abn 22()()0(mod )abab abn|()()nab ab| (),| ()nab nab|(),( / )|()xabn xab8,13,35.abn2135gcd7,abnxx和的是是35的一个非平凡因子86861.5.3 整数的因数分解整数的因数分解Dixon (n, x, success)/找合数n的某一非
60、平凡因子xif n是偶数 then x2;success true;else for i 2 to do if 是整数 thenx ; success true;return; /n是合数且为奇数,现在知道它至少有两个不同的奇素数因子a,b 两个使得 的整数if then success false;elsex gcd (a+b,n); success true;3logn1/in1/in22(mod )abn(mod )abn87871.5.3 整数的因数分解整数的因数分解n如何确定a和b使 ,来对n因数分解。nDef. k-平滑: 若一个整数x的所有素因子均在前k个素数之中,则x称为k-平
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鱼塘 工程合同范本
- 卫辉购房合同范本
- RU-26752-生命科学试剂-MCE
- Myoseverin-B-生命科学试剂-MCE
- 大东鞋业的合同范本
- 4-8-iso-THC-4-8-Isotetrahydrocannabinol-生命科学试剂-MCE
- 2-6-Dimethylaniline-hydrochloride-o-Xylidine-hydrochloride-生命科学试剂-MCE
- 东营2025年山东东营河口区事业单位招聘33人笔试历年参考题库附带答案详解
- 装修 搬运 合同范本
- 科技前沿下的电力工程技术创新与进阶
- 第三章企业的生产和成本
- 统编版 高中语文 必修下册 《祝福》《林教头风雪山神庙》
- 2024年职教高考《机械制图》考试题库
- 2024改性沥青路面施工技术规范
- 九型人格与亲子教育课件
- 2025届高校毕业生公开招聘工作人员报名登记表
- DB34∕T 2290-2022 水利工程质量检测规程
- GB/T 44399-2024移动式金属氢化物可逆储放氢系统
- 薛岗小学反邪教工作计划
- 某住宅小区物业服务投标书范本
- 2024-2030年中国高空外墙清洗行业市场发展趋势与前景展望战略分析报告
评论
0/150
提交评论