- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析
;Ch.1 概率算法; 方案1. 花4天的时间计算出准确的藏宝地点,然后出发寻宝,一旦出发不能重新计算
方案2. 有一个小精灵告诉你地图的秘密,但你必须付给他报酬,相当于龙3晚上拿走的财宝
Prob 1.1.1 若忽略可能的冒险和出发寻宝的代价,你是否接受小精灵的帮助?
显然,应该接受小精灵的帮助,因为你只需给出3晚上被盗窃的财宝量,否则你将失去4晚被盗财宝量。
但是,若冒险,你可能做得更好!; 设x是你决定之前当日的宝藏价值,设y是恶龙每晚盗走的宝藏价值,并设x9y
方案1:4天计算确定地址,行程5天,你得到的宝藏价值为:x-9y
方案2:3y付给精灵,行程5天失去5y,你得到的宝藏价值为:x-8y
方案3:投硬币决定先到一处,失败后到另一处(冒险方案)
一次成功所得:x-5y,机会1/2
二次成功所得:x-10y,机会1/2; 4. 例子
快速排序中的随机划分
要求学生写一算法,由老师给出输入实例,按运行时间打分,所有学生均不敢用简单的划分,运行时间在1500-2600ms,三个学生用概率的方法划分,运行时间平均为300ms。
8皇后问题
系统的方法放置皇后(回溯法)较合适,找出所有92个解 O(2n),若只找92个其中的任何一个解可在线性时间内完成O(n)。
随机法:随机地放置若干皇后能够改进回溯法,特别是当n较大时
判断大整数是否为素数
确定算法无法在可行的时间内判断一个数百位十进制数是否素数,否则密码就不安全。
概率算法将有所作为:若能接受一个任意小的错误的概率
;5. 概率算法的特点
(1) 不可再现性
在同一个输入实例上,每次执行结果不尽相同,例如
N-皇后问题
概率算法运行不同次将会找到不同的正确解
找一给定合数的非平凡因子
每次运行的结果不尽相同,但确定算法每次运行结果必定相同
(2) 分析困难
要求有概率论,统计学和数论的知识;6. 本章约定
随机函数uniform,随机,均匀,独立
设a,b为实数,ab,
uniform(a, b) 返回x,a ≤ x b
② 设i,j为整数,i≤j,
uniform(i, j)=k, i ≤ k ≤ j
③ 设X是非空有限集,
uniform(X) ∈ X
;例1:设p是一个素数,a是一个整??满足1≤ap, a模除p的指数(index)是满足ai≡1(mod p)的最小正整数i。它等于集合X={aj mod p | j ≥ 1}的势,即i=|X|。
例如,2模除31的指数等于5:25 mod 31=1,
X={21 mod 31, 22 mod 31, 23 mod 31, 24 mod 31, 25 mod 31};
5模除31的指数是3,即53 mod 31 = 1,
3模除31的指数是30。
由费马(Fermat)定理(ap-1 ≡1(mod p))可知,a模p的指数总是恰好整除p-1.
例如,设p=31,若a=2,则30÷5=6;
若a=5,则30÷3=10。
因此,X中的j至多为p-1,由此可得一种在X中随机,均匀和独立地取一个元素的算法。;ModularExponent(a, j, p){
//求方幂模s=aj mod p, 注意先求aj可能会溢出
s ← 1;
while j0 do {
if (j is odd) s ← s·a 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中随机取一元素
};伪随机数发生器
在实用中不可能有真正的随机数发生器,多数情况下是用伪随机数发生器代替。
大多数伪随机数发生器是基于一对函数:
S: X → X, 这里X足够大,它是种子的值域
R: X → Y, Y是伪随机数函数的值域
使用S获得种子序列:x0=g, xi=S(xi-1), i0
然后使用R获得伪随机序列:yi=R(xi), i ≥ 0
该序列必然是周期性的,但只要S和R选的合适,该周期长度会非常长。
TC中可用rand()和srand(time), 用GNU C更好;基本特征
随机决策
在同一实例上执行两次其结果可能不同
在同一实例上执行两次的时间亦可能不
文档评论(0)