算法设计与分析复习要点

合集下载

数值计算中的算法设计与理论分析

数值计算中的算法设计与理论分析

数值计算中的算法设计与理论分析在现代科学和技术的发展中,数值计算是一个不可或缺的工具。

它将数学理论应用于工程、科学与社会经济等领域,为我们提供了各种各样的数值计算方法。

在数值计算中,算法设计是一个至关重要的环节,而算法的效率、稳定性和可靠性则与其理论分析密不可分。

一、数值计算中的算法设计算法设计是数值计算的核心,其设计目标通常是快速和准确地解决问题。

不同的问题需要不同的算法设计,常用的算法包括迭代法、插值法、微分方程数值解法、统计学方法等。

1. 迭代法迭代法是一种求解方程组或者函数零点的方法。

该方法的基本思想是从一个初值开始,不断迭代逼近目标解。

迭代法通常有牛顿迭代法、割线法等,其中牛顿迭代法是一种高效且广泛使用的方法,具有收敛速度快、收敛性好等优点,常用于求解非线性问题。

例如,求解方程f(x) = 0,其中f(x)是一个连续可导函数。

由泰勒展开可知,在x处的一次近似为:f(x + h) ≈ f(x) + hf'(x)设此时函数的近似根为x1,根据近似式有:0 ≈ f(x1 + h) ≈ f(x1) + hf'(x1)可得:x1 ≈ x - f(x)/f'(x)这就是牛顿迭代法的基本思路。

2. 插值法插值法是通过已知的有限个点来推算出未知数在某些位置处的数值。

插值法包括拉格朗日插值法、牛顿插值法、分段插值法等,其中最常用的是拉格朗日插值法和牛顿插值法。

例如,给定函数f(x)在点x0, x1, ..., xn处的取值yi = f(xi),要求在区间[x0, xn]内的任意点x处的函数值f(x)。

对于插值点xi,求相应的插值函数L(x),则L(x)的表达式为:L(x) = Σfi*li(x)其中fi是插值点xi对应的函数值,li(x)是插值点xi对应的基函数。

3. 微分方程数值解法微分方程数值解法是求解微分方程问题的一种数值计算方法。

常用的数值解法有欧拉法、龙格-库塔法、后向欧拉法等。

算法基本知识点总结

算法基本知识点总结

算法基本知识点总结一、算法的基本概念1. 算法的定义算法是用来解决特定问题的有限步骤的有序集合。

算法是一种计算方法,可以描述为一系列清晰的步骤,用来解决特定问题或执行特定任务。

2. 算法的特性(1)有穷性:算法必须在有限的步骤内结束。

(2)确定性:对于相同输入,算法应该产生相同的输出。

(3)可行性:算法必须可行,即算法中的每一步都可以通过已知的计算机能力来执行。

3. 算法的设计目标(1)正确性:算法应该能够解决给定的问题。

(2)可读性:算法应该易于理解和解释。

(3)高效性:算法应该能在合理的时间内完成任务。

二、算法的复杂度分析1. 时间复杂度算法的时间复杂度表示算法执行所需的时间长度,通常用“大O记法”表示。

时间复杂度反映了算法的运行时间与输入规模之间的关系。

常见的时间复杂度包括:(1)O(1):常数时间复杂度,表示算法的运行时间与输入规模无关。

(2)O(logn):对数时间复杂度,表示算法的运行时间与输入规模的对数成正比。

(3)O(n):线性时间复杂度,表示算法的运行时间与输入规模成正比。

(4)O(nlogn):线性对数时间复杂度,表示算法的运行时间与输入规模和对数成正比。

(5)O(n^2):平方时间复杂度,表示算法的运行时间与输入规模的平方成正比。

(6)O(2^n):指数时间复杂度,表示算法的运行时间与输入规模的指数成正比。

2. 空间复杂度算法的空间复杂度表示算法执行所需的内存空间大小。

常见的空间复杂度包括:(1)O(1):常数空间复杂度,表示算法的内存空间与输入规模无关。

(2)O(n):线性空间复杂度,表示算法的内存空间与输入规模成正比。

三、常见的算法设计思想1. 贪心算法贪心算法是一种选取当前最优解来解决问题的算法。

贪心算法的核心思想是从问题的某一初始解出发,通过一系列的局部最优选择,找到全局最优解。

2. 动态规划动态规划是一种将原问题分解成子问题来求解的方法。

动态规划通常适用于具有重叠子问题和最优子结构性质的问题。

《算法分析与设计》说课

《算法分析与设计》说课

8
8
8
10
S4
贪心算法
6
6
S5
回溯法
6
8
S6
分支限界
6
8
S7
随机化算法 总学时数
4 40
6 48
说课程教学大纲
5、课外学习内容 分支 限界 算法 设计 分治 分治 最强大脑—数独 阶乘 递归 兔子问题 会场安排问题 国王分财产
银行最优服务次序
回溯 法 贪心 贪心 算法 算法
矩阵连乘 租用游艇 排序问题
•难点模块
分治策略
动态规划 贪心算法
•难点内容
分治策略的应用
分解最优解结构 构造递归关系
回溯法
分支限界法
判断是否满足贪心性质
回溯法--剪枝函数 解空间树
说课导航
说课程教学大纲
说教学资源 说教学方法与手段 说学情与学法指导 说教学过程设计
说考核评价
说教学资源
1、教材选用原则
国家级规划教材 原则
具有先进性、适用性、时效性
汽车加油行驶 网球循环赛比赛日程
动态 规划
充分体现案例驱动、实践导向的设计思想
说课程教学大纲
6、课程重点
•重点模块
递归与分治策略
动态规划算法 贪心算法
•重点内容
二分搜索与排序
矩阵连乘 最长公共子序列
回溯法
分支限界法
最大字段和
0-
说课程教学大纲
7、课程难点
经典教材
说教学资源
王晓东教授编著的 《计算机算法设计与分析》 (C++描述)
说教学资源
2、网络资源
课外学习网站:
/JudgeOnline/problemtypelist.php

算法导论知识点总结

算法导论知识点总结

算法导论知识点总结算法是计算机科学领域的重要概念,它是解决问题的一种有效方式。

在计算机科学中,算法的设计和分析是非常重要的,它涉及到了计算机程序的性能、效率和可靠性。

算法导论是计算机科学和工程领域的一门重要课程,它涵盖了算法的基本概念、设计原则和分析方法。

本文将对算法导论的一些重要知识点进行总结。

一、算法导论的基本概念1. 算法的定义和特点算法是解决问题的一种方法或步骤,它由一系列的操作和指令组成,可以在有限时间内解决问题。

算法的特点包括:输入、输出、有限性、确定性和有效性。

2. 算法的时间复杂度和空间复杂度算法的时间复杂度是一个算法运行所需要的时间成本,通常用大O符号来表示;算法的空间复杂度是一个算法所需要的内存空间大小。

3. 算法设计的基本方法算法的设计方法包括:贪心法、分治法、动态规划、回溯法、分支限界法等。

4. 算法的分析方法算法的分析包括:最坏情况分析、平均情况分析、最好情况分析等。

二、算法导论的主要内容1. 基本数据结构基本数据结构是算法导论中非常重要的内容,包括:数组、链表、栈、队列、树、图等。

2. 排序和查找算法排序算法包括:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序等。

查找算法包括:顺序查找、二分查找、哈希查找、树查找等。

3. 字符串匹配算法字符串匹配算法包括:朴素匹配算法、KMP算法、Boyer-Moore算法、Rabin-Karp算法等。

4. 图算法图算法包括:图的遍历、最短路径、最小生成树、拓扑排序、关键路径等。

5. 动态规划动态规划是一种重要的算法设计方法,适用于多阶段决策问题和最优化问题。

6. 贪心算法贪心算法是一种简单而有效的算法设计方法,通常适用于某些特定问题、具有贪心选择性质的问题。

7. 分治法分治法是一种重要的算法设计方法,通常适用于将大问题分解成小问题来解决的问题。

8. 线性规划线性规划是一种数学解法,通常用于解决最优化问题。

9. 概率算法概率算法是一种基于概率和随机性的算法设计方法,通常适用于复杂问题和近似解决问题。

算法设计与分析

算法设计与分析

算法设计与分析算法是计算机科学中的核心概念,它是解决问题的一系列步骤和规则的有序集合。

在计算机科学的发展中,算法设计和分析扮演着至关重要的角色。

本文将探讨算法设计和分析的相关概念、技术和重要性。

一、算法设计的基本原则在设计算法时,需要遵循一些基本原则来确保其正确性和有效性:1. 正确性:算法设计应确保能够正确地解决给定的问题,即输出与预期结果一致。

2. 可读性:设计的算法应具有清晰的结构和逻辑,易于理解和维护。

3. 高效性:算法应尽可能地减少时间和空间复杂度,以提高执行效率。

4. 可扩展性:算法应具备良好的扩展性,能够适应问题规模的变化和增长。

5. 可靠性:设计的算法应具备稳定性和鲁棒性,对不同的输入都能给出正确的结果。

二、常见的算法设计技术1. 枚举法:按照规定的顺序逐个尝试所有可能的解,直到找到满足条件的解。

2. 递归法:通过将一个大问题分解成若干个小问题,并通过递归地解决小问题,最终解决整个问题。

3. 贪心算法:在每个阶段选择最优解,以期望通过一系列局部最优解达到全局最优解。

4. 分治算法:将一个大问题划分成多个相互独立的子问题,逐个解决子问题,并将解合并得到整体解。

5. 动态规划:通过将一个大问题分解成多个小问题,并存储已解决子问题的结果,避免重复计算。

三、算法分析的重要性算法分析可以评估算法的效率和性能。

通过算法分析,可以:1. 预测算法在不同规模问题上的表现,帮助选择合适的算法解决具体问题。

2. 比较不同算法在同一问题上的性能,从而选择最优的算法。

3. 评估算法在不同硬件环境和数据集上的表现,选择最适合的算法实现。

四、常见的算法分析方法1. 时间复杂度:衡量算法所需执行时间的增长率,常用的时间复杂度有O(1)、O(log n)、O(n)、O(n log n)和O(n^2)等。

2. 空间复杂度:衡量算法所需占用存储空间的增长率,常用的空间复杂度有O(1)、O(n)和O(n^2)等。

3. 最坏情况分析:对算法在最不利情况下的性能进行分析,可以避免算法性能不稳定的问题。

算法设计与分析复习题目及答案

算法设计与分析复习题目及答案

分治法1、二分搜索算法是利用(?分治策略)实现的算法。

9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略?)实现的算法。

34.实现合并排序利用的算法是(分治策略)。

实现大整数的乘法是利用的算法(?分治策略)。

17.实现棋盘覆盖算法利用的算法是(分治法)。

29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。

不可以使用分治法求解的是(0/1背包问题)。

动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。

下列算法中通常以自底向上的方式求解最优解的是(动态规划法?)备忘录方法是那种算法的变形。

(动态规划法)最长公共子序列算法利用的算法是(?动态规划法)。

矩阵连乘问题的算法可由(动态规划算法B)设计实现。

实现最大子段和利用的算法是(??动态规划法?? )。

贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。

回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。

剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(?分支界限法)的一搜索方式。

分支限界法解最大团问题时,活结点表的组织形式是(?最大堆)。

分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。

(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

算法设计与分析复习题目及答案

分治法1、二分搜索算法是利用(分治策略)实现的算法。

9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。

34.实现合并排序利用的算法是(分治策略)。

实现大整数的乘法是利用的算法(分治策略)。

17.实现棋盘覆盖算法利用的算法是(分治法)。

29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。

不可以使用分治法求解的是(0/1背包问题)。

动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。

下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。

(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。

矩阵连乘问题的算法可由(动态规划算法B)设计实现。

实现最大子段和利用的算法是(动态规划法)。

贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。

回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。

剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。

分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。

分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。

(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

《算法分析与设计》期末复习题

一、选择题1.一个.java文件中可以有()个public类。

A.一个B.两个C.多个D.零个2.一个算法应该是()A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C3.用计算机无法解决“打印所有素数”的问题,其原因是解决该问题的算法违背了算法特征中的()A.唯一性B.有穷性C.有0个或多个输入D.有输出4.某校有6位学生参加学生会主席竞选,得票数依次为130,20,98,15,67,3。

若采用冒泡排序算法对其进行排序,则完成第二遍时的结果是()A.3,15,130,20,98,67B.3,15,20,130,98,67C.3,15,20,67,130,98 D.3,15,20,67,98,1305.下列关于算法的描述,正确的是()A.一个算法的执行步骤可以是无限的B.一个完整的算法必须有输出C.算法只能用流程图表示D.一个完整的算法至少有一个输入6.Java Application源程序的主类是指包含有()方法的类。

A、main方法B、toString方法C、init方法D、actionPerfromed方法7.找出满足各位数字之和等于5的所有三位数可采用的算法思路是()A.分治法B.减治法C.蛮力法D.变治法8.在编写Java Application程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( )语句。

A、import java.awt.* ;B、import java.applet.Applet ;C、import java.io.* ;D、import java.awt.Graphics ;9.计算某球队平均年龄的部分算法流程图如图所示,其中:c用来记录已输入球员的人数,sum用来计算有效数据之和,d用来存储从键盘输入的球员年龄值,输入0时表示输入结束。

图中空白处理框①和②处应填入的是()A.①sum ←sum + d B.①sum ←sum + c②c ←c + 1②c ←c + 1C.①sum ←sum + d D.①sum ←sum + c②d ←d + 1 ②d ←d + 110.报名参加冬季越野赛跑的某班5位学生的学号是:5,8,11,33,45。

2013计算机算法设计与分析期终考试复习题(1)


方向,为每个解过的子问题建立了备忘录以备需要时查看,同样也可避
免相同子问题的重复求解。
6.递归的二分查找算法在divide阶段所花的时间是 O(1) ,conquer阶 段所花的时间是 T(n/2) ,算法的时间复杂度是 O( log n) 。
7.Prim算法利用贪心 策略求解 最小生成树问题,其时间复杂度是 O(n2) 。
参考解答:不相同。目标函数:获得最大利润。最优量度:最大利润/ 重量比。
19 采用回溯法求解的问题,其解如何表示?有什么规定? 参考解答:问题的解可以表示为n元组:(x1,x2,……xn),xi∈Si, Si 为有穷集合,xi∈Si, (x1,x2,……xn)具备完备性,即(x1,x2,…… xn)是合理的,则(x1,x2,……xi)(i<n)一定合理。
12、一个算法的优劣可以用(时间复杂度)与(空间复杂度)与来衡
量。
13、回溯法在问题的解空间中,按(深度优先方式)从根结点出发搜索
解空间树。
14、直接或间接地调用自身的算法称为(递归算法)。
15、 记号在算法复杂性的表示法中表示(渐进确界或紧致界)。
16、在分治法中,使子问题规模大致相等的做法是出自一种(平衡
8.背包问题可用 贪心法 , 回溯法 等策略求解。 9.用动态规划算法计算矩阵连乘问题的最优值所花的时间是 O(n3) ,
子问题空间大小是 O(n2) 。
10.图的m着色问题可用 回溯 法求解,其解空间树中叶子结点个数是 mn ,解空间树中每个内结点的孩子数是 m 。
11.单源最短路径问题可用贪心法 、 分支限界 等策略求解。
12345678
21436587
34127856
43218765
56781234

算法设计与分析

算法设计与分析算法设计是计算机科学重要的研究方向之一。

其核心目的是在给定的计算机问题下,设计出一种能够高效完成任务的算法。

在算法设计的过程中,需要考虑多种因素,如算法的正确性、可理解性、可维护性、可移植性以及算法的时间和空间复杂度等。

常用的算法设计策略包括贪心算法、动态规划算法、回溯算法、分治算法等多种。

算法的正确性是算法设计的首要考虑因素之一。

如果一个算法不能够正确地解决问题,那么它的时间复杂度和空间复杂度再低也没有用处。

一般来说,算法的正确性可以通过数学证明来进行验证。

根据不同的算法类型,其正确性验证需要应用不同的证明方法。

时间复杂度和空间复杂度也是算法设计的关键考虑因素。

通常,一个算法的时间复杂度越低,运行时间就越短。

同样地,一个算法的空间复杂度越低,需要占用的内存就越少。

时间复杂度和空间复杂度之间通常是矛盾的,因此需要在两者之间做出权衡。

常用的算法比较基准是时间复杂度,时间复杂度大致可以分为常数阶、对数阶、线性阶、平方阶、立方阶等多个级别,并且可能还存在更高阶的时间复杂度。

在算法设计之后,需要进行算法的分析。

算法分析通常包括平均时间复杂度、最坏时间复杂度和最好时间复杂度的分析。

平均时间复杂度指的是在一组随机输入下的平均运行时间,通常是指输入数据分布的随机分布;最坏时间复杂度指的是运行时间的上界,通常是指特殊的输入情况时,算法运行时间达到最大值;最好时间复杂度指的是算法在最理想情况下的运行时间,通常指输入数据已经有序的情况下的运行时间。

除此之外,尚有许多其他因素需要考虑,例如算法的可扩展性、可移植性、可维护性、可复用性等。

其中的可扩展性指的是算法能够处理的数据规模的大小,通常需要根据不同的数据规模进行不同的优化;可移植性指的是算法能够运行在不同的计算机体系结构之上;可维护性指的是算法在输出结果有问题时,能够容易地找到错误所在并进行修改;可复用性指的是算法能够被其他程序员或其他算法模块所复用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析的复习要点 第一章:算法问题求解基础 算法是对特定问题求解步骤的一种描述,它是指令的有限序列。 一.算法的五个特征: 1.输入:算法有零个或多个输入量; 2.输出:算法至少产生一个输出量; 3.确定性:算法的每一条指令都有确切的定义,没有二义性; 4.可行性:算法的每一条指令必须足够基本,它们可以通过已经实现的基本运算执行有限次来实现; 5.有穷性:算法必须总能在执行有限步之后终止。 二.什么是算法?程序与算法的区别 1.笼统地说,算法是求解一类问题的任意一种特殊的方法;较严格地说,算法是对特定问题求解步骤的一种描述,它是指令的有限序列。 2.程序是算法用某种程序设计语言的具体实现;算法必须可终止,程序却没有这一限制;即:程序可以不满足算法的第5个性质“有穷性”。 三.一个问题求解过程包括:理解问题、设计方案、实现方案、回顾复查。 四.系统生命周期或软件生命周期分为: 开发期:分析、设计、编码、测试;运行期:维护。 五.算法描述方法:自然语言、流程图、伪代码、程序设计语言等。 六.算法分析:是指对算法的执行时间和所需空间的估算。算法的效率通过算法分析来确定。 七.递归定义:是一种直接或间接引用自身的定义方法。一个合法的递归定义包括两部分:基础情况和递归部分; 基础情况:以直接形式明确列举新事物的若干简单对象; 递归部分:有简单或较简单对象定义新对象的条件和方法 八.常见的程序正确性证明方法: 1.归纳法:由基础情况和归纳步骤组成。归纳法是证明递归算法正确性和进行算法分析的强有力工具; 2.反证法。 第二章:算法分析基础 一.会计算程序步的执行次数(如书中例题程序2-1,2-2,2-3的总程序步数的计算)。 二.会证明5个渐近记法。(如书中P22-25例2-1至例2-9) 三.会计算递推式的显式。(迭代法、代换法,主方法) 四.会用主定理求T(n)=aT(n/b)+f(n)。(主定理见P29,如例2-15至例2-18) 五.一个好的算法应具备的4个重要特征: 1.正确性:算法的执行结果应当满足预先规定的功能和性能要求; 2.简明性:算法应思路清晰、层次分明、容易理解、利于编码和调试; 3.效率:算法应有效使用存储空间,并具有高的时间效率; 4.最优性:算法的执行时间已达到求解该类问题所需时间的下界。 六.影响程序运行时间的主要因素: 1.程序所依赖的算法; 2.问题规模和输入数据规模; 3.计算机系统性能。 七.1.算法的时间复杂度:是指算法运行所需的时间; 2.算法的空间复杂度:指算法运行所需的存储空间,包括固定空间需求和可变空间需求。固定空间需求主要包括:程序代码、常量、简单变量、定长成分的结构变量所占的空间;可变空间的大小与算法在某次执行中处理的特定数据的规模有关。 八.算法时间复杂度的分类: 1.多项式时间算法:渐近时间复杂度有多项式时间限界的算法; 2.指数时间算法:渐近时间复杂度为指数函数限界的算法 3.常见的多项式时间算法的渐近时间复杂度之间的关系: O(1)4.常见的指数时间算法的渐近时间复杂度之间的关系: O(2的n次方)第五章:分治法 一.分治法的基本思想: 1.将一个复杂的问题分解成若干个规模较小、相互独立,但类型相同的子问题求解; 2.然后再将各子问题的解组合成原始问题的一个完整答案。(如快速排序算法,归并排序算法,二分搜索算法,汉诺塔问题都是用分治法求解的) 二.一个问题能够用分治法求解的要素或特征: 1.问题能够按照某种方式分解成若干个规模较小,相互独立且与原问题类型相同的子问题; 2.子问题足够小时可以直接求解; 3.能够将子问题的解组合成原问题的解。(自底向上逐步求出原理问题的解) 分治法的设计思想:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 三.分治法所能解决的问题一般具有以下几个特征: 1. 该问题的规模缩小到一定的程度就可以容易地解决; 2. 该问题可以分解为若干个规模较小的相同问题;(大部分问题都能满足) 3. 利用该问题分解出的子问题的解可以合并为该问题的解;(前提)(递归思想) 4. 子问题之间不包含公共的子问题。(效率) 四.合并排序与快速排序的比较: 1.分解过程: 合并排序:将序列一分为二即可(简单) 快速排序:需调用Paitition函数将一个序列划分为子序列。(分解方法相对较困难) 2.子问题解合并得到原问题解的过程: 合并排序——需要调用Merge函数(时间复杂度为O(n))来实现。 快速排序——一旦左右两个子序列都已分别排序,整个序列便自然成为有序序列。(异常简单,几乎无须额外的工作,省去了从子问题解合并得到原问题解的过程) 3.掌握合并排序和快速排序的具体排序方法(数据结构内容)。(图5-2,图5-4快速排序的划分操作) 第六章:贪心法 一.1.可行解:满足约束条件的解; 2.最优解:使目标函数取得最大(或最小)值的可行解,它用来衡量可行解的好坏; 3.贪心法是一种求解最优化问题的算法设计策略。 4.贪心法的应用领域有:背包问题、最小代价生成树(Kruskal算法和Prim算法)、哈夫曼树、文件的最佳合并树等; 5.贪心法是通过分步决策的方法来求解问题的,贪心法每一步上用作决策依据的选 择准则被称为最优量度标准(局部最优解); 二.可以用贪心法求解的问题一般具有两个重要性质: 1.贪心选择性质:所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到;(这是贪心法和动态规划法的主要区别) 2.最优子结构性质:一个问题的最优解包含其子问题的最优解(这是贪心法和动态规划算法的共同特征) 三.贪心算法的典型应用:背包问题(基本步骤): 1.首先计算每种物品单位重量的价值pi/wi并按非增次序进行排序; 2.然后依贪心选择策略,选择单位重量价值最高的物品装入背包;依此策略一直地进行下去,将尽可能多的物品全部装入背包,直到将背包装满; 3.若装入某件物品时,不能全部装下,而背包内的物品总重量仍未达到w,则根据背包的剩余载重,选择单位重量价值次高的物品并尽可能多地装入背包。(参考例6-1,试验标准3) 四.Prim算法和Kruskal算法的比较: 1. Prim算法:保证S所代表的子图是一棵树的前提下,选择一条最小代价的边e=(u,v);(见图6-10) 2. Kruskal算法:构造生成树的过程中,边集S代表的子图不一定是连通的;按边代价的非减次序考察E中的边,从中选择一条代价最小的边e=(u,v);(见图6-11) 3. Prim算法:由于Prim算法中每次选取的边两端总是一个已连通顶点和一个未连通顶点,故这个边选取后一定能将该未连通点连通而又保证不会形成回路;因此没选择一条边后,无须再判断边集S Ue是否包含回路; 4. Kruskal算法:为了确保最终得到生成树,每选择一条边时,都需要判定边集S Ue是否包含回路。 五.贪心法的基本要素: 1.最优量度标准:(1)选择最优量度标准是使用贪心法求解问题的核心问题; (2)贪心算法每一步作出的选择可以依赖以前作出的选择,但不依赖将来的选择,也不依赖一子问题的解;(3)对于一个贪心算法,必须证明所采用的量度标准能够导致一个整体最优解; 2.最优子结构特性:见本章第二点。 六.一个问题能够使用贪心策略的条件: 1.问题的解是向量结构(n元组形式); 2.具有最优子结构特性; 3.能够获取最优量度标准; 4.能证明是最优解。 第七章:动态规划法 一.动态规划法的几个步骤: (动态规划法是用于处理不具备贪心准则的问题,用于解决分治法的子问题重叠现象) 1.刻画最优解的结构特性; 2.递归定义最优解值; 3.以自底向上方式计算最优解值; 4.根据计算得到的信息构造一个最优解。 二.动态规划法的基本要素: 1.最优子结构特性:一个问题的最优解包含其子问题的最优解(见第五章:贪心法); 1.重叠子问题:递归算法求解问题时,每次产生的子问题并不总是新问题,有些问题 被反复计算多次。 三.动态规划法与分治法的比较: 共同点:将待求解的问题分解成若干个子问题,先求子问题,然后再从这些子问题的解得到原问题的解; 不同点:1.适合于用动态规划法求解的问题,分解得到的各子问题往往不是相互独立的;而分治法中的子问题是相互独立的; 2.动态规划法用表保存已求解过的子问题的解,再次碰到同样的子问题时不必重新求解,而只需查询答案,故可获得多项式级时间复杂度,效率较高;而分治法中对于每次出现的子问均求解,导致同样的子问题被反复求解,故产生指数增长的时间复杂度,效率较低。 四.动态规划法与贪心法的比较: 共同点:都是求解最优化问题;都要求问题具有最优子结构性质; 不同点:1.求解方式不同:动态规划法是:自底向上; 而贪心法是:自顶向下;以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为一个规模更小的子问题; 2.对子问题的依赖不同:动态规划法:依赖各子问题的解,所以只有在解出相关子问题后,才能作出选择;应使各子问题最优,才能保证整体最优; 而贪心法:不依赖于子问题的解;仅在当前状态下作出最好选择,即局部最优选择,然后再去解作出这个选择后产生的相应的子问题。 五.两类背包问题: 1.0/1背包问题:如果每一件物品不能分割,只能作文整体或者装入背包,或者不装入; 2.一般背包问题或简称背包问题:如果物品时可以分割的,也就是允许将其中的一部分装入背包。 六.动态规划法的典型应用:多段图问题 多段图问题是求从源点s到汇点t的一条长度最短的路径(用从后逐步向前递推的方法)(如例7-1,其求解步骤见P138,图7-1) 第八章:回溯法 一.1.回溯法是比贪心法和动态规划法更一般的方法,其解为n-元组形式; 2.通过搜索状态空间树来求问题的可行解(满足约束条件的解)或最优解(使目标函数最大或最小的解); 3.回溯法使用约束函数和限界函数来压缩需要实际生产的状态空间树的结点数; 4.通常情况下,回溯法是为了找出满足约束条件的所有可行解。 5.回溯法适用于解一些组合数相当大的问题 二.回溯法:(有递归回溯和迭代回溯) 1.在求解的过程中,以深度优先方式逐个生产状态空间树中的结点,求问题的可行解或最优解; 2.为提高搜索效率,在搜索过程中用约束函数和限界函数(统称剪枝函数)来剪去不必要搜索的子树,减少问题求解所需实际生产的状态空间树结点数,从而避免无效搜索。 3.常用的剪枝函数:用约束函数剪去已知不含答案状态(可行解)的子树;用限界函数剪去得不到最优答案结点(最优解)的子树。 三.回溯法与分枝限界法的比较: 1.回溯法:使用剪枝函数的深度优先生成状态空间树中的结点的求解方法; 2.分枝限界法:使用剪枝函数的广度优先生成结点的求解方法 四.回溯法的本质:

相关文档
最新文档