算法分析与设计PPT
合集下载
算法分析与设计回溯法ppt课件
问题求解的方法
硬性处理法
– 列出所有候选解,逐个检查是否为所需要的解 – 理论上,候选解数量有限,并且通过检查所有或部分
候选解能够得到所需解时,上述方法可行
– 实际中则很少使用,因为候选解的数量通常都非常大 (比如指数级,甚至是大数阶乘),即便采用最快的 计算机也只能解决规模较小的问题。
回溯或分枝限界法
这种以深度优先方式搜索问题的解的方法称为 回溯法
回溯法思想
第一步:为问题定义一个状态空间(state space)。这 个空间必须至少包含问题的一个解
第二步:组织状态空间以便它能被容易地搜索。典型 的组织方法是图或树
第三步:按深度优先的方法从开始结点进行搜索
– 开始结点是一个活结点(也是 E-结点:expansion node) – 如果能从当前的E-结点移动到一个新结点,那么这个新结点将
权衡:限界函数生成结点数和限界函数 本身所需的计算时间
效率分析
效率分析中应考虑的因素
– (1)—(3)与实例无关 – (4)与实例相关
有可能只生成O(n)个结点,有可能生成 几乎全部结点
最坏情况时间
– O(p(n)2n),p(n)为n的多项式 – O(q(n)n!),q(n)为n的多项式
Monte Carlo效率估计(1)
解空间
隐式约束描述了xi必须彼此相关的情况, 如0/1背包问题中的背包重量M
回溯法求解的经典问题(1) 8-皇后问题
在一个8*8棋盘上放置8个皇后,且使得每两个 之间都不能互相“攻击”,也就是使得每两个 都不能在同一行、同一列及同一条斜角线上。
8皇后问题的解可以表示为8-元组(x1,…,x8) , 其中其中xi是第i行皇后所在的列号。
回溯法求解的经典问题(2) 子集和数问题
《算法设计与分析》课件
常见的贪心算法包括最小生成树算法 、Prim算法、Dijkstra算法和拓扑排 序等。
贪心算法的时间复杂度和空间复杂度 通常都比较优秀,但在某些情况下可 能需要额外的空间来保存状态。
动态规划
常见的动态规划算法包括斐波那契数列、背包 问题、最长公共子序列和矩阵链乘法等。
动态规划的时间复杂度和空间复杂度通常较高,但通 过优化状态转移方程和状态空间可以显著提高效率。
动态规划算法的时间和空间复杂度分析
动态规划算法的时间复杂度通常为O(n^2),空间复杂度为O(n)。
04 经典问题与算法实现
排序问题
冒泡排序
通过重复地遍历待排序序列,比较相邻元素的大小,交换 位置,使得较大的元素逐渐往后移动,最终达到排序的目 的。
快速排序
采用分治策略,选取一个基准元素,将比基准元素小的元 素移到其左边,比基准元素大的元素移到其右边,然后对 左右两边的子序列递归进行此操作。
动态规划是一种通过将原问题分解为若干个子 问题,并从子问题的最优解推导出原问题的最 优解的算法设计方法。
动态规划的关键在于状态转移方程的建立和状态 空间的优化,以减少不必要的重复计算。
回溯算法
01
回溯算法是一种通过穷举所有可能情况来求解问题的算法设计方法。
02
常见的回溯算法包括排列组合、八皇后问题和图的着色问题等。
空间换时间 分治策略 贪心算法 动态规划
通过增加存储空间来减少计算时间,例如使用哈希表解决查找 问题。
将问题分解为若干个子问题,递归地解决子问题,最终合并子 问题的解以得到原问题的解。
在每一步选择中都采取当前状态下最好或最优(即最有利)的 选择,从而希望导致结果是最好或最优的。
通过将问题分解为相互重叠的子问题,并保存子问题的解,避 免重复计算,提高算法效率。
算法分析与设计 PPT
P且有限,将P中所有元素相乘,X表示积
Y=X+1。 对Y分析:d为Y的一个最小的且大于1的约数。
[欧几里德]证明
Y>1,且不要求d一定不等于Y,d一定存在。
d定为素数,否则存在一个约数z,使得z可整除Y。
又 z<d
d为Y的一个最小的约数
=>
矛盾
dP,且X是P中所有元素的积 => d是X的约数
即d可以同时整除X和Y=X+1。
输入 规则 输出
确定性 清晰、无歧义 有限性 指令执行次数、时间 特点:
执行时,不能包含任何主观的决定; 不能有类似直觉/创造力等因素。
例子:
人们日常生活中做菜的过程,可否用算法 描述?
✓ 如:“咸了”、“放点盐”、“再煮一会”。 ✓ 可否用计算机完成?
算法必须规定明确的量与时间; 不能含糊字眼。
参考书目
Aho, Hopcroft, Ullman. The Design and Analysis of Computer Algorithms. (1974版影印版,铁 道出版社)
Aho, Hopcroft, Ullman. 数据结构与算法(1983 年影印本,清华出版社)
Thomas H. Cormen 等4人. 算法导论(MIT第2 版), 高教出版社影印本
2) n1,m 2n ,对 2n12n1大小的地板显然成
立,现四分地板得到4个相同大小的地板。
也变成存在特殊 方格地板地板
特殊方格地板
[证毕]
归纳法证明举例-马的颜色
例子:[伪定理] 所有马都只有一种颜色。
证明:任何一个马的集合都只有一种颜色
=>所有马只有一种颜色。
设H为任何一个马的集合,对H中马数量n归纳:
Y=X+1。 对Y分析:d为Y的一个最小的且大于1的约数。
[欧几里德]证明
Y>1,且不要求d一定不等于Y,d一定存在。
d定为素数,否则存在一个约数z,使得z可整除Y。
又 z<d
d为Y的一个最小的约数
=>
矛盾
dP,且X是P中所有元素的积 => d是X的约数
即d可以同时整除X和Y=X+1。
输入 规则 输出
确定性 清晰、无歧义 有限性 指令执行次数、时间 特点:
执行时,不能包含任何主观的决定; 不能有类似直觉/创造力等因素。
例子:
人们日常生活中做菜的过程,可否用算法 描述?
✓ 如:“咸了”、“放点盐”、“再煮一会”。 ✓ 可否用计算机完成?
算法必须规定明确的量与时间; 不能含糊字眼。
参考书目
Aho, Hopcroft, Ullman. The Design and Analysis of Computer Algorithms. (1974版影印版,铁 道出版社)
Aho, Hopcroft, Ullman. 数据结构与算法(1983 年影印本,清华出版社)
Thomas H. Cormen 等4人. 算法导论(MIT第2 版), 高教出版社影印本
2) n1,m 2n ,对 2n12n1大小的地板显然成
立,现四分地板得到4个相同大小的地板。
也变成存在特殊 方格地板地板
特殊方格地板
[证毕]
归纳法证明举例-马的颜色
例子:[伪定理] 所有马都只有一种颜色。
证明:任何一个马的集合都只有一种颜色
=>所有马只有一种颜色。
设H为任何一个马的集合,对H中马数量n归纳:
算法设计与分析PPT课件
bestw = cw
cw = cw-w[i]}来自i++
else
}
{20/2/1进/3/入9 右子树
授课:} XXX
13
◆ 12.10 n个雇员被分配做n件工作,分配第i 个人做第j件工作的代价为c[i,j],其中 c[i,j]>=0,1<=i,j<=n,设计一个回溯算法 找出一种分配使得总代价最少。
2021/3/9
授课:XXX
8
每一条连接左边顶点和右边顶点的边都有一个对应的权值代表他们的缘 分值(用二维数组w[i][j]来表示),如果某一对男女因为射程或中间有人 的限制而不可能成为一对,那么相当于把他们之间的边的权值设为负无 穷。
最大权完全匹配Kuhn-Munkras(KM)算法
如果所有满足A[i]+B[j]=w[i][j](A[i]和B[i]分别为左边节点i和右边节点j的 顶标值)的边组成的导出子图中存在一个完全匹配,那么这个完全匹配肯
2021/3/9
授课:XXX
11
2021/3/9
授课:XXX
12
r = r-w[i]
x[i] = 0
While (true) { While(i<=n && cw+w [i]<=w) // 进入左子树
i++ } While (cw+r<=bestw) { //剪枝回溯
{
i--
r = r-w[i]
。 定就是原图中的最大权匹配
2021/3/9
授课:XXX
9
◆ 算法步骤: (1)初始化可行顶标的值
初始满足每条边A[i]+B[j]>=w[i,j]
并行算法的设计与分析课件
2.3 分治策略
n设计思想
• 将原问题划分成若干个相同的子问题分而治之,若子问题仍然
较大,则可以反复递归应用分治策略处理这些子问题,直至子 问题易求解。
n求解步骤
• 将输入划分成若干个规模相等的子问题; • 同时(并行地)递归求解这些子问题; • 并行地归并子问题的解成为原问题的解。
n示例
• SIMD-SM模型上的FFT递归算法
Parallel Algorithms 3 / Ch2
2.1 平衡树方法
n算法2.1 SIMD-SM上求最大值算法
Begin for k=m-1 to 0 do for j=2k to 2k+1-1 par-do A[j]=max{A[2j], A[2j+1]} end for end for
end
时间分析 t(n)=m×O(1)=O(logn) p(n)=n/2 c(n)=O(nlogn) 非成本最优
2023/10/19
Y.Xu Copyright
USTC
Parallel Algorithms 4 / Ch2
2.1 平衡树方法
前缀和
n 问题定义
n个元素{x1,x2,…,xn},前缀和是n个部分和: Si=x1*x2*…*xi, 1≤i≤n 这里*可以是+或×
for j=1 to n/2h par-do B[h,j]=B[h-1,2j-1]*B[h-1,2j]
end for end for
时间分析:
(3)for h=logn to 0 do //反向遍历
for j=1 to n/2h par-do (i) if j=even then //该结点为其父结点的右儿子 C[h,j]=C[h+1,j/2]
精品课件-算法设计与分析PPT课件
19
Bland提出避免循环的一个简单易行的方法。Bland提出在单纯形算法迭代中,按照下面的2个简单规则就可以避免循环。规则1:设 ,取xe为入基变量。规则2:设 取xk为离基变量。算法leave(col)已经按照规则2选取离基变量。选取入基变量的算法enter(objrow) 中只要加一个break语句即可。
4
这个问题的解为 (x1,x2,x3,x4) = (0,3.5,4.5,1);最优值为16。
5
8.1.2 线性规划基本定理
约束条件(8.2)-(8.5)中n个约束以等号满足的可行解称为线性规划问题的基本可行解。若n>m,则基本可行解中至少有n-m个分量为0,也就是说,基本可行解中最多有m个分量非零。线性规划基本定理:如果线性规划问题有最优解,则必有一基本可行最优解。上述定理的重要意义在于,它把一个最优化问题转化为一个组合问题,即在(8.2) -(8.5)式的m+n个约束条件中,确定最优解应满足其中哪n个约束条件的问题。由此可知,只要对各种不同的组合进行测试,并比较每种情况下的目标函数值,直到找到最优解。Dantzig于1948年提出了线性规划问题的单纯形算法。单纯形算法的特点是:1)只对约束条件的若干组合进行测试,测试的每一步都使目标函数的值增加;2)一般经过不大于m或n次迭代就可求得最优解。
16
为了进一步构造标准型约束,还需要引入m个人工变量,记为zi。至此,原问题已经变换为等价的约束标准型线性规划问题。对极小化线性规划问题,只要将目标函数乘以-1即可化为等价的极大化线性规划问题。
17
8.1.5 一般线性规划问题的2阶段单纯形算法
引入人工变量后的线性规划问题与原问题并不等价,除非所有zi都是0 。为了解决这个问题,在求解时必须分2个阶段进行。第一阶段用一个辅助目标函数 替代原来的目标函数。这个线性规划问题称为原线性规划问题所相应的辅助线性规划问题。对辅助线性规划问题用单纯形算法求解。如果原线性规划问题有可行解,则辅助线性规划问题就有最优解,且其最优值为0,即所有zi都为0。在辅助线性规划问题最后的单纯形表中,所有zi均为非基本变量。划掉所有zi相应的列,剩下的就是只含xi和yi的约束标准型线性规划问题了。单纯形算法第一阶段的任务就是构造一个初始基本可行解。单纯形算法第二阶段的目标是求解由第一阶段导出的问题。此时要用原来的目标函数进行求解。如果在辅助线性规划问题最后的单纯形表中, zi不全为0,则原线性规划问题没有可行解,从而原线性规划问题无解。
Bland提出避免循环的一个简单易行的方法。Bland提出在单纯形算法迭代中,按照下面的2个简单规则就可以避免循环。规则1:设 ,取xe为入基变量。规则2:设 取xk为离基变量。算法leave(col)已经按照规则2选取离基变量。选取入基变量的算法enter(objrow) 中只要加一个break语句即可。
4
这个问题的解为 (x1,x2,x3,x4) = (0,3.5,4.5,1);最优值为16。
5
8.1.2 线性规划基本定理
约束条件(8.2)-(8.5)中n个约束以等号满足的可行解称为线性规划问题的基本可行解。若n>m,则基本可行解中至少有n-m个分量为0,也就是说,基本可行解中最多有m个分量非零。线性规划基本定理:如果线性规划问题有最优解,则必有一基本可行最优解。上述定理的重要意义在于,它把一个最优化问题转化为一个组合问题,即在(8.2) -(8.5)式的m+n个约束条件中,确定最优解应满足其中哪n个约束条件的问题。由此可知,只要对各种不同的组合进行测试,并比较每种情况下的目标函数值,直到找到最优解。Dantzig于1948年提出了线性规划问题的单纯形算法。单纯形算法的特点是:1)只对约束条件的若干组合进行测试,测试的每一步都使目标函数的值增加;2)一般经过不大于m或n次迭代就可求得最优解。
16
为了进一步构造标准型约束,还需要引入m个人工变量,记为zi。至此,原问题已经变换为等价的约束标准型线性规划问题。对极小化线性规划问题,只要将目标函数乘以-1即可化为等价的极大化线性规划问题。
17
8.1.5 一般线性规划问题的2阶段单纯形算法
引入人工变量后的线性规划问题与原问题并不等价,除非所有zi都是0 。为了解决这个问题,在求解时必须分2个阶段进行。第一阶段用一个辅助目标函数 替代原来的目标函数。这个线性规划问题称为原线性规划问题所相应的辅助线性规划问题。对辅助线性规划问题用单纯形算法求解。如果原线性规划问题有可行解,则辅助线性规划问题就有最优解,且其最优值为0,即所有zi都为0。在辅助线性规划问题最后的单纯形表中,所有zi均为非基本变量。划掉所有zi相应的列,剩下的就是只含xi和yi的约束标准型线性规划问题了。单纯形算法第一阶段的任务就是构造一个初始基本可行解。单纯形算法第二阶段的目标是求解由第一阶段导出的问题。此时要用原来的目标函数进行求解。如果在辅助线性规划问题最后的单纯形表中, zi不全为0,则原线性规划问题没有可行解,从而原线性规划问题无解。
算法设计与分析PPT课件
数组
输出
1 0,0,2 1 2 3
2
1,1,2 0,0,2
123
,2,2
3 1,1,2 1 2 3 1 2 3
0,0,2
2
2,1,2 0,0,2 1 3 2
,2,2
3 2,1,2 1 3 2 1 3 2
0,0,2
2
2,1,2 0,0,2
123
1 1,0,2 2 1 3
层次 栈状态 (i, k, m)
个函数是双递归函数。 Ackerman函数A(n,m)定义如下:
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
Ackerman函数无法找到非递归的定义。
28
Ackerman函数
A(1,0)2
A(0,m)1
A(n,0)n2
m0 n2
A(n,m)A(A(n1,m),m1) n,m1
P n ( x ) ( ( ( a n x ( a n 1 ) ( a n 2 ) x a n 3 ) ) x a 1 ) x a 0
T(n)n
Horner(int a[n+1],real x) { int p= a[n];
for (i=1;i<=n;i++) p=p*x+a[n-i]; return p; }
算法复杂性是算法运行所需要的计算机资源的量, 需要时间资源的量称为时间复杂性,需要的空间资源的 量称为空间复杂性。这个量应该只依赖于算法要解的问 题的规模、算法的输入和算法本身的函数。如果分别用 n、I和A表示算法要解问题的规模、算法的输入和算法 本身,而且用C表示复杂性,那么,应该有C=F(n,I,A)。 一般把时间复杂性和空间复杂性分开,并分别用T和S来 表示,则有: T=T(n,I)和S=S(n,I) 。
算法设计与分析课件--随机化算法-舍伍德算法
❖时间复杂性与原快速排序算法的相同。
5
7.5 舍伍德算法 – 线性时间选择
线性时间选择:
给定线性序集中n个元素和一个整数k (1≤k≤n),要求找出 这n个元素中第k小的元素。
如将这n个元素依其线性序排列,排在第k个位置的元素 即为要找的元素。
线性选择的分治算法对基准元素的选择比较复杂:
先分组,然后取每一组的中位数,接下来再取中位数的 中位数,最后以该中位数为基准元素对n个元素进行划分。
如要消除上述的差异性,必须在基准元素的选择上多做 考虑。如在基准元素选择时引入随机性,即随机地选择 基准元素。
引入随机性的快速排序算法便为舍伍德算法,可以较高 概率地获得算法的平均性能。
4
7.5 舍伍德算法 – 随机快速排序
基于舍伍德方法的随机快速排序算法:
QUICK-SORT(A, low, high) if low < high
then pivotpos = RAND-PARTITION(A,low,high) //划分序列 QUICK-SORT(A,low,pivotpos-1) //对左区间递归排序 QUICK-SORT(A,pivotpos+1,high) //对右区间递归排序
RAND-PARTITION(A, low, high) RandomNumber rnd i = RandomNumber.random(high-low+1) + low SWAP(a[low], a[i]) j = PARTITION(A, low, high) return j
{
RandomNumber rnd;
for(int i=1;i<n;i++)
{
int j=rnd.Random(n-i)+i;
5
7.5 舍伍德算法 – 线性时间选择
线性时间选择:
给定线性序集中n个元素和一个整数k (1≤k≤n),要求找出 这n个元素中第k小的元素。
如将这n个元素依其线性序排列,排在第k个位置的元素 即为要找的元素。
线性选择的分治算法对基准元素的选择比较复杂:
先分组,然后取每一组的中位数,接下来再取中位数的 中位数,最后以该中位数为基准元素对n个元素进行划分。
如要消除上述的差异性,必须在基准元素的选择上多做 考虑。如在基准元素选择时引入随机性,即随机地选择 基准元素。
引入随机性的快速排序算法便为舍伍德算法,可以较高 概率地获得算法的平均性能。
4
7.5 舍伍德算法 – 随机快速排序
基于舍伍德方法的随机快速排序算法:
QUICK-SORT(A, low, high) if low < high
then pivotpos = RAND-PARTITION(A,low,high) //划分序列 QUICK-SORT(A,low,pivotpos-1) //对左区间递归排序 QUICK-SORT(A,pivotpos+1,high) //对右区间递归排序
RAND-PARTITION(A, low, high) RandomNumber rnd i = RandomNumber.random(high-low+1) + low SWAP(a[low], a[i]) j = PARTITION(A, low, high) return j
{
RandomNumber rnd;
for(int i=1;i<n;i++)
{
int j=rnd.Random(n-i)+i;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
王晓东. 算法设计与分析.(电子工业出版社) Sara Baase等. 计算机算法:设计与分析导论
(第3版),高教出版社影印本。
a
3
第一章 预备知识
学习要点:
理解算法的概念。 理解什么是程序,程序与算法的区别和内在联
系。 掌握算法的计算复杂性概念。 掌握算法渐近复杂性的数学表述。 掌握用C++语言描述算法的方法。
a
4
什么是算法?
算法(algorithm)
一个(由人或机器进行)关于某种运算规则的集合
输入 规则 输出
确定性 清晰、无歧义 有限性 指令执行次数、时间 特点:
执行时,不能包含任何主观的决定; 不能有类似直觉/创造力等因素。
a
5
例子:
人们日常生活中做菜的过程,可否用算法 描述?
✓ 如:“咸了”、“放点盐”、“再煮一会”。 ✓ 可否用计算机完成?
算法必须规定明确的量与时间; 不能含糊字眼。
a
6
当然不是所有算法都要明确的选择,有些 概率算法进行选择。
“随机”<>“随意”
有些问题没有实用算法(求解精确解,需 要几百年)。
✓ 去寻找{规则集} 近似算法
启发式算法
可以预测误差, 且误差足够小
误差无法控制, 但可预计误差大小
在可接受的时间内可以算出足够好的近似解
if n<2 then return n;
else return Fibonacci(na-1)+Fibonacci(n-2);
18
如何选择算法?
当解决一个问题时,存在几种算法可供选择,如 何决定哪个最好?
两种研究方法:
经验(Empirical):对各种算法编程,用不同实例实 验;
理论(Theoretical):以数学化的方式确定算法所需 要资源数与实例大小之间函数关系。
P 且有限,将P中所有元素相乘,X表示积
Y=X+1。 对Y分析:d为Y的一个最小的且大于1的约数。
a
9
[欧几里德]证明
Y>1,且不要求d一定不等于Y,d一定存在。
d定为素数,否则存在一个约数z,使得z可整除Y。
又 z<d
d为Y的一个最小的约数
=>
矛盾
dP,且X是P中所有元素的积 => d是X的约数
a
7
如何描述算法
通常,描述算法用类Pascal的结构化编程语言。
a
8
算法的证明技巧
反证法(proof by contradication)/间接证明(indirect proof): 为了证明命题的正确性,转而证明该命题的反 命题能导致矛盾。
例子: [欧几里德] 定理:存在无穷多个素数。 证明:假设P为有限素数集,那么显然 P 。
Aho, Hopcroft, Ullman. 数据结构与算法(1983 年影印本,清华出版社)
Thomas H. Cormen 等4人. 算法导论(MIT第2 版), 高教出版社影印本
潘金贵. 现代计算机常用数据结构和算法(南大 出版社),即Cormen等3人书第一版的翻译
a
2
参考书目
M. H. Alsuwaiyel. Algorithms: Design Techniques and Analysis(电子工业出版社影印 本,方世昌等译)
H1一种颜色 H2一种颜色
=>
H1和H2同种颜色
H具有同种颜色。?
a
16
归纳法证明举例-马的颜色
n 0 ,n 1 正确
必须 n 3 ,从2=>3,3=>4,…
不能1=>2。
a
17
归纳法证明举例-斐波纳契序列
例子:[Fibonacci序列] 每个月一对繁殖期的兔子会 产生一对后代,而这对后代2个月后又会繁殖。
{P为非空有限素数集}
XP中最大的元素;
repeat XX+1 until X是素数;
return d
a
通过上述证明d定为
素数且 dP
13
算法的证明技巧
归纳法(induction): 特殊=>一般法则。 例子:[铺砖定理] 铺砖问题总是有解的。
m×m个方格(m为2的幂)
方格位置随意
瓷砖材料形状为
即d可以同时整除X和Y=X+1。
对于 d0 ,可以同时整除连续整数是不可能。
否则 Ymo d d1
a
10
[欧几里德]证明
矛盾
因此,P为无限集合。 [证毕]
下面衍生出找素数的一个算法:
a
11
派生出算法
function Newprime(P:整数集)
{变量P为一非空有限的素数集} XP中所有元素的乘积; YX+1;
a
14
归纳法证明举例-铺砖定理
证明:不妨假设 m 2n 。
1)当n=0时,显然成立;n=1时,也显然成立;
2) n1,m 2n ,对 2n12n1大小的地板显然成
立,现四分地板得到4个相同大小的地板。
也变成存在特殊 方格地板地板
特殊方格地板
[证毕]
a
15
归纳法证明举例-马的颜色
例子:[伪定理] 所有马都只有一种颜色。
证明:任何一个马的集合都只有一种颜色
=>所有马只有一种颜色。
设H为任何一个马的集合,对H中马数量n归纳:
1)n=0,H 成立;n=1,显然成立。
2)设H中的马为h1, h2, … hn,由于任意n-1匹马的集合有唯一
的颜色,那么 H1
h2 h3 h4 … hn
H2 h1
h3 h4 … hn
对两个集合应用归纳假设:
d1; repeat dd+1 until d整除Y;
return d
通过上述证明d定为
素数且 dP
?
a
12
派生出算法
function Newprime(P:整数集)
XP中所有元素的乘积;
YX+1;
d1;
repeat dd+1 until d整除Y;
return d
简化
function DumpEuclid(P:整数集)
算法分析与设计
陶军 CS dept. 李文正楼北203 Tel: 83790366 juntao@
a
1
参考书目
Aho, Hopcroft, Ullman. The Design and Analysis of Computer Algorithms. (1974版影印版,铁 道出版社)
即 第1个月买了1对兔子;第2个月仍只有1对;第3 个月有2对…
依此类 f00; f11
fnfn1fn2, n2
序列以0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
Fibonacci序列的算法:
Function Fibonacci(n)
(第3版),高教出版社影印本。
a
3
第一章 预备知识
学习要点:
理解算法的概念。 理解什么是程序,程序与算法的区别和内在联
系。 掌握算法的计算复杂性概念。 掌握算法渐近复杂性的数学表述。 掌握用C++语言描述算法的方法。
a
4
什么是算法?
算法(algorithm)
一个(由人或机器进行)关于某种运算规则的集合
输入 规则 输出
确定性 清晰、无歧义 有限性 指令执行次数、时间 特点:
执行时,不能包含任何主观的决定; 不能有类似直觉/创造力等因素。
a
5
例子:
人们日常生活中做菜的过程,可否用算法 描述?
✓ 如:“咸了”、“放点盐”、“再煮一会”。 ✓ 可否用计算机完成?
算法必须规定明确的量与时间; 不能含糊字眼。
a
6
当然不是所有算法都要明确的选择,有些 概率算法进行选择。
“随机”<>“随意”
有些问题没有实用算法(求解精确解,需 要几百年)。
✓ 去寻找{规则集} 近似算法
启发式算法
可以预测误差, 且误差足够小
误差无法控制, 但可预计误差大小
在可接受的时间内可以算出足够好的近似解
if n<2 then return n;
else return Fibonacci(na-1)+Fibonacci(n-2);
18
如何选择算法?
当解决一个问题时,存在几种算法可供选择,如 何决定哪个最好?
两种研究方法:
经验(Empirical):对各种算法编程,用不同实例实 验;
理论(Theoretical):以数学化的方式确定算法所需 要资源数与实例大小之间函数关系。
P 且有限,将P中所有元素相乘,X表示积
Y=X+1。 对Y分析:d为Y的一个最小的且大于1的约数。
a
9
[欧几里德]证明
Y>1,且不要求d一定不等于Y,d一定存在。
d定为素数,否则存在一个约数z,使得z可整除Y。
又 z<d
d为Y的一个最小的约数
=>
矛盾
dP,且X是P中所有元素的积 => d是X的约数
a
7
如何描述算法
通常,描述算法用类Pascal的结构化编程语言。
a
8
算法的证明技巧
反证法(proof by contradication)/间接证明(indirect proof): 为了证明命题的正确性,转而证明该命题的反 命题能导致矛盾。
例子: [欧几里德] 定理:存在无穷多个素数。 证明:假设P为有限素数集,那么显然 P 。
Aho, Hopcroft, Ullman. 数据结构与算法(1983 年影印本,清华出版社)
Thomas H. Cormen 等4人. 算法导论(MIT第2 版), 高教出版社影印本
潘金贵. 现代计算机常用数据结构和算法(南大 出版社),即Cormen等3人书第一版的翻译
a
2
参考书目
M. H. Alsuwaiyel. Algorithms: Design Techniques and Analysis(电子工业出版社影印 本,方世昌等译)
H1一种颜色 H2一种颜色
=>
H1和H2同种颜色
H具有同种颜色。?
a
16
归纳法证明举例-马的颜色
n 0 ,n 1 正确
必须 n 3 ,从2=>3,3=>4,…
不能1=>2。
a
17
归纳法证明举例-斐波纳契序列
例子:[Fibonacci序列] 每个月一对繁殖期的兔子会 产生一对后代,而这对后代2个月后又会繁殖。
{P为非空有限素数集}
XP中最大的元素;
repeat XX+1 until X是素数;
return d
a
通过上述证明d定为
素数且 dP
13
算法的证明技巧
归纳法(induction): 特殊=>一般法则。 例子:[铺砖定理] 铺砖问题总是有解的。
m×m个方格(m为2的幂)
方格位置随意
瓷砖材料形状为
即d可以同时整除X和Y=X+1。
对于 d0 ,可以同时整除连续整数是不可能。
否则 Ymo d d1
a
10
[欧几里德]证明
矛盾
因此,P为无限集合。 [证毕]
下面衍生出找素数的一个算法:
a
11
派生出算法
function Newprime(P:整数集)
{变量P为一非空有限的素数集} XP中所有元素的乘积; YX+1;
a
14
归纳法证明举例-铺砖定理
证明:不妨假设 m 2n 。
1)当n=0时,显然成立;n=1时,也显然成立;
2) n1,m 2n ,对 2n12n1大小的地板显然成
立,现四分地板得到4个相同大小的地板。
也变成存在特殊 方格地板地板
特殊方格地板
[证毕]
a
15
归纳法证明举例-马的颜色
例子:[伪定理] 所有马都只有一种颜色。
证明:任何一个马的集合都只有一种颜色
=>所有马只有一种颜色。
设H为任何一个马的集合,对H中马数量n归纳:
1)n=0,H 成立;n=1,显然成立。
2)设H中的马为h1, h2, … hn,由于任意n-1匹马的集合有唯一
的颜色,那么 H1
h2 h3 h4 … hn
H2 h1
h3 h4 … hn
对两个集合应用归纳假设:
d1; repeat dd+1 until d整除Y;
return d
通过上述证明d定为
素数且 dP
?
a
12
派生出算法
function Newprime(P:整数集)
XP中所有元素的乘积;
YX+1;
d1;
repeat dd+1 until d整除Y;
return d
简化
function DumpEuclid(P:整数集)
算法分析与设计
陶军 CS dept. 李文正楼北203 Tel: 83790366 juntao@
a
1
参考书目
Aho, Hopcroft, Ullman. The Design and Analysis of Computer Algorithms. (1974版影印版,铁 道出版社)
即 第1个月买了1对兔子;第2个月仍只有1对;第3 个月有2对…
依此类 f00; f11
fnfn1fn2, n2
序列以0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
Fibonacci序列的算法:
Function Fibonacci(n)