收藏 分享(赏)

武汉理工大学期末考试算法试卷复习课.ppt

上传人:kpmy5893 文档编号:6347960 上传时间:2019-04-09 格式:PPT 页数:41 大小:323KB
下载 相关 举报
武汉理工大学期末考试算法试卷复习课.ppt_第1页
第1页 / 共41页
武汉理工大学期末考试算法试卷复习课.ppt_第2页
第2页 / 共41页
武汉理工大学期末考试算法试卷复习课.ppt_第3页
第3页 / 共41页
武汉理工大学期末考试算法试卷复习课.ppt_第4页
第4页 / 共41页
武汉理工大学期末考试算法试卷复习课.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、算法设计与分析 复习课,考试题型,填空题 15分 判断题 10分 简答题 25分 计算题 20分 算法设计题 30分,第一章 主要内容,算法的概念 什么是算法? 算法的特征? 程序与算法的区别? 算法分析 算法的评价优劣 算法的时间复杂度分析 频率计数 计算时间的渐近表示:上界函数、下界函数、平均界函数,第一章 主要内容,什么是算法? 它是一组有穷规则的集合,它规定了解决某一特定类型问题的一系列运算。 算法的5个特征 确定性;能行性;输入;输出;有穷性。,第一章 主要内容,算法与程序的区别 程序: 与某种语言有关,能直接在机器上运行。 只满足确定性、能行性、输入、输出四个特性但不一定能终止的一

2、组规则。 算法: 与特定的语言无关,可用任何语言实现 ,甚至可以用自然语言实现。 算法是“可以终止的计算过程”。 算法的时效性:只能把在相当有穷步内终止的算法投入到计算机上运行。,第一章 主要内容,算法优劣的评价标准 时间复杂度:最好情况时间复杂度、最坏情况时间复杂度、平均情况时间复杂度 空间复杂度 算法的时间复杂度概念 频率计数:一条语句或一种运算在算法(或程序)体中的执行次数。 计算时间的渐近表示 上界函数 下界函数 平均界函数,第一章 主要内容,计算时间的渐近表示:假设算法的计算时间为f(n),数量级限界函数为g(n) n是输入或输出规模的某种测度。 f(n)表示算法“实际”执行时间与机

3、器及语言有关。 g(n)是形式简单的函数,如nm,logn,2n,n!等。是事前分析中通过对计算时间或频率计数统计分析所得的、与机器及语言无关的函数。,第一章 主要内容,上界函数 定义1 如果存在两个正常数c和n0,对于所有的nn0,有 |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)。,第一章 主要内容,下界函数 定义2 如果存在两个正常数c和n0,对

4、于所有的nn0,有 |f(n)| c|g(n)|则记作f(n) = (g(n) 含义: 如果算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是不小于|g(n)|的一个常数倍。所以g(n)是计算时间f(n)的一个下界函数。 试图求出“最大”的g(n),使得f(n) = (g(n)。,第一章 主要内容,平均界函数 定义3 如果存在正常数c1,c2和n0,对于所有的 nn0,有 c1|g(n)| |f(n)| c2|g(n)|则记作 含义:算法在最好和最坏情况下的计算时间就一个常数因子范围内而言是相同的。有f(n)=(g(n),又有f(n)=(g(n),第一章 主要内容,给定f(n)= a

5、mnm+a1n+a0,求f(n)的上界函数、下界函数、平均界函数 给定f(n)=logn2,求f(n)的上界函数、下界函数、平均界函数,第二章主要内容,分治法的基本思想、求解流程、适用条件 二分检索算法,时间复杂度分析 找最大最小值算法,时间复杂度分析,第二章主要内容,分治法的基本思想 在问题输入规模很大时,无法直接求解,则将整个问题分成若干个小问题后分而治之。 分治法的求解流程 分解:将原问题分析为若干个相互独立,与原问题形式相同的子问题。 求解:若子问题易解,则直接求解;否则继续分解,直至子问题易解。 合并:合并已求解的子问题的解,得到原问题的解。 分治法的适用条件 原问题可以分解为若干个

6、子问题,子问题与原问题结构相似,由子问题的解能够快速求出原问题的解,第二章主要内容,二分检索算法:递归形式的算法 int binarySearch( a, low, high, e)int mid ;if(low high)mid = (low + high)/2;if(amid = e) return mid+1;else if (amid e) binarySearch(a,mid+1, high, e);else binarySearch(a,low, mid-1, e);return -1;,第二章主要内容,二分检索算法时间复杂度分析 成功/不成功检索的最好情况 成功/不成功检索的最坏

7、情况 成功/不成功检索的平均情况,总结,第二章 主要内容:找最大最小元素,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)/2call MAXMIN(i,mid,gmax,gmin)call MAXMIN(mid+1,j,hmax,hmin)fmaxmax(gmax,hmax)fminmin(gmin,hmin)endcase E

8、nd MAXMIN,容易求解的子问题,递归调用,合并求解,0 n=1T(n) = 1 n=2n2 n是2的幂时(n=2k),化简上式,T(n)=2T(n/2) +2=2(2T(n/4) + 2) + 2= =2k-1T(2) +=2k-1+2k-2=3n/2-2,与直接算法比较次数2(n-1)相比,比较次数减少了25%。,第二章 主要内容:找最大最小元素 时间复杂度,第三章 贪心算法,贪心法的基本思想 贪心选择性质 最优子结构性质 背包问题,贪心法的基本思想,第三章 贪心算法,贪心法的使用条件 对于一个具体的问题,如何知道是否可用贪心算法解决此问题,以及能否得到问题的最优解?这个问题很难给予肯

9、定的回答。 但是,从许多可以用贪心算法求解的问题中看到这类问题一般具有两个重要的性质:贪心选择性质和最优子结构性质。,第三章 贪心算法,贪心选择性质 对于一个具体问题,要确定它是否具有贪心选择的性质,必须证明每一步所作的贪心选择最终能够导致问题的最优解。 最优子结构性质 当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。,第三章 贪心算法,第三章 贪心算法,背包问题形式描述如下: 约束条件: 目标函数: 其中:0 xi 1 ,pi0 ,wi0, 0 in M背包的容量 n物品种类 wi第i物品的容量 pi第i种物品价值显然,满足约束条件的任一集合 是 一个可行解,使目标函数

10、取最大值的可行解是最优解。,背包问题贪心准则选取:用效益和容量的比值作为量度标准(pi/wi),第三章 贪心算法,Knapsack(ElemtypeW pn, ElemtypeP wn, float yn, ElemtypeW C, int n) /pn和wn分别含有按piwi,pi1wi+1排序的n件物品的效益值和容量。M是背包的容量大小,而yn是解向量/ 1 for i1 to n 2 do yi0; /将解向量初始化为0; 3 cu C; /cu是背包中剩余的空间; 4 for i1 to n 5 do /依次考察下一个物品是否可以放入背包; 6 if wi cu break;/物品i无

11、法全部放入背包, 退出for循环; 7 then yi1; 8 cu cu - wi; 9 10 if in 11 then yi cu/wi; /不能完全装入的物品的部分装入量,量度标准,动态规划算法的适用条件 动态规划算法的一般步骤 动态规划算法的应用:多段图问题,第四章 动态规划算法,动态规划算法的适用条件 对于一个多阶段过程问题,应用动态规划算法的前提 最优子结构性质:原问题的最优解包含了其子问题的最优解。 子问题重叠性质:每次产生的子问题并不总是新问题,有些子问题被反复计算多次。,第四章 动态规划算法,最优性原理 在多阶段决策过程的每一阶段,都可能有多种可供选择的决策,但必须从中选取

12、一种决策。一旦各个阶段的决策选定之后,就构成了解决这一问题的一个决策序列,决策序列不同,所导致的问题的结果也不同。动态规划的目标就是要在所有容许选择的决策序列中选取一个会获得问题最优解的决策序列,即最优决策序列。 最优性原理:过程的最优决策序列具有如下性质:无论过程的初始状态和初始决策是什么,其余的决策都必须相对于初始决策所产生的状态构成一个最优决策序列。,第四章 动态规划算法,动态规划算法的一般步骤(1)分析最优解的性质,找出最优子结构特征,如果所求解问题的最优性原理成立,则说明用动态规划方法有可能解决该问题。(2) 而解决问题的关键在于获取各阶段间的递推关系式-递归地定义最优值。(3)以自

13、底向上的方式逐步计算最优值。每个子问题的最优值保存在分级决策表中,便于在下一步进行更大子问题决策时引用,最后得到最优决策序列。,第四章 动态规划算法,动态规划算法的两种处理方法 (1)向前处理法:从最后阶段开始,以逐步向前递推的方式列出求前一阶段决策值的递推关系式,即根据xi+1,xn的那些最优决策序列来列出求取xi决策值的关系式,即:xi=f(xi+1,xi+2,xn) (2)向后处理法:根据x1,xi-1的那些最优决策序列列出求xi的递推关系式。即:xi=f(x1,x2,xi-1) .,第四章 动态规划算法,当 i=k-1 且 jVk-1时,如果E cost(i,j)=c(j,t)如果 E

14、 cost(i,j)=,cost(4,9)=c(9,12)=4,cost(4,10)=c(10,12)=2,cost(4,11)=c(11,12)=5,当 i=k-1 且 jVk-1时,如果E cost(i,j)=c(j,t)如果 E cost(i,j)=,cost(4,9)=c(9,12)=4,cost(4,10)=c(10,12)=2,cost(4,11)=c(11,12)=5,cost(3,6)=min6+cost(4,9),5+cost(4,10)=7,cost(3,7)=min4+cost(4,9),3+cost(4,10)=5,cost(3,8)=min5+cost(4,10),6

15、+cost(4,11)=7,cost(2,3)=9,cost(2,2)=min4+cost(3,6),2+cost(3,7), 1+cost(3,8)=7,cost(2,4)=18,cost(2,5)=15,cost(1,1)=min9+cost(2,2),7+cost(2,3),2+cost(2,5=16,回溯法的适用条件 回溯法的基本思想 回溯法求解问题的步骤 回溯法的一般方法 子集和数问题,第五章 回溯法,回溯法的适用条件 问题的解可以用一个n元组(x1,xn)来表示,其中的xi取自于某个有穷集Si,并且这些解必须使得某一规范函数P(x1,xn)取极值或满足该规范函数条件。,第五章 回溯

16、法,回溯法的基本思想,第五章 回溯法,假设集合Si的大小是mi,于是就有m=m1m2mn个n-元组可能满足函数P 。所谓枚举方法是构造出这m个n-元组并逐一测试它们是否满足P,从而找出该问题的解。而回溯法的基本思想是不断地用修改过的规范函数Pi(x1xi)(有时称为限界函数)去测试正在构造中的n-元组的部分向量(x1, xi),看其是否可能导致答案解。如果判定(x1, xi)不可能导致答案解,那么就将可能要测试的mi+1mn个向量一概略去。因此回溯算法作的测试次数比枚举方法作的次数(m次)要少得多。(用树结构表示更形象),关键,回溯法求解问题的步骤 第一步:为问题定义一个状态空间(state

17、space),这个空间必须至少包含问题的一个解 第二步:组织状态空间以便它能被容易地搜索。典型的组织方法是图或树 第三步:按深度优先的方法从开始节点进行搜索 开始节点是一个活节点N(扩展结点) N生成扩展结点的儿子结点S,而后S变成扩展结点,N变成活结点 所有儿子结点都已经生成的结点是死结点,第五章 回溯法,回溯法的一般方法 procedure BACKTRACK(n)integer k, n; local X(1:n)k1while k0 doif 还剩有没检验过的X(k)使得X(k) T(X(1),X(k-1) and B(X(1),X(k)=truethenif(X(1),X(k) 是一

18、条已抵达一答案结点的路径then print(X(1),X(k) endifk k+1elsek k-1endifrepeat end BACKTRACK,第五章 回溯法,二、如何提高回溯法的效率(尽早避免无效搜索)假设n=4,(w1,w2,w3,w4)=(1,5,14,19),权重按照非降序排列0w1w2w3w4;w1M,WiM 隐式条件,假设(x1,x2,xk-1)有可能成为问题的部分解,则必有:,二、如何提高回溯法的效率(尽早避免无效搜索)假设n=4,(w1,w2,w3,w4)=(1,5,14,19),权重按照非降序排列0w1w2w3w4;w1M,WiM 2. 隐式条件,假设(x1,x2

19、,xk-1)有可能成为问题的部分解,对应于xk=1和xk=0,需要满足的条件如下:,算法:子集和数问题的递归回溯算法 SumOfSub(int s , int k , int r) /找W(1:n)中和数为M的所有子集。进入此过程时X(1),X(k-1)的值已经确定。这些W(i)按非降次序排列。满足如下条件,1 xk 1; /将第k个正数计入解向量; 2 if (s + wk)=M /将第k个正数计入解向量后,得到一个可行解; 3 then for i1 to k 4 do print(xi); /输出这个可行解; 5 else 6 if (s + wk + wk + 1)Mthen SumO

20、fSub(s + wk , k + 1 , r wk); if (s + r wk)M and (s + wk+1)M)then /第k个正数不可以计入解向量,递归调用SumOfSub()算法。 10 xk 0;SumOfSub(s , k + 1 , r - wk);,n=6, M=30, W(1:6)=(5,10,12,13,15,18),语句何时执行?,0 , 1 , 73,5 , 2 , 68,0 , 2 , 68,15 , 3 , 58,5 , 3 , 58,15 , 4 , 46,17 , 4 , 46,5 , 4 , 46,15 , 5 , 33,5 , 5 , 33,n=6, M=30, W(1:6)=(5,10,12,13,15,18),答案,答案,答案,分支限界法对问题状态空间树检索的两种方法 FIFO LIFO LC检索算法,第六章 分支限界法,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 试题课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报