《可视化计算》算法综合-加工了的.ppt
《《可视化计算》算法综合-加工了的.ppt》由会员分享,可在线阅读,更多相关《《可视化计算》算法综合-加工了的.ppt(204页珍藏版)》请在三一办公上搜索。
1、基本算法和策略,西安交大可视化计算,学习目标,程序与算法有哪些异同?算法有哪些基本特性?算法的效率如何度量?如何为算法设计做准备?,2,http:/,算法定义,算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗来说,就是通过计算来解决问题的过程,在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法不同的是:前者是推理实现的算法,后者是操作实现的算法所以,程序是使用计算机实现的算法;而算法则不一定需要有计算机才能实现,3,http:/,算法的特性,算法具有五个基本特性:输入(具有零个或多个输入)输出(一或多个输出)有穷性(自动结束而不会出现无限循环)确定性(每一步骤的含义
2、,不会出现二义性)可行性(能够通过执行有限次数完成),4,http:/,算法设计的要求,正确性可读性健壮性时间效率高存储量需求低,5,http:/,正确性的层次,算法程序没有语法错误;算法程序对于合法的输入数据能够产生满足要求的输出结果;算法程序对于非法的输入数据能够得出满足规格说明的结果;算法程序对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果。,6,http:/,可读性,为了便于阅读、理解和交流,可读性要素:增加算法文件名、子图、子程序、算法样本数据文件名的可读性;在算法语句中增加注释语句,说明重要变量、决策语句的用途;将算法有关的文档整理在一个目录中,7,http:/,健壮性,能
3、对输入数据不合法的情况做合适的处理比如输入的时间或者距离不应该是负数算法的健壮性表现在当输入数据不合法时,算法也能做出相关处理,而不是产生异常或无法解释的结果,8,http:/,时间效率高和存储量需求低,对于同一个问题,如果有多个算法能够达到同样的问题解决标准,执行时间最短的算法效率最高存储量需求指的是算法在执行过程中需要的最大存储空间,主要指算法程序运行时所占用的内存或外部硬盘存储空间,越少越好,9,http:/,算法效率的度量,一个用高级程序语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:编译产生的代码质量;算法采用的策略、方法;问题的输入规模;机器执行指令的速度。,10,htt
4、p:/,2-end,学习目标,什么是基本算法?哪些算法在计算问题求解中最为常用?算法与算法策略有何区别?哪些基本的算法策略在各种算法解决方案中被普遍采用?,12,http:/,基本算法,蛮力法分段函数递推法模运算字符和字符串运算递归组合计算迭代法,13,http:/,蛮力法,计算机问题求解的第一号方法被称为蛮力法(Brute Force),也称穷举法采用蛮力算法解题的基本思路:确定穷举对象、穷举范围和判定条件;一一穷举可能的解,验证是否是问题的解在蛮力算法中,穷举对象的选择也是非常重要的,它直接影响着算法的时间复杂度,选择适当的穷举对象可以获得更高的效率,14,http:/,百钱买百鸡问题,某
5、个人有一百块钱,打算买一百只鸡。到市场上一看,公鸡五块钱一只,母鸡三块钱一只,小鸡一块钱三只。现在,请编一个算法,算出如何能刚好用一百块钱买一百只鸡?,15,http:/,蛮力法求解,三种鸡的个数为穷举对象分别设为x,y,z以三种鸡的总数(x+y+z)和买鸡用去的钱的总数(x*5+y*3+z/3)为判定条件,穷举各种鸡的个数由于三种鸡的和是固定的,只要穷举二种鸡(x,y),第三种鸡就可以根据约束条件求得(z=100-x-y),这样就缩小了穷举范围,16,http:/,求解流程图,如果需要解决的问题规模不大用蛮力法设计的算法其速度是可以接受的,17,http:/,分段函数,收费问题与我们的生活息
6、息相关,如水费问题、电费问题、话费问题等这些收费问题往往根据不同的用量,采用不同的收费方式以收费为题材的数学问题多以分段函数的形式出现,18,http:/,阶梯电价问题,为鼓励节约用电,某市开始采取按月用电量分段收费办法,某户居民每月应交电费y(元)与用电量x(度)的函数如下:请设计上述电费的收费算法。,19,http:/,阶梯电价流程图,20,http:/,分段函数求解中的问题,最常见的错误的是将函数的数学表达式直接搬到算法中,例如:“0=x=100”;函数定义中,没有定义x0,也就是输入为负数的时候,如何处理。当然,可以实验一下,当x取负值时结果如何?这个算法没有设计输入和规范的输出界面,
7、例如输入的提示,输出内容的量纲等,21,http:/,递推法,递推法是利用问题本身所具有的一种递推关系求解问题的一种方法所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定,22,http:/,可递推求解的问题特点,该类题目一般有以下二个特点:问题可以划分成多个状态;除初始状态外,其它各个状态都可以用固定的递推关系式来表示在实际解题中,该类题目一般不会直接给出递推关系式,而是需要通过分析各种状态,找出递推关系式,23,http:/,猴子吃桃问题,小猴子摘桃若干,立即吃了一半还觉得不过瘾,又多
8、吃了一个;第二天接着吃剩下桃子的一半,仍觉得不过瘾又多吃了一个,以后小猴子都是吃剩下的桃子一半多一个;到第10天小猴子再去吃桃子的时候,看到只剩下一个桃子;则小猴子第一天共摘了多少桃子?,24,http:/,递推问题求解,由题意可以得到下表:分析后可知,猴子吃桃问题递推关系为:Sn=1(当n=10时)Sn=2(Sn+1+1)(当1n10时)在此基础上,以第10天的桃数作为基数,用以上归纳出来的递推关系设计出一个循环过程,将第1天的桃数推算出来,25,http:/,递推流程图,为了加强交互性,增加了交互界面,可以输入不同的天数进行递推算法使用了两个变量,一个用于递推的循环控制,另一个保存递推得到
9、的结果注意主要的循环控制变量是递减的,与题意设计完全相同,便于理解。算法中加入了输入数据的正确性控制,也就是不可以输入0和负数,26,http:/,模运算,在算法应用中,有一类计算与模运算(求除法之余数)有关,例如:一个星期的模为7天一天的模是24小时或1440分钟一年的模是12个月(也可以是365或366天)而模运算在数字比较和诸多计算案例中有应用,27,http:/,求1001000范围内的平方回数,所谓平方回数,是指某个数,既是一个回文数,又是一个平方数,例如:121是回文数,又是11的平方,28,http:/,模运算求解分析,一个100以上的平方数,必须从平方根大于等于10的数字开始计
10、算,而1000可以作为搜索循环的控制变量但是,如何求出回文数?由于是在三位数中求回文数,也就是要求个位与百位上相等这个时候,模(在RAPTOR中模运算符:mod)运算就可以派上用场,29,http:/,求平方回数流程图,请思考一下,这个算法还使用了其他什么算法思想?,30,http:/,字符和字符串运算,字符和字符串运算在算法中的用途有:在输入输出界面中的应用,如在输出过程中将计算结果与量纲结合在一起;在信息安全中的应用,如信息的加密与解密;对用户对特定应用的输入的字符串,进行模式正确性的判断(如电子邮件地址需包含“”符号)等,31,http:/,替换加密,试用以下替换码表,实现通信过程的加密
11、明码表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z密码表 Q W E R T Y U I O P A S D F G H J K L Z X C V B N M,32,http:/,替换加密,保存明文Key保存密码表B保存密文解密算法,自行设计,33,http:/,递归,在数学和计算机科学中,递归是指由一种(或多种)简单的基线条件(Base case)定义的一类对象或方法,并规定其他所有情况都能被还原为其基线条件具体表现为:一个函数在其定义或说明中有直接或间接调用自身:把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求
12、解递归策略只需少量的程序就可描述出解题过程,34,http:/,递归过程,一般来说,递归需要有边界条件、递归前进段和递归返回段当边界条件不满足时,递归前进;当边界条件满足时,递归返回一般递归过程需要通过函数或子程序传递参数而RAPTOR中要实现子程序的参数调用,必须使用其所谓的“中级模式(Intermediate mode)”,35,http:/,递归算法常用于解决三类问题,(1)数据的定义是按递归定义的(2)问题解法按递归算法实现(3)数据的结构形式是按递归定义的典型的递归算法(带参数传递实现)的运行效率较低在递归调用的过程当中系统为每一层的返回点、局部变量等开辟了栈来存储递归次数过多容易造
13、成栈溢出等问题,36,http:/,递归算法,理论上而言,所有递归算法都可以用非递归算法来实现递归的应用:递归是很好的求解问题的方法,可以很好的描述一个算法的原理但是在算法实现中,必须避免“天真的递归”,37,http:/,汉诺塔,有A、B、C三根柱子。A柱子上按从小到大的顺序堆放了N个盘子,要把所有的盘子从A柱移动到C柱,移动过程中如下要求:一次只能移动一个盘子;不允许把大盘放在小盘上面;盘子只能放在三根柱子上,38,http:/,汉诺塔递归求解,N个盘子的移动过程分作3大步:把A柱上面的N-1个盘子移动到B柱;把A柱上剩下的一个盘子移动到C柱;把B柱上面的N-1个盘子移动到C柱;其中N-1
14、个盘子的移动过程又可按同样的方法分为三大步,这样就把移动过程转化为一个递归的过程,直到最后只剩下一个盘子,按照移动一个盘子的方法移动,递归结束,39,http:/,汉诺塔递归main子图,40,http:/,汉诺塔递归子程序,41,http:/,斐波那契(Fibonacci)数列,一些问题本身是递归定义的,但它并不适合用递归算法来求解如斐波那契(Fibonacci)数列,它的递归定义为:斐波那契数列为:0、1、1、2、3、,即:fib(0)=0;fib(1)=1;fib(n)=fib(n-1)+fib(n-2)(当n1时),42,http:/,斐波那契数列的递归求解,43,http:/,递归的
15、辨识,斐波那契递归实现,调用一次产生二个新的递归,调用次数呈指数增长,时间复杂度为O(2n)。这种使用递归的方式,被称为“天真的递归(Naive recursion)”。而使用递推算法求斐波那契数列,时间复杂度只是为O(n),44,http:/,数论问题,数论的本质是对素数性质的研究2000多年前,欧几里得证明了有无穷个素数。寻找表示所有素数的素数通项公式,或者叫素数普遍公式,是古典数论最主要的问题之一加法、减法和乘法这三种运算,在整数范围内可以毫无阻碍地进行整数之间的除法在整数范围内并不一定能够无阻碍地进行大数密码体系,至今仍然关系着国家的安全,45,http:/,测素子程序,测素子程序是解
16、决数论问题的核心,所以在数论应用算法中,几乎都要用到。因此它的计算效率,直接影响与数论相关的算法效率,46,http:/,一个测素子程序,如何改善测素子程序的效率?,47,http:/,组合计算,计算一些物品在特定条件下分组方法的数目。这些是关于排列、组合和整数分拆问题的求解,属于组合数学研究的范畴例如,求解从n个元素中取出m个元素的不同组合,用C(n,m)表示。根据组合的性质有如下公式成立:1.C(n,m)=n!/(m!*(n-m)!)但:13!是6227020800会超出32位机的字长,48,http:/,组合计算,另,用C(n,m)表示从n个元素中取出m个元素的不同组合数,也可使用递归的
17、形式定义:2.C(n,m)=C(n-1,m)+C(n-1,m-1),49,http:/,求n个数中取m个数的所能产生组合形式的数量,根据组合的递归形式的数学定义:公式(2)可知,从从n个元素中取出m个元素的基本案例和递归案例分别为:m=n,c=1m=1,c=nmn,c=C(n-1,m)+C(n-1,m-1),50,http:/,递归实现组合数,51,http:/,迭代法,迭代是数值计算中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程为实现这一过程所使用的方法统称为迭代法(Iterative Method),52,http:/,一个简单的代数方程,三种迭代法,5
18、3,http:/,三种迭代方法的比较,54,http:/,测试的目的,迭代法是数值计算中求解非线性方程的基本思想方法,其构造方法可以有多种多样关键使迭代收敛且有较快收敛速度取定某个初始值,分别计算(3.3)(3.5)迭代结果,它们的收敛性如何?对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?,55,http:/,牛顿迭代法求方程解,请用牛顿迭代法(3.6式)求方程在区间-3,3上误差不大于10-9的根,分别取初值X0=1.5,X0=0,X0=1分别进行计算,比较它们的迭代次数,56,http:/,牛顿迭代法基本原理,设,令其解为,得:,这称为f(x)=0的牛顿迭代格式,给定初值 x0,
19、迭代产生数列:,X0,X1,X2,Xk,57,http:/,牛顿迭代法的主要算法语句,迭代语句:x1=x0-(x0*3-x0-1)/(3*x0*2-1)决策语句abs(x1-x0)10*-9,58,http:/,牛顿迭代法流程,三个初值得到同样的结果但迭代次数有差异,59,http:/,End-3,基本策略,算法设计过程中,发现问题、分析问题及解决问题的思路、步骤与其他学科中的方法是一致的,就是寻找规律计算机科学家在算法研究过程中总结了一些具有普遍意义的算法策略和一些可循的规律,能够帮助我们较快地找到算法,61,http:/,基本策略,贪心策略分治策略回溯策略动态规划将递归算法转成非递归实现,
20、62,http:/,贪心策略,贪心算法在对问题求解时,总是做出在当前看来是最好的选择,因此它仅仅是某种意义上的局部最优解但在相当广泛范围内,对许多问题它能产生整体最优解或者是整体最优解的近似解“鼠目寸光”是对贪心算法的最好描述,63,http:/,贪心算法的特点,以当前情况为基础根据某个偏好原则作最优选择,而不考虑各种可能的整体情况省去了为寻找最优解要穷尽所有可能而必须耗费的大量时间采用自顶向下,以迭代的方法做出相关的贪心选择每做一次贪心选择就将所求问题简化为一个规模更小的子问题,64,http:/,贪心算法的特点,通过每一步贪心选择,可得到问题的一个局部最优解但由此得到的全局解却不一定都是是
21、最优的,65,http:/,求解数字三角形,有任意一个数字三角形,只能自第一层(顶层)向下行走,且只能走下接的相邻两个结点如第三层的1只能走第四层的3或1问能否找到一条路径,使得路径上的权值之和最大?,66,http:/,贪心法求解的算法设计,使用文件保存三角形的层数和所有数据描述一个n层的三角形,需要(n*(n+1))/2个数据和一个描述层次的数据;使用二维数组a,保存数字三角形的所有数据二维数组的大小为N*N,当然,其中有一半的元素为空值0;,67,http:/,贪心法求解的算法设计,使用line,colum 两个变量在二维数组中,作为数字定位的指针;x作为保存权值累计的变量;line的值
22、同时用来控制路径行走的循环,68,http:/,流程图,69,http:/,分治策略,分治法(Divide and Conquer)的基本思想是,将一个较大规模的问题分解为若干个较小规模的子问题,找出子问题的解,然后把各个子问题的解合并,从而得到整个问题的解分治法的分(Divide)是指将较大的问题划分为若干个较小的问题,然后用递归法求解子问题;分治法的治(Conquer)是指从小问题的解来构建大问题的解,70,http:/,分治策略,分治法算法中至少包含有两次递归过程,只有一个递归过程的算法在严格意义上不能算作分治算法,71,http:/,求用分治法进行幂运算降序求解,在公钥加密的RSA算法
23、中将高次幂运算转换为低次幂运算可以加快加密和解密的计算过程,从而提高了RSA算法的运算速度算法一:采用递推循环的方式实现类似a*b的计算过程;算法二:采用递归方式实现分治算法:a*b=(a*a)*(b/2)b=偶数a*b=a*(a*(b-1)b=奇数,72,http:/,分治法的计算效率,以求520为例,使用分治方法与不使用分治方法的递归算法比较,分治法可以节省近三分之二时间,73,http:/,分治方法乘幂运算流程图,74,http:/,回溯策略,如果问题的规模(数量)是按指数速度增加的,那么这些算法的能力将受到一定的限制在这种情况下,回溯法(Backtracking)也许是一个更好的选择回
24、溯法也叫穷尽搜索法(Brute-Force Search),其基本思想是尝试分步地去解决一个问题,75,http:/,现有n种物品,对1=i=n,已知第i种物品的重量为正整数Wi,价值为正整数Vi,背包能承受的最大载重量为正整数W现要求找出这n种物品的一个子集,使得子集中物品的总重量不超过W且总价值尽量大,0-1背包问题的数学描述,76,http:/,设有物件n项,重量为w(5,3,2),价值v(9,7,8),如果背包只能装5斤,求可以放背包的物品最大价值。使用回溯算法,决策树的建树过程为:深度有限,左侧优先,左侧分支不取东西,右侧取当前物件,0-1背包问题求解,(3,5,0),(2,3,8)
25、,(2,5,0),(1,2,7),(1,5,0),(1,3,8),i:红色,表示物品的编号aw:绿色,当前可用空间V:蓝色,当前物品价值,(1,0,15),(-,3,8),(-,5,0),(-,0,9),(-,2,7),(-,-3,16),(-,-2,17),77,http:/,k元组的概念,元组(tuple)是一种有穷序列,k个元素的序列称为k元组。与集合不同,集合不考虑元素的顺序,但元组中的元素有严格的顺序规定在0-1背包问题中的决策树中的元素和重量为w(5,3,2),价值v(9,7,8),皆为三元组k元组的概念在下一章的有限状态机和图灵机中还会用到,78,http:/,0-1背包回溯算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可视化计算 可视化 计算 算法 综合 加工
链接地址:https://www.31ppt.com/p-6075928.html