算法分析与设计讲稿(1)重点讲义资料.doc
《算法分析与设计讲稿(1)重点讲义资料.doc》由会员分享,可在线阅读,更多相关《算法分析与设计讲稿(1)重点讲义资料.doc(146页珍藏版)》请在三一办公上搜索。
1、目录第一章绪论31.1 算法的概念31.2 算法问题求解基础61.3 重要的问题类型91.4 基本数据结构11第二章算法效率分析基础162.1 分析框架162.2 渐进符号和基本效率类型192.3 非递归算法的数学分析222.4 递归算法的数学分析252.5 例:Fibonacci数列27第三章蛮力法(BRUTE FORCE)和算术问题333.1 选择排序和冒泡排序333.2 蛮力字符串匹配353.3 穷举搜索(Exhaustive Search)363.4基本算术403.5模算术423.6素性检测423.7密码学42第四章分治法(DEVIDE-AND-CONQURE)434.1 主定理(Ma
2、ster Theorem)434.2 归并排序444.3 快速排序464.4 大整数乘法494.5 Strassen矩阵乘法504.6快速傅里叶变换FFT52第五章减治法(DECRESE-AND-CONQURE)585.1 插入排序585.2 深度优先搜索和广度优先搜索595.3 生成组合对象的算法635.4 二叉搜索(折半查找)675.5 乘法和乘方问题695.6 Euclid算法分析71第六章时空权衡(TIME AND SPACE TRADEOFFS)与动态规划(DYNAMIC PROGRAMMING)726.1 计数排序726.2 高效串匹配算法736.3 再谈Fibonacci数列78
3、6.4 有向无环图中最短路径796.5 计算传递闭包的Warshall算法和多源最短路径问题的Floyd算法816.6 矩阵链相乘问题846.7 最优二叉搜索树866.8 最长递增子序列896.9 编辑距离896.10 背包问题926.11 旅行商TSP问题95第七章贪心法(GREEDY TECHNIQUES)997.1 连续背包问题997.2 最小生成树问题(MST,minimum spanning tree)1027.3 单源最短路径问题的Dijkstra算法1097.4 Huffman编码1127.5集合覆盖118第八章线性规划(LINEAR PROGRAMMING)1198.1 线性规
4、划简介1198.2 求解线性规划问题的单纯形算法1228.3 网络流问题1298.4 二部图的匹配问题1298.5 对偶1298.6 零和游戏130第九章算法能力的极限1319.1 求算法下界的方法1319.2 问题归约1329.3 P,NP和NP完全问题1349.4 回溯法(Backtracking)1399.5 分支限界法(Branch-and-Bound)1419.6 近似算法(Approximation algorithms)144第一章绪论1.1 算法的概念算法:解决一个问题的无歧义的指令序列,对合法的输入在有限的时间内可得到需要的输出。算法的一些特点:这才叫算法n 无歧义性(确定性
5、):算法的每个步骤必须确定无疑n 有穷性:算法的执行必须有限步终止n 输入的范围:算法只对这指特定问题的算法满足条件的输入有响应 n 正确性:算法应能解决要求的问题n 同一算法的不同表示形式:自然语言、伪代码、高级语言n 同一问题存在的多种算法:设计思想不同,时空性能各异例,求两个正整数m和n的最大公因子的算法算法一最容易想到的算法挨个检查Step 1t = min m, nStep 2如果m除以t的余数为0,转Step 3;否则,转Step 4;Step 3如果n除以t的余数为0,返回t的值;否则,转Step 4;Step 4t = t 1,转Step 2。分析:n 上述步骤每一步均确定没有
6、歧义,是一个循环结构程序n 循环执行次数未知,那么它会有限步终止吗?(每次t 1)n 该算法由自然语言描述n 该算法正确吗?如何证明?算法二小学数学中讲述的算法Step 1将m分解质因子;Step 2将n分解质因子;Step 3寻找Step 1和Step 2得到的两个质因子连乘积的公共部分(注:若m的分解中质因子p出现了x次,n的分解中p出现了y次,作为公共部分,p应出现minx, y次);Step 4计算公共部分的连乘积,并将结果返回。分析:此算法中,如何分解质因子没说明,如何寻找公共部分不清楚,不满足算法的确定性要求,所以严格讲起来不能称为算法,至少有待进一步具体说明!考虑如何具体说明:n
7、 分解质因子需要知道有哪些质数n 寻找公共部分涉及到质因子连乘积的表示形式算法三Euclid算法(记录于公元前3世纪Euclid所著的Elements)Euclid (m, n)/Input:两个正整数m和n/Output:m和n的最大公因子while n0 dor = m mod nm = nn = rreturn m分析:n 上述步骤每一步均确定没有歧义,是一个循环结构程序n 循环执行次数未知,那么它有限步终止吗?(每次n都减小)n 该算法由伪代码描述:伪代码是自然语言和编程语言的混合n 该算法正确吗?如何证明?证明:设函数gcd(m, n)就是采用Euclid算法计算最大公因子的函数。则
8、算法的正确性基于两个事实: 若m0,则gcd(m, 0)= m gcd(m, n) = gcd(n, m mod n)第一个事实显然易见。设d = gcd(m, n)且m = kn + t。则存在a,b使得m = ad,n = bd,且a与b互质。m mod n = t = m kn = ad kbd =(a kb)*d。说明d是n和m mod n的公因子,还需说明,b与a kb互质。假设b与a kb有公因子c。即,b = uc,a kb = vc。则a = kuc + vc =(ku + v)*c,m =(ku + v)*cd,n = bd = ucd,由d是m与n的最大公因子得c=1,即b
9、与a kb互质。比较上述三个算法,很明显,Euclid算法形式简单,循环次数少(后面会进行详细分析),所以我们说Euclid算法更高效。1.2 算法问题求解基础算法是求解的具体指令,不是解答。设计和分析算法的典型步骤:1. 理解问题1) 仔细阅读问题描述2) 手工测试几个例子3) 思考特殊情形4) 分析是否已有该类问题的算法2. 确定计算设备的能力现行的绝多数算法都是基于冯诺依曼机器模型的,即,随机存储模型,它假定指令依次执行,每次执行一个操作,在这样机器上执行的算法称为sequential算法。适合于现在新兴的可同时执行多条操作的计算机的算法,称为并行算法。除非对某些本质上复杂、需处理大量数
10、据或者对时间要求很高的问题,无需担心现在计算机的能力!3. 选择精确算法还是近似算法1) 存在某些问题不能精确解决,例如求平方根2) 可精确解决的算法难以接受的慢,例如,TSP问题3) 近似算法可以是某些更为复杂的精确算法的组成部分4. 确定合适的数据结构存在某些算法设计方法固有依赖于描述问题的数据结构。5. 算法设计方法本课程所要解决的主要问题。算法设计方法(或策略)是指:从算法上解决问题的通用方法,可适用于不同领域的各种各样的问题。学习这些方法的原因:1) 有助于为新问题设计算法,授人以鱼不如授人以渔2) 每门学科都对其研究主题进行分类,算法是计算机科学的基础,有助于根据设计思想对算法进行
11、分类6. 描述算法的方法1) 自然语言描述,如前例中算法一、二2) 伪代码描述,如前例中算法三Euclid算法,无统一格式3) 流程图,只适合于描述很简单的算法4) 某种计算机语言写成的程序7. 证明算法的正确性一旦算法描述清楚,就需要证明其正确性,即,它对每一个合法的输入都可以在有限的时间内得出需要的结果。证明算法正确的一个常用方法是:数学归纳法。注意:测试几组输入数据的方法虽然简单,但却不足以说明算法正确!不过却可以说明一个算法不正确!8. 算法分析算法应具有的几个品质:本课程所要解决的主要问题1) 正确性2) 效率:时间效率和空间效率。第二章详述3) 简洁性:无法用数学定义精确描述,最好
12、给人以美感例,前述的求gcd的算法哪个更简单?简单的算法易于理解,易于编程,通常包含较少的bug,一般也更有效率4) 通用性:同样的效率,解决的问题可适用范围当然越广越好,但是有时通用算法难设计且效率差,或者根本无通用算法例,判定两个正整数是否互质的算法就没有求gcd的通用;二次方程求根公式存在的,但没有任意次方程的求根方法9. 算法编码实现1) 注意程序严格准确的实现算法2) 算法到程序的过渡:算法中假设输入都是合法的,程序中需验证3) 程序的正确性验证的实际方式:测试(testing)。4) 学习编程技巧,以提高程序效率最优算法(optimality):不是算法效率的问题,而是算法解决问题
13、的复杂性,即,解决某类问题的任意算法中哪个所付出的代价最少。某些问题的最优算法是存在的,比如,通过比较进行排序的最优算法需要进行n log n次比较;但某些看上去简单的问题,还未找到最优算法,例如,矩阵乘法。不可判定性(undecidability):不是说,每个问题均有算法解决(注意,这不同于一个问题没有解,例如,判别式为负的二次方程无实数解)。所幸的是,实际计算中的绝大多数问题还是有解决算法的。1.3 重要的问题类型后面的章节将以以下问题展开,讨论不同算法的设计技术与分析方法。1. 排序我们经常遇到排序问题,比如学校学生按学号排序,学号通常被称为key。那么为什么要进行排序?排序使得很多关
14、于列表的问题简单,比如字典中单词的搜索;排序还常作为某些领域重要算法的辅助步骤,比如,在几何算法中。当前,已有很多排序算法,在这些算法当中,有些较好的可将任意n个元素通过大约n log2 n比较完成排序,但是没有哪一个通过关键字比较的排序算法能比n log2 n作的更好!排序算法的两个性质:排序是否稳定(保持输入相等元素的相对次序不变)和是否需要大量辅助空间(in place排序)。2. 搜索(查找)同样,有很多搜索算法,简单的如顺序搜索,快速的如二叉搜索(要求元素已排序),等等。由于搜索经常与添加和删除操作联系在一起,所以,需仔细设计数据结构。3. 字符串处理由于所有程序在计算机看来都是字符
15、串,所以此类算法同计算机语言和编译紧密相关。此类算法中最特殊的一个字符串匹配在给定文本中搜索给定单词,在实际中非常有用。4. 图论问题算法中最古老而又吸引人的领域就是图算法。图可以看作是由若干结点和若干个连接其中某些结点的边所构成,其准确定义下一小节给出。图可以为日常很多应用建模,比如,交通和通信网,项目调度,博弈。最基本的图算法包括:图遍历算法(如何遍历网络中所有结点),最小生成树算法(如何铺设最经济的通信网络),最短路径算法(如何确定两城市间的最佳路线),有向图的拓扑排序(如何确定专业课程的学习顺序),等等。有些图论问题非常复杂,以至于最快的计算机也只能解决较小规模的这类问题,比如,旅行商
16、问题(遍历n个城市每个一次的最短线路)和图着色问题(给图的结点着色以使相邻结点颜色不同的最少颜色数),例如,多叉路口交通灯的设计就是一个图着色问题。5. 组合问题更抽象的讲,旅行商问题和图着色问题都是组合问题的例子。组合问题寻求满足某些约束条件或者某些期望性质的组合对象(排列,组合,多重集)。组合问题被认为是计算机科学中最困难的问题,因为:n 随着问题规模扩大,组合对象的数目急剧扩大n 没有已知的算法可在可接受的时间内解决大多数此类问题n 大多数计算机科学家相信不存在可接受时间内解决此类问题的算法,但不能证实和证伪6. 几何问题几何问题处理点、线、多边形。应用领域包括计算机图形学,机器人学,X
17、线断层摄影学。典型算法,比如寻找平面内n个点中的最近点对算法。7. 数值问题涉及到数学问题的求解,比如,解方程或方程组,计算定积分,等等。大多数这类问题只能近似解决,主要一个原因是他们的操作对象是实数,计算机只能够近似表述。1.4 基本数据结构1. 线性数据结构两种基本的线性数据结构是数组和链表。数组的特点:n 每个元素类型相同,占有同样大小的存储空间n 整个数组连续存储,任意元素可通过下标随机访问单(双、循环)链表的特点:n 非连续存储,访问某个元素的时间与其在链表中的位置有关n 无需预留存储空间,插入和删除操作方便数组和链表均可用于实现抽象数据结构线性表,其基本操作是:搜索、插入、删除。两
18、种特殊的线性表:栈(LIFO)和队列(FIFO)。2. 图图G =(V, E),其中V是顶点(结点)的有限集,E是顶点对(边)所构成的集合。如果边没有方向性,称G是无向图;否则,称G为有向图。 例:如上左图为无向图,其中V=a, b, c, d, e, f,E=(a, c), (a, d), (b, c), (b, f), (c, e), (d, e), (e, f);右图为有向图,其中V=a, b, c, d, e, f,E=(a, c), (b, c), (b, f), (c, e), (d, a), (d, e), (e, c), (e, f)。图的定义不禁止圈(loop,自回路),但除
19、非明确说明,我们所讲的图不包含圈。n 无向图的性质:0 |E| |V|(|V| 1)/ 2n 完全图:每对顶点均有边相连,|V|个顶点的完全图记作K|V|n 稠密图(dense)和稀疏图(sparse)图的表示:算法中最主要的两种表示是邻接矩阵和邻接表。上左图的邻接矩阵和邻接表表示如下:对无向图而言,其邻接矩阵总是对称的。Why?显然,稀疏图用邻接表更节省存储空间。Why?但具体某问题采用何种表示,更加依赖于解决该问题的算法的性质。n 加权图(weighted graph):图中边赋有值,称为权或cost。比如实际应用中,交通图中两城市间的公路距离。邻接矩阵和邻接表均可用于存储加权图。矩阵中的
20、值可表示距离(无边的是为),邻接表的每一结点可添加一项表示距离n 路径(path):从顶点u到顶点v的路径,是指始于u终于v有边连接的顶点序列(有向图中,要求边的方向均为从u至v方向)。若除起止点外路径中无顶点重复,称简单路径。路径长度指路径中的边数(即,顶点数减1)。n 连通图(connected):图中的每对顶点均有路径连接n 子图(subgraph):图G=(V, E)称为图G的子图,当且仅当,VV并且E En 连通子图(connected component):如果一个图不是连通的,它将包含若干个连通子图。连通子图指,添加任何结点则不连通的极大子图。下图就不是一个连通图,它有两个连通子
21、图,其顶点集分别是a, b, c, d, e和f, g, h, i。思考:中国的省际公路网是否是一个连通图?(注意台湾和海南!)n 环路(cycle):起止点为同一结点且路径长度为正的简单路径。没有环路的图称为无环图(acyclic)。n Hamilton回路:起止点为同一结点,且只经过图中其它结点一次的环路n Euler回路:起止点为同一结点,且只经过图中所有边一次的环路3. 树树是一个连通的无环图。森林:不连通的无环图,其每个连通子图是一棵树。n 树的性质1:|E| = |V| 1。注意,这是图成为树的必要条件,而不是充分条件。Why? 因为图不一定连通,不连通的图却可以有环,仍能满足此条
22、件!n 树的性质2:任意两结点间均有唯一的简单路径。Why?n 根树(rooted trees):性质2使得选择任一结点为根成为可能。所得树称为根树。一般从上至下依次画出根和各层结点。根树有广泛的应用,常简称为树,下面的树均指根树。所谓双亲、孩子、祖先、子孙、子树、叶子等概念,不再详述。n 结点的深度(depth):从根到该结点的简单路径的长度n 树的高度(height):从根到叶子的最长的简单路径的长度。n 有序树(ordered trees):每个结点的所有孩子是有序的。假定树中以从左至右表示顺序。二叉树(binary trees)是最常用的有序树,从而有左孩子、右孩子、左子树、右子树的概
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 讲稿 重点 讲义 资料
链接地址:https://www.31ppt.com/p-4281995.html