中科大算法课件(新)1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
④ Sherwood算法 Sherwood算法总是给出正确的答案。 当某些确定算法解决一个特殊问题平均的时间比最坏时 间快得多时,我们可以使用Sherwood算法来减少,甚 至是消除好的和坏的实例之间的差别。
17
Ch.2 数字概率算法
这类算法主要用于找到一个数字问题的近似解
§2.1 π值计算
实验:将n根飞镖随机投向一正方形的靶子,计算落入此正方
算机中只能近似地表示
– 精确解存在但无法在可行的时间内求得
有时答案是以置信区间的形式给出的
15
§1.2 概率算法的分类
② Monte Carlo算法 (MC算法) 蒙特卡洛算法1945年由J. Von Neumann进行核武模拟提出 的。它是以概率和统计的理论与方法为基础的一种数值计算 方法,它是双重近似:一是用概率模型模拟近似的数值计算, 二是用伪随机数模拟真正的随机变量的样本。 这里我们指的MC算法是: 若问题只有1个正确的解,而无近 似解的可能时使用MC算法 例如,判定问题只有真或假两种可能性,没有近似解 因式分解,我们不能说某数几乎是一个因子 特点:MC算法总是给出一个答案,但该答案未必正确,成 功(即答案是正确的)的概率正比于算法执行的时间 缺点:一般不能有效地确定算法的答案是否正确
时,有时随机选择比耗时做最优选择更好,尤其 是当最优选择所花的时间大于随机选择的平均时 间的时侯
显然,概率算法只能是期望的时间更有效, 但它有可能遭受到最坏的可能性。
6
3. 期望时间和平均时间的区别
❖ 确定算法的平均执行时间 输入规模一定的所有输入实例是等概率出现时,算法 的平均执行时间。
❖ 概率算法的期望执行时间 反复解同一个输入实例所花的平均执行时间。
19
§2.1 π值计算
求π近似值的算法 Ex.1 若将y ← uniform(0, 1) 改为 y ← x, 则上 述的算法估计的值是什么?
20
§2.2 数字积分 (计算定积分的值)
Monte Carlo积分(但不是指我们定义的MC算法) 1、概率算法1
设f: [0, 1] → [0, 1]是一个连续函数,则由曲线y=f(x), x 轴, y轴和直线x=1围成的面积由下述积分给出:
14
§1.2 概率算法的分类
① 数字算法
随机性被最早用于求数字问题的近似解
例如,求一个系统中队列的平均长度的问题,确定算
法很难得到答案
概率算法获得的答案一般是近似的,但通常算法执行 的时间越长,精度就越高,误差就越小
使用的理由
– 现实世界中的问题在原理上可能就不存在精确解
例如,实验数据本身就是近似的,一个无理数在计
假设你如果已到达其中一处,就立即知道
该处是否为藏宝地点。你到达两处之一地
点及从其中一处到另一处的距离是5天的
行程。进一步假设有一条恶龙,每晚光顾
宝藏并从中拿走一部分财宝。假设你取宝
藏的方案有两种:
3
§1.1 引言
方案1. 花4天的时间计算出准确的藏宝地点,然 后出发寻宝,一旦出发不能重新计算
方案2. 有一个小精灵告诉你地图的秘密,但你 必须付给他报酬,相当于龙3晚上拿走的财宝
方案1:4天计算确定地址,行程5天,你得到的宝 藏价值为:x-9y
方案2:3y付给精灵,行程5天失去5y,你得到的 宝藏价值为:x-8y
方案3:投硬币决定先到一处,失败后到另一处(冒 险方案)
} 一次成功所得:x-5y,机会1/2
二次成功所得:x-10y,机会1/2 期望赢利:x-7.5y
5
2. 意义 该故事告诉我们:当一个算法面临某种选择
Prob 1.1.1 若忽略可能的冒险和出发寻宝的代 价,你是否接受小精灵的帮助?
显然,应该接受小精灵的帮助,因为你只需 给出3晚上被盗窃的财宝量,否则你将失去4晚被 盗财宝量。
但是,若冒险,你可能做得更好!
4
§1.1 引言
设x是你决定之前当日的宝藏价值,设y是恶龙每 晚盗走的宝藏价值,并设x>9y
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中随机,均匀和 独立地取一个元素的算法。
1
S 0 f (x)dx
向单位面积的正方形内投镖n次,落入阴影部分的镖的
数目为k,则
y
k S S k / n
1
n1
显然,只要n足够大 S k / n
1
x
21
§2.2 数字积分 (计算定积分的值)
1. 概率算法1
HitorMiss (f, n) {
k ← 0;
for i ← 1 to n do {
算法设计与分析
黄刘生
中国科学技术大学计算机系 国家高性能计算中心(合肥)
2008.8.19 1
第一部分 概率算法
2
Ch.1 绪论
地点 1
5天
地点
2
§1.1 引言
5天
5天
1. 故事:想象自己是神化故事的主人公,你
有一张不易懂的地图,上面描述了一处宝
你
藏的藏宝地点。经分析你能确定最有可能
的两个地点是藏宝地点,但二者相距甚远。
10
ቤተ መጻሕፍቲ ባይዱ
例1:设p是一个素数,a是一个整数满足1≤a<p, 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};
4
18
§2.1 π值计算
求π近似值的算法 为简单起见,只以上图的右上1/4象限为样本 Darts (n) { k ← 0; for i ← 1 to n do { x ← uniform(0, 1); y ← uniform(0, 1); // 随机产生点(x,y) if (x2 + y2 ≤ 1) then k++; //圆内 } return 4k/n; } 实验结果: π=3.141592654 n = 1000万: 3.140740, 3.142568 (2位精确) n = 1亿: 3.141691, 3.141363 (3位精确) n = 10亿: 3.141527, 3.141507 (4位精确)
② 8皇后问题 系统的方法放置皇后(回溯法)较合适,找出所有92个解 O(2n), 若只找92个其中的任何一个解可在线性时间内完成O(n)。 随机法:随机地放置若干皇后能够改进回溯法,特别是当n较 大时
③ 判断大整数是否为素数 确定算法无法在可行的时间内判断一个数百位十进制数是否素 数,否则密码就不安全。 概率算法将有所作为:若能接受一个任意小的错误的概率
11
ModularExponent(a, j, p){ //求方幂模s=aj mod p, 注意先求aj可能会溢出
s ← 1;
while j>0 do {
if (j is odd) s ← s·a mod p; a ← a2 mod p; j ← j div 2;
} return s; }
Draw (a, p) {
x ← uniform(0, 1);
y ← uniform(0, 1);
if y ≤ f(x) then k++;
}
return k/n;
}
1
Note: 0
1 x2 dx 是S/4的面积,∵ π =S, ∴
1
4
1 x2 dx
0
22
§2.2 数字积分 (计算定积分的值)
1. 概率算法1
因此,对概率算法可以讨论如下两种期望时间
① 平均的期望时间:所有输入实例上平均的期望执行时 间
② 最坏的期望时间:最坏的输入实例上的期望执行时间
7
4. 例子
① 快速排序中的随机划分 要求学生写一算法,由老师给出输入实例,按运行时间打分, 大部分学生均不敢用简单的划分,运行时间在1500-2600ms, 三个学生用概率的方法划分,运行时间平均为300ms。
E同x的2.n在值机及器精上度用。401 1 x2 dx 估计π值,给出不
Ex3. 设a, b, c和d是实数,且a ≤ b, c ≤ d, f:[a, b] → [c, d]是一个连续函数,写一概率算法计 算积分:
b
a f (x)dx
注意,函数的参数是a, b, c, d, n和f, 其中f用函 数指针实现,请选一连续函数做实验,并给出 实验结果。
8
5. 概率算法的特点
(1) 不可再现性
在同一个输入实例上,每次执行结果不尽相同,例 如
① N-皇后问题 概率算法运行不同次将会找到不同的正确解
② 找一给定合数的非平凡因子 每次运行的结果不尽相同,但确定算法每次运行结果必 定相同
(2) 分析困难
要求有概率论,统计学和数论的知识
9
6. 约定 随机函数uniform:随机,均匀,独立 ① 设a,b为实数,a<b, uniform(a, b) 返回x,a ≤ x <b ② 设i,j为整数,i≤j, uniform(i..j)=k, i ≤ k ≤ j ③ 设X是非空有限集, uniform(X) ∈ X
16
§1.2 概率算法的分类
③ Las Vegas算法 (LV算法) LV算法绝不返回错误的答案。 特点:获得的答案必定正确,但有时它仍根本就找不 到答案。 和MC算法一样,成功的概率亦随算法执行时间增加而增 加。无论输入何种实例,只要算法在该实例上运行足够 的次数,则算法失败的概率就任意小。
13
§1.2 概率算法的分类
1. 基本特征 随机决策 在同一实例上执行两次其结果可能不同 在同一实例上执行两次的时间亦可能不太相同
2. 分类 Numerical, Monte Carlo, Las Vegas, Sherwood. 很多人将所有概率算法(尤其是数字的概率算法) 称为Monte Carlo算法
b a
f (x)dx (b a) 1 n
n i 1
f (xi ),
a
xi
b
Crude (f, n, a, b) { sum ← 0; for i ← 1 to n do { x ← uniform(a, b); sum ← sum + f(x); } return (b-a)sum/n;
23
§2.2 数字积分 (计算定积分的值)
1. 概率算法1 *Ex4. 设ε,δ是(0,1)之间的常数,证明:
1
若I是 0 f (x)dx 的正确值,h是由HitorMiss算法返回的
值,则当n ≥ I(1-I)/ε2δ时有: Prob[|h-I| < ε] ≥ 1 – δ
上述的意义告诉我们:Prob[|h-I| ≥ ε] ≤δ, 即:当n ≥ I(1I)/ ε2δ时,算法的计算结果的绝对误差超过ε的概率不超 过δ,因此我们根据给定ε和δ可以确定算法迭代的次数
形的内切圆中的飞镖数目k。
假定飞镖击中方形靶子任一点的概率相等(用计算机模拟比任
一飞镖高手更能保证此假设成立)
设圆的半径为r,面积s1= πr2; 方靶面积s2=4r2 由等概率假设可知落入圆中的飞镖和正方形内的飞镖平均比
为:
k r2
n 4r2 4
由此知:
4k / n k n
解此问题时n可 用I (1切2I比) 雪 4夫12不 等(Q式I (1, I将) I14看) 作是数学期望。
24
§2.2 数字积分 (计算定积分的值)
2. 概率算法2
更有效的概率算法是: 在积分区间上随机均匀地产生点,求 出这些点上的函数值的算术平均值,再乘以区间的宽度:
// 在X中随机取一元素
j ← uniform(1..p-1);
return ModularExponent(a, j, p); // 在X中随机取一元素
}
12
伪随机数发生器 在实用中不可能有真正的随机数发生器,多数情况 下是用伪随机数发生器代替。 大多数伪随机数发生器是基于一对函数: S: X → X, 这里X足够大,它是种子的值域 R: X → Y, Y是伪随机数函数的值域 使用S获得种子序列:x0=g, xi=S(xi-1), i>0 然后使用R获得伪随机序列:yi=R(xi), i ≥ 0 该序列必然是周期性的,但只要S和R选的合适,该 周期长度会非常长。 TC中可用rand()和srand(time), 用GNU C更好
17
Ch.2 数字概率算法
这类算法主要用于找到一个数字问题的近似解
§2.1 π值计算
实验:将n根飞镖随机投向一正方形的靶子,计算落入此正方
算机中只能近似地表示
– 精确解存在但无法在可行的时间内求得
有时答案是以置信区间的形式给出的
15
§1.2 概率算法的分类
② Monte Carlo算法 (MC算法) 蒙特卡洛算法1945年由J. Von Neumann进行核武模拟提出 的。它是以概率和统计的理论与方法为基础的一种数值计算 方法,它是双重近似:一是用概率模型模拟近似的数值计算, 二是用伪随机数模拟真正的随机变量的样本。 这里我们指的MC算法是: 若问题只有1个正确的解,而无近 似解的可能时使用MC算法 例如,判定问题只有真或假两种可能性,没有近似解 因式分解,我们不能说某数几乎是一个因子 特点:MC算法总是给出一个答案,但该答案未必正确,成 功(即答案是正确的)的概率正比于算法执行的时间 缺点:一般不能有效地确定算法的答案是否正确
时,有时随机选择比耗时做最优选择更好,尤其 是当最优选择所花的时间大于随机选择的平均时 间的时侯
显然,概率算法只能是期望的时间更有效, 但它有可能遭受到最坏的可能性。
6
3. 期望时间和平均时间的区别
❖ 确定算法的平均执行时间 输入规模一定的所有输入实例是等概率出现时,算法 的平均执行时间。
❖ 概率算法的期望执行时间 反复解同一个输入实例所花的平均执行时间。
19
§2.1 π值计算
求π近似值的算法 Ex.1 若将y ← uniform(0, 1) 改为 y ← x, 则上 述的算法估计的值是什么?
20
§2.2 数字积分 (计算定积分的值)
Monte Carlo积分(但不是指我们定义的MC算法) 1、概率算法1
设f: [0, 1] → [0, 1]是一个连续函数,则由曲线y=f(x), x 轴, y轴和直线x=1围成的面积由下述积分给出:
14
§1.2 概率算法的分类
① 数字算法
随机性被最早用于求数字问题的近似解
例如,求一个系统中队列的平均长度的问题,确定算
法很难得到答案
概率算法获得的答案一般是近似的,但通常算法执行 的时间越长,精度就越高,误差就越小
使用的理由
– 现实世界中的问题在原理上可能就不存在精确解
例如,实验数据本身就是近似的,一个无理数在计
假设你如果已到达其中一处,就立即知道
该处是否为藏宝地点。你到达两处之一地
点及从其中一处到另一处的距离是5天的
行程。进一步假设有一条恶龙,每晚光顾
宝藏并从中拿走一部分财宝。假设你取宝
藏的方案有两种:
3
§1.1 引言
方案1. 花4天的时间计算出准确的藏宝地点,然 后出发寻宝,一旦出发不能重新计算
方案2. 有一个小精灵告诉你地图的秘密,但你 必须付给他报酬,相当于龙3晚上拿走的财宝
方案1:4天计算确定地址,行程5天,你得到的宝 藏价值为:x-9y
方案2:3y付给精灵,行程5天失去5y,你得到的 宝藏价值为:x-8y
方案3:投硬币决定先到一处,失败后到另一处(冒 险方案)
} 一次成功所得:x-5y,机会1/2
二次成功所得:x-10y,机会1/2 期望赢利:x-7.5y
5
2. 意义 该故事告诉我们:当一个算法面临某种选择
Prob 1.1.1 若忽略可能的冒险和出发寻宝的代 价,你是否接受小精灵的帮助?
显然,应该接受小精灵的帮助,因为你只需 给出3晚上被盗窃的财宝量,否则你将失去4晚被 盗财宝量。
但是,若冒险,你可能做得更好!
4
§1.1 引言
设x是你决定之前当日的宝藏价值,设y是恶龙每 晚盗走的宝藏价值,并设x>9y
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中随机,均匀和 独立地取一个元素的算法。
1
S 0 f (x)dx
向单位面积的正方形内投镖n次,落入阴影部分的镖的
数目为k,则
y
k S S k / n
1
n1
显然,只要n足够大 S k / n
1
x
21
§2.2 数字积分 (计算定积分的值)
1. 概率算法1
HitorMiss (f, n) {
k ← 0;
for i ← 1 to n do {
算法设计与分析
黄刘生
中国科学技术大学计算机系 国家高性能计算中心(合肥)
2008.8.19 1
第一部分 概率算法
2
Ch.1 绪论
地点 1
5天
地点
2
§1.1 引言
5天
5天
1. 故事:想象自己是神化故事的主人公,你
有一张不易懂的地图,上面描述了一处宝
你
藏的藏宝地点。经分析你能确定最有可能
的两个地点是藏宝地点,但二者相距甚远。
10
ቤተ መጻሕፍቲ ባይዱ
例1:设p是一个素数,a是一个整数满足1≤a<p, 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};
4
18
§2.1 π值计算
求π近似值的算法 为简单起见,只以上图的右上1/4象限为样本 Darts (n) { k ← 0; for i ← 1 to n do { x ← uniform(0, 1); y ← uniform(0, 1); // 随机产生点(x,y) if (x2 + y2 ≤ 1) then k++; //圆内 } return 4k/n; } 实验结果: π=3.141592654 n = 1000万: 3.140740, 3.142568 (2位精确) n = 1亿: 3.141691, 3.141363 (3位精确) n = 10亿: 3.141527, 3.141507 (4位精确)
② 8皇后问题 系统的方法放置皇后(回溯法)较合适,找出所有92个解 O(2n), 若只找92个其中的任何一个解可在线性时间内完成O(n)。 随机法:随机地放置若干皇后能够改进回溯法,特别是当n较 大时
③ 判断大整数是否为素数 确定算法无法在可行的时间内判断一个数百位十进制数是否素 数,否则密码就不安全。 概率算法将有所作为:若能接受一个任意小的错误的概率
11
ModularExponent(a, j, p){ //求方幂模s=aj mod p, 注意先求aj可能会溢出
s ← 1;
while j>0 do {
if (j is odd) s ← s·a mod p; a ← a2 mod p; j ← j div 2;
} return s; }
Draw (a, p) {
x ← uniform(0, 1);
y ← uniform(0, 1);
if y ≤ f(x) then k++;
}
return k/n;
}
1
Note: 0
1 x2 dx 是S/4的面积,∵ π =S, ∴
1
4
1 x2 dx
0
22
§2.2 数字积分 (计算定积分的值)
1. 概率算法1
因此,对概率算法可以讨论如下两种期望时间
① 平均的期望时间:所有输入实例上平均的期望执行时 间
② 最坏的期望时间:最坏的输入实例上的期望执行时间
7
4. 例子
① 快速排序中的随机划分 要求学生写一算法,由老师给出输入实例,按运行时间打分, 大部分学生均不敢用简单的划分,运行时间在1500-2600ms, 三个学生用概率的方法划分,运行时间平均为300ms。
E同x的2.n在值机及器精上度用。401 1 x2 dx 估计π值,给出不
Ex3. 设a, b, c和d是实数,且a ≤ b, c ≤ d, f:[a, b] → [c, d]是一个连续函数,写一概率算法计 算积分:
b
a f (x)dx
注意,函数的参数是a, b, c, d, n和f, 其中f用函 数指针实现,请选一连续函数做实验,并给出 实验结果。
8
5. 概率算法的特点
(1) 不可再现性
在同一个输入实例上,每次执行结果不尽相同,例 如
① N-皇后问题 概率算法运行不同次将会找到不同的正确解
② 找一给定合数的非平凡因子 每次运行的结果不尽相同,但确定算法每次运行结果必 定相同
(2) 分析困难
要求有概率论,统计学和数论的知识
9
6. 约定 随机函数uniform:随机,均匀,独立 ① 设a,b为实数,a<b, uniform(a, b) 返回x,a ≤ x <b ② 设i,j为整数,i≤j, uniform(i..j)=k, i ≤ k ≤ j ③ 设X是非空有限集, uniform(X) ∈ X
16
§1.2 概率算法的分类
③ Las Vegas算法 (LV算法) LV算法绝不返回错误的答案。 特点:获得的答案必定正确,但有时它仍根本就找不 到答案。 和MC算法一样,成功的概率亦随算法执行时间增加而增 加。无论输入何种实例,只要算法在该实例上运行足够 的次数,则算法失败的概率就任意小。
13
§1.2 概率算法的分类
1. 基本特征 随机决策 在同一实例上执行两次其结果可能不同 在同一实例上执行两次的时间亦可能不太相同
2. 分类 Numerical, Monte Carlo, Las Vegas, Sherwood. 很多人将所有概率算法(尤其是数字的概率算法) 称为Monte Carlo算法
b a
f (x)dx (b a) 1 n
n i 1
f (xi ),
a
xi
b
Crude (f, n, a, b) { sum ← 0; for i ← 1 to n do { x ← uniform(a, b); sum ← sum + f(x); } return (b-a)sum/n;
23
§2.2 数字积分 (计算定积分的值)
1. 概率算法1 *Ex4. 设ε,δ是(0,1)之间的常数,证明:
1
若I是 0 f (x)dx 的正确值,h是由HitorMiss算法返回的
值,则当n ≥ I(1-I)/ε2δ时有: Prob[|h-I| < ε] ≥ 1 – δ
上述的意义告诉我们:Prob[|h-I| ≥ ε] ≤δ, 即:当n ≥ I(1I)/ ε2δ时,算法的计算结果的绝对误差超过ε的概率不超 过δ,因此我们根据给定ε和δ可以确定算法迭代的次数
形的内切圆中的飞镖数目k。
假定飞镖击中方形靶子任一点的概率相等(用计算机模拟比任
一飞镖高手更能保证此假设成立)
设圆的半径为r,面积s1= πr2; 方靶面积s2=4r2 由等概率假设可知落入圆中的飞镖和正方形内的飞镖平均比
为:
k r2
n 4r2 4
由此知:
4k / n k n
解此问题时n可 用I (1切2I比) 雪 4夫12不 等(Q式I (1, I将) I14看) 作是数学期望。
24
§2.2 数字积分 (计算定积分的值)
2. 概率算法2
更有效的概率算法是: 在积分区间上随机均匀地产生点,求 出这些点上的函数值的算术平均值,再乘以区间的宽度:
// 在X中随机取一元素
j ← uniform(1..p-1);
return ModularExponent(a, j, p); // 在X中随机取一元素
}
12
伪随机数发生器 在实用中不可能有真正的随机数发生器,多数情况 下是用伪随机数发生器代替。 大多数伪随机数发生器是基于一对函数: S: X → X, 这里X足够大,它是种子的值域 R: X → Y, Y是伪随机数函数的值域 使用S获得种子序列:x0=g, xi=S(xi-1), i>0 然后使用R获得伪随机序列:yi=R(xi), i ≥ 0 该序列必然是周期性的,但只要S和R选的合适,该 周期长度会非常长。 TC中可用rand()和srand(time), 用GNU C更好