第一章GIS算法课件.ppt
《第一章GIS算法课件.ppt》由会员分享,可在线阅读,更多相关《第一章GIS算法课件.ppt(52页珍藏版)》请在三一办公上搜索。
1、,地理信息系统算法,第一章 算法设计和分析,第一节 概述,第二节 算法设计原则,第三节 算法复杂性的度量,第四节 最优算法,第一节 概述,一、算法的概念:算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出,二、算法特性:有穷性、确定性、可行性、有输入、有输出。1.有穷性:对于任意一组合法输入值,在执行有穷步骤之后一定能结束,即:算法中的每个步骤都能在有限时间内完成。2.确定性:对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径。3.可行性:算法中的所有操作都必须
2、足够基本,都可以通过已经实现的基本操作运算有限次实现之。4.有输入:作为算法加工对象的量值,通常体现为算法中的一组变量。有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中。5.有输出:它是一组与“输入”有确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系即为算法的功能。,第一节 概述,三、算法的几个要点:1.算法的每一个步骤都必须清晰、明确。2.算法所处理的输入的值域必须仔细定义。 3.同样的一个算法可以用几种不同的形式来描述。4.可能存在几种解决相同问题的算法。5.针对同一个问题的算法可能会基于完全不同的解题思路,而且解题的速度也会有明显区别。
3、,第一节 概述,Example求两个正整数m,n的最大公约数gcd(m,n)1.同一个算法有不同的表达方式:(1),第一节 概述,gcd(m,n)的欧几里得算法 第一步:如果n=0,返回m的值作 为结果,结束;否则进入第二步第二步:用n去除m,将余数赋给r。第三步:将n的值赋给m,将r的值 赋给n,回第一步。,(2)算法Euclid(m,n)/使用欧几里得算法计算gcd(m,n)/输入:两个不全为0的非负整数m,n/输出:m,n的最大公约数While n!=0 dor m mod nm nn rReturn m,第一节 概述,2.同一个问题有不同的解决方法:(1)gcd(m,n)的连续整数检测
4、算法 第一步:将minm,n的值赋给t。 第二步:m除以t,如果余数为0,则进入第三步;否则, 进入第四步。 第三步:n除以t,如果余数为0 ,则返回t值作为结果; 否则,进入第四步。 第四步:把t的值减1。返回第二步。(2)gcd(m,n)的中学计算算法 第一步:找到m的所有质因数。 第二步:找到n的所有质因数 第三步:从第一步和第二步中求得的质因数分解式找出所 有的公因数。 第四步:将第三步中找的质因数相乘,其结果作为给定数 字的最大公因数。,第一节 概述,算法问题求解的过程:,第一节 概述,理解问题,决定:计算方法。精确和近似的解法。,设计算法,正确性证明,分析算法,根据算法写代码,设计
5、算法前做的第一件事情。 仔细阅读问题的描述 提出疑问理解问题: 手工处理一些实例 考虑特殊情况 确定输入 抽象出问题,用数学表达式描述选择精确解和近似解: 某些重要的问题无法求得精确解 某些问题利用精确解速度慢,无法接受,第一节 概述,算法设计技术:使用算法解题的一般性方法,用于解决计算领域的多种问题。详细表述算法的方法:自然语言:用我们日常生活中的自然语言(可以是中文形式, 也可以是英文形式)也可以描述算法。伪代码:我们可以用数学语言或约定的符号语言来描述算法。流程图:一个算法可以用流程图的方式来描述,输入输出、判 断、处理分别用不同的框图表示,用箭头表示流程的流 向。这是一种描述算法的较好
6、方法,目前在一些高级语 言程序设计中仍然采用。也有其他的图形辅助工具。,第一节 概述,证明算法的正确性: 证明对于每一个合法的输入,该算法都会在有限的时间内输出一个满足要求的结果。 一般方法:数学归纳法证明算法的正确性与不正确哪一个更容易?分析算法: 算法有两种效率:时间效率和空间效率。 算法的另外两个特性:简单性和一般性。,第一节 概述,为算法写代码: 用计算机程序实现算法。 在把算法转变为程序的过程中,可能会 发生错误或者效率非常低。作为一种规律,一个好的算法是反复努力和重新修正的结果 算法是一个最优性问题:对于给定的问题需要花费多少力气(资源)? 是不是每个问题都能够用算法的方法来解决?
7、发明或发现算法是一个非常有创造性和非常值得付出的过程!,第一节 概述,算法和程序的关系:(1)算法着重体现思路和方法,程序着重体现计算机的实现。(2)程序不一定满足有穷性(死循环),另外,程序中的指令 必须是机器可执行的,算法中的指令无此限制。(3)一个算法若用计算机语言来书写,它就可以是一个程序。,第一节 概述,第二节 算法设计原则,1.正确性:是指对于一个问题,之所以将其放在第一位是因为如果一个算法自身有缺陷,或者不适合于问题的求解,那么该算法将不会解决问题。2.确定性:是指算法的每个步骤必须含义明确,对每种可能的情况,算法都能给出确定的操作。即采用同一种算法,在同样的条件下无论计算多少次
8、,始终能够得到确定的结果。3.清晰性:一个良好的算法必须思路清晰,结构合理。算法的设计要模块化。模块化的目的是使算法结构清晰,容易阅读,容易理解,容易测试,容易修改。,第三节 算法复杂性的度量,算法分析:是对一个算法需要多少计算时间和存储空间作定 量的分析。即时间特性(时间复杂度T(n)和空间 特性(空间复杂度S(n)。 一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。 时间复杂度:假如,随着问题规模 n 的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:T(n)=O(f(n)称T(n)为算法的(渐近)时间复杂度。,第三节
9、算法复杂性的度量,如何估算算法的时间复杂度?算法 = 控制结构(顺序、分支和循环三种 ) + 原操作(固有数据类型的操作)算法的执行时间 =原操作(i)的执行次数原操作(i)的执行时间算法的执行时间 与 原操作执行次数之和 成正比 从算法中选取一种对于所研究的问题来说是 基本操作 的原操作,以该基本操作 在算法中重复执行的次数 作为算法运行时间的衡量准则。,第三节 算法复杂性的度量,算法效率的主要指标是基本操作次数的增长次数。增长次数:小规模输入在运行时间上的差别不足以将高效的 算法和低效的算法区分开来。,第三节 算法复杂性的度量,为了对这些增长次数进行比较和归类,计算机科学家们使用了3种符号
10、:O(读“O”):上界 (读”omega”):下界 (读”theta”):相等1.符号O定义1 对于足够大的n,t(n)的上界由g(n)的常数倍来确定, 即:记为t(n) O(g(n) t(n) cg(n),c为常数 n O(n) 100n+5 O(n) n(n-1)/2 O(n),第三节 算法复杂性的度量,2.符号定义:对于足够大的n,t(n)的下界由g(n)的常数倍来确定, 即:记为t(n) (g(n) t(n) cg(n),c为常数 n(n) n(n+1)(n) 4n+5 (n),第三节 算法复杂性的度量,符号定义:对于足够大的n,t(n)的上界和下界由g(n)的常数倍来确 定,即:c1
11、g(n) t(n) c2g(n),c1,c2为常数 记为 t(n) (g(n) n+3n+2 (n)n(n-1)/2 (n)4n+5 (n),第三节 算法复杂性的度量,渐进符号的有用特性 定理:如果t1(n) O(g1(n)并且t2(n) O(g2(n),则t1(n)+ t2(n) O(max(g1(n), g2(n) 对于符号和,该定理也成立。 该定理表明:当算法由两个连续执行部分组成时,该算法的整体效率由具有较大增长次数的那部分所决定。利用极限比较增长次数前两种情况意味着t(n) O(g(n)后两种情况意味着t(n) (g(n)第二种情况意味着t(n) (g(n),第三节 算法复杂性的度量
12、,基本的效率类型 指数时间算法一般有: O( )O(n!)O( )。 常量(1)、对数(logn)、线性(n)、平方(n)、立方(n)、指数(2n )、阶乘(n!)其中有六种多项式时间算法最为常见,其关系为:O(1)O(logn)O(n)O(nlogn)O(n2)O(n3);,第三节 算法复杂性的度量,void mult(int a, int b, int 基本操作: 乘法操作 时间复杂度: O(n),例一两个矩阵相乘,第三节 算法复杂性的度量,void select_sort(int if ( j != i ) aj ai 基本操作: 比较(数据元素)操作 时间复杂度: O(n),例二选择排
13、序,空间复杂度:算法在运行过程中临时占用的存储空间的大小被定义为算法的空间复杂性。空间复杂性包括程序中的变量、过程或函数中的局部变量等所占用的存储空间以及系统为了实现递归所使用的堆栈两部分。算法的空间复杂性一般也以数量级的形式给出。S(n) = O(g(n)表示随着问题规模 n 的增大,算法运行所需存储量的增长率与 g(n) 的增长率相同。,第三节 算法复杂性的度量,第四节 最优算法,算法的最优、最差和平均效率 1.最差效率是指在输入规模为n时,算法在最坏情况下的效率。2.最优效率是指在输入规模为n时,算法在最优情况下的效率。3.平均效率是指在“典型”或“随机”输入的情况下,算法具有的行为(效
14、率)。4.摊销效率是指对于同样的数据结构执行多次操作,然后分摊到每一次上。,第四节 最优算法,算法优化的几种常用方法: (1)空间换时间算法中的时间和空间往往是矛盾的,时间复杂性和空间复杂性在一定条件下也是可以相互转化的,有时候为了提高程序运行的速度,在算法的空间要求不苛刻的前提下,设计算法时可考虑充分利用有限的剩余空间来存储程序中反复要计算的数据,这就是“用空间换时间”策略,是优化程序的一种常用方法。相应的,在空间要求十分苛刻时,程序所能支配的自由空间不够用时,也可以以牺牲时间为代价来换取空间,由于当今计算机硬件技术发展很快,程序所能支配的自由空间一般比较充分,这一方法在程序设计中不常用到。
15、 (2)尽可能利用前面已有的结论:比如递推法、构造法和动态规划就是这一策略的典型应用,利用以前计算的结果在后面的计算中不需要重复;,第四节 最优算法,(3)寻找问题的本质特征,以减少重复操作:算法的复杂度分析不仅可以对算法的好坏作出客观的评估,同时对算法设计本身也有着指导性作用,因为在解决实际问题时,算法设计者在判断所想出的算法是否可行时,通过对算法作事先评估能够大致得知这个算法的优劣,进而作出决定是否采纳该算法。这样就能避免把大量的精力投入到低效算法的实现中去,特别是现在举行的各级信息学奥林匹克竞赛对程序的运行时间都有着相当严格的限制,掌握好算法复杂度的大致评估方法就显得犹为重要。,常用算法
16、分析,递归的定义:一个过程(或函数)直接或间接调用自己本身,这种过 程(或函数)叫递归过程(或函数),有直接调用和间接调用两种。设计递归算法,主要有两步 (1)确定递归公式; (2)确定边界(终了)条件; 要注意学会把具体问题分解为几个子问题,如果你分解的这些子问题的形式和算法与原问题相似,那么,你的递归算法就能很快完成。能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,
17、能直接得解。为了描述问题的某一状态,必须用到它的上一状态,而描述上一状态,又必须用到它的上一状态,这种用自已来定义自己的方法,称为递归定义。,常用算法分析,例如:定义函数f(n)为:f(n)=n*f(n1) (n0) f(n)= 1(n=0)则当0时,须用f(n-1)来定义f(n),用f(n-1-1)来定义f(n-1)当n=0时,f(n)=1。由上例我们可看出,递归定义有两个要素:(1)递归边界条件。也就是所描述问题的最简单情况,它本身不再使用递归的定义。如上例,当n=0时,f(n)=1,不使用f(n-1)来定义。(2)递归定义:使问题向边界条件转化的规则。递归定义必须能使问题越来越简单。如上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章 GIS 算法 课件

链接地址:https://www.31ppt.com/p-1561134.html