算法设计与分析,前六章复习PPT
合集下载
算法设计与分析 ppt课件

相容的(兼容的).
活动安排问题是要求在所给的活动集合中选出最大
相容活动子集.
ppt课件
3
算法设计与分析 > 贪心算法
[直观想法]
在安排时应该将结束时间早的活动尽量往 前安排,好给后面的活动安排留出更多的 空间,从而达到安排最多活动的目标。
贪心准则应当是:在未安排的活动中挑选 结束时间最早的活动安排。
4.1 活动安排问题
有n个活动E={1,2,…,n},其中每个活动要使用同一
资源,同一时间只允许一个活动使用该资源.
每个活动i都有一个开始时间si,和一个结束时间fi . 如果选择活动i,则它在时间区间[si, fi )内占用该资 源;若区间 [si, fi ) 与[sj, fj )不相交, 则称活动i与j是
8
算法设计与分析 > 贪心算法
背包问题
给定n种物品和一个背包。物品i的重量是wi ,其价值为vi,背包的容量为C。应如何选择装 入背包的物品,使得装入背包中物品的总价值 最大?
在选择物品i装入背包时,可以选择物品i的 部分,而不一定要全部装入背包,1≤i≤n。 不允许重复装入。
ppt课件
9
算法设计与分析 > 贪心算法
ppt课件
10
算法设计与分析 > 贪心算法
贪心选择:
每次捡最轻的物品装;
只考虑到多装些物品,但由 于单位价值未必高,总价值 不能达到最大;
每次选择的价值最大,但同时
每次捡价值最大的装;也的可物能品占少用 ,了未较必大能的够空达间到,总装价
值最大
每次装包时既考虑物品的重量又考虑物品的
价值,也就是说每次捡单位价值最大的装。
因为Ak中的活动都是不相交的,aj是Ak中结束时间最早的 活动,而fm≤fj ,所以Ak′中的活动都是不相交的。
活动安排问题是要求在所给的活动集合中选出最大
相容活动子集.
ppt课件
3
算法设计与分析 > 贪心算法
[直观想法]
在安排时应该将结束时间早的活动尽量往 前安排,好给后面的活动安排留出更多的 空间,从而达到安排最多活动的目标。
贪心准则应当是:在未安排的活动中挑选 结束时间最早的活动安排。
4.1 活动安排问题
有n个活动E={1,2,…,n},其中每个活动要使用同一
资源,同一时间只允许一个活动使用该资源.
每个活动i都有一个开始时间si,和一个结束时间fi . 如果选择活动i,则它在时间区间[si, fi )内占用该资 源;若区间 [si, fi ) 与[sj, fj )不相交, 则称活动i与j是
8
算法设计与分析 > 贪心算法
背包问题
给定n种物品和一个背包。物品i的重量是wi ,其价值为vi,背包的容量为C。应如何选择装 入背包的物品,使得装入背包中物品的总价值 最大?
在选择物品i装入背包时,可以选择物品i的 部分,而不一定要全部装入背包,1≤i≤n。 不允许重复装入。
ppt课件
9
算法设计与分析 > 贪心算法
ppt课件
10
算法设计与分析 > 贪心算法
贪心选择:
每次捡最轻的物品装;
只考虑到多装些物品,但由 于单位价值未必高,总价值 不能达到最大;
每次选择的价值最大,但同时
每次捡价值最大的装;也的可物能品占少用 ,了未较必大能的够空达间到,总装价
值最大
每次装包时既考虑物品的重量又考虑物品的
价值,也就是说每次捡单位价值最大的装。
因为Ak中的活动都是不相交的,aj是Ak中结束时间最早的 活动,而fm≤fj ,所以Ak′中的活动都是不相交的。
《算法设计与分析》课件

常见的贪心算法包括最小生成树算法 、Prim算法、Dijkstra算法和拓扑排 序等。
贪心算法的时间复杂度和空间复杂度 通常都比较优秀,但在某些情况下可 能需要额外的空间来保存状态。
动态规划
常见的动态规划算法包括斐波那契数列、背包 问题、最长公共子序列和矩阵链乘法等。
动态规划的时间复杂度和空间复杂度通常较高,但通 过优化状态转移方程和状态空间可以显著提高效率。
动态规划算法的时间和空间复杂度分析
动态规划算法的时间复杂度通常为O(n^2),空间复杂度为O(n)。
04 经典问题与算法实现
排序问题
冒泡排序
通过重复地遍历待排序序列,比较相邻元素的大小,交换 位置,使得较大的元素逐渐往后移动,最终达到排序的目 的。
快速排序
采用分治策略,选取一个基准元素,将比基准元素小的元 素移到其左边,比基准元素大的元素移到其右边,然后对 左右两边的子序列递归进行此操作。
动态规划是一种通过将原问题分解为若干个子 问题,并从子问题的最优解推导出原问题的最 优解的算法设计方法。
动态规划的关键在于状态转移方程的建立和状态 空间的优化,以减少不必要的重复计算。
回溯算法
01
回溯算法是一种通过穷举所有可能情况来求解问题的算法设计方法。
02
常见的回溯算法包括排列组合、八皇后问题和图的着色问题等。
空间换时间 分治策略 贪心算法 动态规划
通过增加存储空间来减少计算时间,例如使用哈希表解决查找 问题。
将问题分解为若干个子问题,递归地解决子问题,最终合并子 问题的解以得到原问题的解。
在每一步选择中都采取当前状态下最好或最优(即最有利)的 选择,从而希望导致结果是最好或最优的。
通过将问题分解为相互重叠的子问题,并保存子问题的解,避 免重复计算,提高算法效率。
算法设计与分析ppt课件

}
if ( in ) x[i]= c / w[i];
} 13
算法设计与分析 > 贪心算法
0-1背包问题: 给定n种物品和一个背包。物品i的重量
是wi,其价值为vi,背包的容量为C。应如何 选择装入背包的物品,使得装入背包中物品 的总价值最大?
在选择装入背包的物品时,对每种物品 i只 有2种选择,即装入背包或不装入背包。不能 将物品i装入背包多次,也不能只装入部分的 物品i。
定理:考虑任意非空子问题Sk,令am是Sk中结束时间 最早的活动,则am在Sk的某个最大兼容活动子集中。
证明:令Ak是Sk的一个最大兼容活动子集,且aj是Ak中结 束时间最早的活动。
若aj=am,则证明am在Sk的某个最大兼容活动子集中。
若aj≠am,令集合 Ak Ak a jam ,即将Ak中的aj替换am
n
wi xi C
i 1
0 xi 1 (1 i n)
n
max vi xi i1
于是,背包问题归结为寻找一个满足约束条
件,并使目标函数达到最大的解向量X=(x1, x2, …, xn)。
10
算法设计与分析 > 贪心算法
贪心选择:
每次捡最轻的物品装;
只考虑到多装些物品,但由 于单位价值未必高,总价值 不能达到最大;
背包问题
给定n种物品和一个背包。物品i的重量是wi ,其价值为vi,背包的容量为C。应如何选择装 入背包的物品,使得装入背包中物品的总价值 最大?
在选择物品i装入背包时,可以选择物品i的 部分,而不一定要全部装入背包,1≤i≤n。 不允许重复装入。
9
算法设计与分析 > 贪心算法
设xi表示物品i装入背包的情况,根据问题的要求, 有如下约束条件和目标函数:
精品课件-算法设计与分析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,则原线性规划问题没有可行解,从而原线性规划问题无解。
计算机算法设计与分析总复习89页PPT

40、人类法律,事物有规律,这是不 容忽视 的。— —爱献 生
▪
26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
计算机算法设计与分析总复习
36、如果我们国家的法律中只有某种 神灵, 而不是 殚精竭 虑将神 灵揉进 宪法, 总体上 来说, 法律就 会更好 。—— 马克·吐 温 37、纲纪废弃之日,便是暴政兴起之 时。— —威·皮 物特
38、若是没有公众舆论的支持,法律 是丝毫 没有力 量的。 ——菲 力普斯 39、一个判例造出另一个判例,它们 迅速累 聚,进 而变成 法律。 ——心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
▪
28、知之者不如好之者,好之者不如乐之者。——孔子
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
89
▪
26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
计算机算法设计与分析总复习
36、如果我们国家的法律中只有某种 神灵, 而不是 殚精竭 虑将神 灵揉进 宪法, 总体上 来说, 法律就 会更好 。—— 马克·吐 温 37、纲纪废弃之日,便是暴政兴起之 时。— —威·皮 物特
38、若是没有公众舆论的支持,法律 是丝毫 没有力 量的。 ——菲 力普斯 39、一个判例造出另一个判例,它们 迅速累 聚,进 而变成 法律。 ——心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
▪
28、知之者不如好之者,好之者不如乐之者。——孔子
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
89
《算法设计与分析》课件

《算法设计与分析》PPT课件
本课程将介绍算法的设计与分析,包括排序算法、查找算法和动态规划算法。 通过掌握这些算法,您将能够解决各种复杂的问题。
课程介绍
课程目标和内容概述
掌握算法设计与分析的基本概念和方法,学 习不同类型的算法及其应用。
教学方法和要求
通过理论讲解、案例分析和实际编程练习, 提高算法设计与分析的能力。
2 背包问题的动态规划解法
学习如何使用动态规划算法解决背包问题,掌握求解最优解的方法。
总结和课程评价
总结
回顾本课程涉及的算法内容,并思考所学知识 的实际应用。
课程评价
对本课程的内容、教学方法和教师的表现进行 评价和反馈。
算法基础
1 算法概述和分类
了解算法的定义、特性和常见的分类方法,为后续学习打下基础。
2 时间复杂度和空间复杂度
学习如何评估算法的时间和空间效率,并选择最合适的算法。
排序算法
1
插入排序
2
学习插排序算法的思想和实现过程,
掌握其时间复杂度和适用范围。
3
冒泡排序
掌握冒泡排序算法的原理和实现方法, 了解其时间复杂度和应用场景。
快速排序
了解快速排序算法的原理和分治思想, 学会如何选择合适的划分策略。
查找算法
顺序查找
掌握顺序查找算法的基本思想和实现过程,了 解其时间复杂度和使用场景。
二分查找
学习二分查找算法的原理和应用,了解其时间 复杂度和适用条件。
动态规划算法
1 原理和应用举例
了解动态规划算法的核心原理,并通过实例了解其在解决复杂问题时的应用。
本课程将介绍算法的设计与分析,包括排序算法、查找算法和动态规划算法。 通过掌握这些算法,您将能够解决各种复杂的问题。
课程介绍
课程目标和内容概述
掌握算法设计与分析的基本概念和方法,学 习不同类型的算法及其应用。
教学方法和要求
通过理论讲解、案例分析和实际编程练习, 提高算法设计与分析的能力。
2 背包问题的动态规划解法
学习如何使用动态规划算法解决背包问题,掌握求解最优解的方法。
总结和课程评价
总结
回顾本课程涉及的算法内容,并思考所学知识 的实际应用。
课程评价
对本课程的内容、教学方法和教师的表现进行 评价和反馈。
算法基础
1 算法概述和分类
了解算法的定义、特性和常见的分类方法,为后续学习打下基础。
2 时间复杂度和空间复杂度
学习如何评估算法的时间和空间效率,并选择最合适的算法。
排序算法
1
插入排序
2
学习插排序算法的思想和实现过程,
掌握其时间复杂度和适用范围。
3
冒泡排序
掌握冒泡排序算法的原理和实现方法, 了解其时间复杂度和应用场景。
快速排序
了解快速排序算法的原理和分治思想, 学会如何选择合适的划分策略。
查找算法
顺序查找
掌握顺序查找算法的基本思想和实现过程,了 解其时间复杂度和使用场景。
二分查找
学习二分查找算法的原理和应用,了解其时间 复杂度和适用条件。
动态规划算法
1 原理和应用举例
了解动态规划算法的核心原理,并通过实例了解其在解决复杂问题时的应用。
算法设计与分析 ppt

算法设计与分析 >目录
第一章 算法概述 第二章 递归与分治策略 第三章 动态规划 第四章 贪心算法 第五章 回朔法 第六章 分支限界法 第七章 随机化算法
1
算法设计与分析 >第一章 目录
1.1 算法与程序 1.2 算法复杂度分析 1.3 NP完全性理论
2
算法设计与分析>算>法算概法述概述
1.1 算法与程序 1 算法定义及其特性
A
是
否
条件成立?
条件成立?
是
否
B
A
B
A
C
14
算法设计与分>析算>法算概法述概述
5. 算法分类
从解法上 数值型算法:算法中的基本运算为算术运算. 非数值型算法:算法中的基本运算为逻辑运算.
从处理方式上 串行算法:串行计算机上执行的算法. 并行算法:并行计算机上执行的算法.
本课程主要介绍非数值型的串行算法.
如果存在一个函数 ~T(n)使得当n ,有
(T(n) - ~T(n)) / T(n)0
称 ~T(n)是T(n)当 n 时的渐进性态 或 渐进复杂性
27
算法设计与分>>析算算法>法算复概法杂述概性分述析 >渐进性态
在数学上,T(n)与 ~T(有n)相同的最高阶项.可取 为~T(略n去) T(n)的低阶项后剩余的主项. 例如 T(n)=3n2+4nlogn+7, 则 ~T(n) 可以是3n2 当n充分大时用 ~T(n)代替T(n)作为算法复杂性的度量, 以简化分析 比较两个算法时,如果他们的阶不同,就可分出效率高低 。故此时只需关心 ~T最(n高) 限的阶即可。可忽略最高项系 数或低阶项。
4
第一章 算法概述 第二章 递归与分治策略 第三章 动态规划 第四章 贪心算法 第五章 回朔法 第六章 分支限界法 第七章 随机化算法
1
算法设计与分析 >第一章 目录
1.1 算法与程序 1.2 算法复杂度分析 1.3 NP完全性理论
2
算法设计与分析>算>法算概法述概述
1.1 算法与程序 1 算法定义及其特性
A
是
否
条件成立?
条件成立?
是
否
B
A
B
A
C
14
算法设计与分>析算>法算概法述概述
5. 算法分类
从解法上 数值型算法:算法中的基本运算为算术运算. 非数值型算法:算法中的基本运算为逻辑运算.
从处理方式上 串行算法:串行计算机上执行的算法. 并行算法:并行计算机上执行的算法.
本课程主要介绍非数值型的串行算法.
如果存在一个函数 ~T(n)使得当n ,有
(T(n) - ~T(n)) / T(n)0
称 ~T(n)是T(n)当 n 时的渐进性态 或 渐进复杂性
27
算法设计与分>>析算算法>法算复概法杂述概性分述析 >渐进性态
在数学上,T(n)与 ~T(有n)相同的最高阶项.可取 为~T(略n去) T(n)的低阶项后剩余的主项. 例如 T(n)=3n2+4nlogn+7, 则 ~T(n) 可以是3n2 当n充分大时用 ~T(n)代替T(n)作为算法复杂性的度量, 以简化分析 比较两个算法时,如果他们的阶不同,就可分出效率高低 。故此时只需关心 ~T最(n高) 限的阶即可。可忽略最高项系 数或低阶项。
4
算法设计与分析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) 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 算法的时间复杂度概念 – 频率计数:一条语句或一种运算在算法(或程序)体 中的执行次数。 – 计算时间的渐近表示
• 上界函数 • 下界函数 • 平均界函数
第一章 主要内容
• 计算时间的渐近表示:假设算法的计算时间为
f(n),数量级限界函数为g(n)
– n是输入或输出规模的某种测度。 – f(n)表示算法“实际”执行时间—与机器及语言 有关。 – g(n)是形式简单的函数,如nm,logn,2n,n!等。 是事前分析中通过对计算时间或频率计数统计分 析所得的、与机器及语言无关的函数。
V1
V2
4 9 7 2 2 2 3
V3
6 5
V cost(4,9)=c(9,12)=45 V4
cost(4,10)=c(10,12)=2
6
cost(4,11)=c(11,12)=5
9
4 2 3
4
7
s
1
3
7
11 1 8 8 5
10
5 11 6
12
4 2
5 11
t
当 i=k-1 且 j∈Vk-1时,如果<j,t>∈E cost(i,j)=c(j,t) 如果<j,t> ∉ E cost(i,j)=∞
显然,满足约束条件的任一集合
一个可行解,使目标函数取最大值的可行解是最优解。
( x 1 , x 2 , x n )
是
第三章 贪心算法
• 背包问题贪心准则选取:用效益和容量的 比值作为量度标准(pi/wi)
Knapsack(ElemtypeW p[n], ElemtypeW C, int n) ElemtypeP w[n], float y[n], //p[n]和w[n]分别含有按p[i]/w[i],p[i+1]/w[i+1]排序的n件物品 的效益值和容量。M是背包的容量大小,而y[n]是解向量//
第四章 动态规划算法 • 最优性原理
– 在多阶段决策过程的每一阶段,都可能有多种可 供选择的决策,但必须从中选取一种决策。一旦 各个阶段的决策选定之后,就构成了解决这一问 题的一个决策序列,决策序列不同,所导致的问 题的结果也不同。动态规划的目标就是要在所有 容许选择的决策序列中选取一个会获得问题最优 解的决策序列,即最优决策序列。 – 最优性原理:过程的最优决策序列具有如下性质: 无论过程的初始状态和初始决策是什么,其余的 决策都必须相对于初始决策所产生的状态构成一 个最优决策序列。
• 分治法的求解流程
– – – –
• 分治法的适用条件
第二章主要内容
• 二分检索算法:递归形式的算法 int binarySearch( a, low, high, e) int mid ; if(low < high) { mid = (low + high)/2; if(a[mid] == e) return mid+1; else if (a[mid] < e) binarySearch(a,mid+1, high, e); else binarySearch(a,low, mid-1, e); } return -1;
算法设计与分析 复习课
考试题型
• • • • • 填空题 15分 判断题 10分 简答题 25分 计算题 20分 算法设计题 30分
第一章 主要内容
• 算法的概念
– 什么是算法? – 算法的特征? – 程序与算法的区别?
• 算法分析
– 算法的评价优劣 – 算法的时间复杂度分析
• 频率计数 • 计算时间的渐近表示:上界函数、下界函数、平均界函数
第一章 主要内容
• 上界函数
– 定义1 如果存在两个正常数c和n0,对于所有的n≥n0,有
|f(n)| ≤ c|g(n)| 则记作f(n) = Ο (g(n))
– 含义:
• 如果算法用n值不变的同一类数据在某台机器上运行时, 所用的时间总是小于|g(n)|的一个常数倍。所以g(n)是 计算时间f(n)的一个上界函数。 f(n) 数量级是g(n)。 • 试图求出最小的g(n),使得f(n) = Ο (g(n))。
– 对于一个具体的问题,如何知道是否可用贪心 算法解决此问题,以及能否得到问题的最优解? 这个问题很难给予肯定的回答。
– 但是,从许多可以用贪心算法求解的问题中看 到这类问题一般具有两个重要的性质:贪心选 择性质和最优子结构性质。
第三章 贪心算法
• 贪心选择性质
– 对于一个具体问题,要确定它是否具有贪心选 择的性质,必须证明每一步所作的贪心选择最 终能够导致问题的最优解。
第四章 动态规划算法 • 动态规划算法的两种处理方法
(1)向前处理法:从最后阶段开始,以逐步 向前递推的方式列出求前一阶段决策值的 递推关系式,即根据xi+1,…,xn的那些最优 决策序列来列出求取xi决策值的关系式,即: xi=f(xi+1,xi+2,…,xn) (2)向后处理法:根据x1,…,xi-1的那些最 优决策序列列出求xi的递推关系式。即: xi=f(x1,x2,…,xi-1) .
第二章主要内容
• 二分检索算法时间复杂度分析
–成功/不成功检索的最好情况 –成功/不成功检索的最坏情况 –成功/不成功检索的平均情况
总结 成功检索 不成功检索 最好 平均 最坏 最好 平均 最坏 Θ(1) Θ(logn) Θ(logn) Θ(logn) Θ(logn) Θ(logn)
第二章 主要内容:找最大最小元素
第一章 主要内容
• 平均界函数
– 定义3 如果存在正常数c1,c2和n0,对于所有的 n≥n0,有 c1|g(n)| ≤|f(n)| ≤ c2|g(n)| 则记作 f ( n ) ( g ( n )) – 含义:算法在最好和最坏情况下的计算时间就一个常数 因子范围内而言是相同的。有f(n)=Ω(g(n)),又有 f(n)=Ο(g(n))
1 for i←1 to n 量度标准 2 do y[i]←0; //将解向量初始化为0; 3 cu ← C; //cu是背包中剩余的空间; 4 for i←1 to n 5 do{ //依次考察下一个物品是否可以放入背包; 6 if w[i] > cu break ;//物品i无法全部放入背包, 退出for循环; 7 then y[i]←1; 8 cu ←cu - w[i]; 9 } 10 if i≤n 11 then y[i] ← cu/w[i]; //不能完全装入的物品的部分装入量
合并求解
第二章 主要内容:找最大最小元素 时间复杂度 n=1 T(n) = n=2 T( n/2 ) T( n/2 ) 2 n>2 • n是2的幂时(n=2k),化简上式 T(n)=2T(n/2) +2
与直接算法比较次数 2(n-1)相比,比较次 数减少了25%。
0 1
=2(2T(n/4) + 2) + 2 =… i k-1T(2) + 2 =2 1 i k 1 =2k-1+2k-2 =3n/2-2
第二章主要内容
• 分治法的基本思想
– 在问题输入规模很大时,无法直接求解,则将整个问 题分成若干个小问题后分而治之。 分解:将原问题分析为若干个相互独立,与原问题形 式相同的子问题。 求解:若子问题易解,则直接求解;否则继续分解, 直至子问题易解。 合并:合并已求解的子问题的解,得到原问题的解。 原问题可以分解为若干个子问题,子问题与原问题结 构相似,由子问题的解能够快速求出原问题的解
Procedure MAXMIN(i,j,fmax,fmin) 容易求解的 integer i,j;global n,A(1:n) 子问题 if (i==j) fmaxfminA(i) else if(i==j-1) { if A(i)<A(j) fmaxA(j);fminA(i) else fmaxA(i);fminA(j) } 递归调用 else mid[(i+j)/2] call MAXMIN(i,mid,gmax,gmin) call MAXMIN(mid+1,j,hmax,hmin) fmaxmax(gmax,hmax) fminmin(gmin,hmin) endcase End MAXMIN
第四章 动态规划算法
• 动态规划算法的一般步骤
(1)分析最优解的性质,找出最优子结构特征, 如果所求解问题的最优性原理成立,则说明用 动态规划方法有可能解决该问题。 (2) 而解决问题的关键在于获取各阶段间的 递推关系式------递归地定义最优值。 (3)以自底向上的方式逐步计算最优值。每 个子问题的最优值保存在分级决策表中,便于 在下一步进行更大子问题决策时引用,最后得 到最优决策序列。
第四章 动态规划算法 • 动态规划算法的适用条件 • 动态规划算法的一般步骤 • 动态规划算法的应用:多段图问题
第四章 动态规划算法 • 动态规划算法的适用条件
– 对于一个多阶段过程问题,应用动态规划算法 的前提 – 最优子结构性质:原问题的最优解包含了其子 问题的最优解。 – 子问题重叠性质:每次产生的子问题并不总是 新问题,有些子问题被反复计算多次。
第一章 主要内容
• 给定f(n)= amnm+…+a1n+a0,求f(n)的上界 函数、下界函数、平均界函数 • 给定f(n)=logn2,求f(n)的上界函数、下界函数、 平均界函数
第二章主要内容
• 分治法的基本思想、求解流程、适用条件 • 二分检索算法,时间复杂度分析 • 找最大最小值算法,时间复杂度分析
பைடு நூலகம்
• 最优子结构性质
– 当一个问题的最优解包含其子问题的最优解时, 称此问题具有最优子结构性质。
第三章 贪心算法
背包问题形式描述如下: 约束条件: w
1 i n i