计算思维导论第3章课件

上传人:文**** 文档编号:242757008 上传时间:2024-09-02 格式:PPT 页数:60 大小:1.15MB
返回 下载 相关 举报
计算思维导论第3章课件_第1页
第1页 / 共60页
计算思维导论第3章课件_第2页
第2页 / 共60页
计算思维导论第3章课件_第3页
第3页 / 共60页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,3-,*,/60,算法,基础,第三章,1,第三章1,1974,年图灵奖获得者,Donald Ervin Knuth:,计算机科学就是算法的研究,The Art of Computer Programming,3.1,算法的概念,计算机,输入,输出,算法,问题,算法与计算机之间的关系,2,1974年图灵奖获得者Donald Ervin Knuth:,一、算法的起源,3.1,算法的概念,公元前,300,年:古希腊著名数学家欧几里得提出求最大公约数的一种算法,即辗转相除法又称,欧几里得算法。,公元,263,年:三国魏人刘徽注释,九章算术,中不仅对原书的方法、公式和定理进行一般的解释和推导,而且在其论述中多有创造。如他运用割圆术得出圆周率的近似值,3927/1250,3.1416,。,公元,825,年:波斯数学家,al-Khwarizmi,撰写了著名的,Persian Textbook,中概括了进行四则算术运算的法则。,Algorithm(,算法,),一词就来源于这位数学家的名字。,3,一、算法的起源3.1 算法的概念公元前300年:古希腊著名数,二、算法的定义,算法,3.1,欧几里得算法。,输入:正整数,m,、,n,输出:,m,、,n,的最大公约数,r,m mod n, 若,r,0,,输出最大公约数,n, 若,r0,,令,m,n,,,n,r,,转继续,3.1,算法的概念,算法,:是解决某一特定问题的一组有穷规则的集合。,算法,:对特定问题求解步骤的一种描述,是由若干条指令组成的有穷集合。,4,二、算法的定义算法3.1欧几里得算法。3.1 算法的概念,三、算法的特征,确定性,:算法中每一个步骤都是清晰的、无歧义,有穷性,:算法必须在有限步内终止,输 入,:有零个或多个输入,作为初始状态,输 出,:有一个或多个输出,作为计算结果,可行性,:算法中的操作可通过有限次基本运算来实现,3.1,算法的概念,判断一个算法的好坏主要依据如下标准,:,正确性,:在合理输入下能在有限时间内得出正确结果,可读性,:算法主要是为了人的阅读与交流,其次执行,健壮性,:算法应具备检查错误和对错误进行处理能力,效 率,:算法执行时所需计算机资源的多少,5,三、算法的特征确定性:算法中每一个步骤都是清晰的、无歧义3.,算法的描述目的,记录算法思想,方便他人理解算法,3.2,算法的描述,算法的描述方法,自然语言,流程图,伪代码,程序设计语言,6,算法的描述目的3.2 算法的描述算法的描述方法6,一、自然语言,3.2,算法的描述,自然语言,是人们日常进行交流的语言,如汉语、英语等,优点,:通俗易懂,即使没有学过算法也能看懂算法执行,缺点,:不够严谨,容易出现歧义和错误,例题,利用自然语言描述欧几里得算法。, 输入,m,、,n, 判断,n,是否为,0,,如果不为,0,,转步骤,否则转,m,对,n,取余,其结果赋值给,r,,,n,赋给,m,,,r,赋给,n,,转, 输出,m,,算法结束,7,一、自然语言3.2 算法的描述自然语言是人们日常进行交流的语,二、流程图,常用来描述算法的图形工具有,:流程图或程序框图、,N-S,图和,PAD,图。,优点,:直观形象,简洁明了。,缺点,:画起来费事,不易修改。,3.2,算法的描述,常用的流程图符号,:,8,二、流程图 常用来描述算法的图形工具有:流程图或程序框,例题,利用流程图描述欧几里得算法。,3.2,算法的描述,9,例题利用流程图描述欧几里得算法。3.2 算法的描述9,三、伪代码,3.2,算法的描述,伪代码是由带标号的指令构成,但是它不是,C,、,C+,、,Java,等通常使用的程序设计语言,而是算法步骤的描述。,伪代码介于自然语言和程序设计语言之间。,伪代码的具体表示,:,赋值语言:,分支语句:,ifthenelse,循环语句:,while, for, repeat until,转向语句:,goto,输出语句:,return,调用:,注释:,/,10,三、伪代码3.2 算法的描述 伪代码是由带标号的指令构,例题,利用伪代码描述欧几里得算法。,3.2,算法的描述,输入:正整数,m,、,n,输出:,m,、,n,的最大公约数,1 repeat,2 r m mod n,3 m ,n,4 n ,r,5 until r=0,6 return m,11,例题利用伪代码描述欧几里得算法。3.2 算法的描述输入:,四、程序设计语言,程序设计语言是一个能完整、准确和规则地表达人们的意图,并用以指挥或控制计算机工作的,符号系统,,如,C,、,C+,、,Java,等程序设计语言可以描述算法。,3.2,算法的描述,优点,:描述的算法能在计算机上直接执行,缺点,:抽象性差、不易理解且有严格的语法限制等。,12,四、程序设计语言 程序设计语言是一个能完整、准确和规则,输入:正整数,m,、,n,输出:,m,、,n,的最大公约数,int gcd(int m, int n), int,r;,do, r = m % n;,m = n;,n = r;,while(r),;,return m;,3.2,算法的描述,例题,利用,C,语言描述欧几里得算法。,13,输入:正整数m、n3.2 算法的描述例题利用C语言描述欧,算法是解决问题的方案,由于实际问题千奇百怪,因而制定出的解决方案也将千差万别。,3.3,算法的设计,算法设计的一般步骤,:,理解待求解问题,解决问题是设计算法的最终目标。除了需要分析问题的求解目标、输入数据和限制条件外,还要判断清楚待求解问题的种类,是否有现成的算法可以直接应用。,确定算法运行的环境,了解算法的运行环境,才能设计出可行且高效的算法。比如在小型的嵌入式环境中只能运行需要较小内存的算法,而对于并行分布式的运行环境,则要设计高效的并行算法。,14,算法是解决问题的方案,由于实际问题千奇百怪,因而制定,设计算法,设计算法是将算法具体化,即设计出算法的详细规格说明。也就是,首先确定算法所需要的数据结构,然后结合具体问题的特性来选择算法的设计策略,最后根据算法设计技术的原理描述算法的具体流程,(,流程图、伪代码和程序设计语言等,),。,分析算法,对所设计出的算法进行复杂性分析,考察其在时间和空间方面的计算开销。若算法在某些环节的计算开销较大,可有针对性地改进该环节,若整个算法的计算开销太大,则需要返回第步重新考虑采用新的算法设计技术来求解该问题。,编程实现,采用某种程序设计语言将设计好的算法实现出来。,3.3,算法的设计,15,设计算法3.3 算法的设计15,算法分类,:,数值算法,求解线性方程组、数值积分等,有特定的计算步骤,数值计算方法,课程,非数值算法,求解判定问题、最优化问题,等,,,需,要掌握算法设计技术,算法设计与分析,课程,软计算方法,遗传算法、,粒子群,算法、蚁群算法、人工神经网络等,计算智能,课程,3.3,算法的设计,16,算法分类: 数值算法 求解线性方程组,一、穷举法,(,又称蛮力算法,),穷举法,指在问题的解空间范围内逐一测试,找出问题的解。,它,是一种简单而有效的算法设计策略同时也是一种很容易应用的方法。,3.3,算法的设计,穷举法的,应用,国王的婚姻中国王使用的算法,旅行商问题,中逐条路线计算,密码学中的暴力破解法,图论中四色定理的证明,百钱买百鸡问题,17,一、穷举法(又称蛮力算法)3.3 算法的设计穷举法的应用17,案例一,暴力破解法是一种用穷举法实现的密码破译方法。,3.3,算法的设计,最原始、最基本的攻击方式,对密码进行逐一测试直到找到真正的密码。,原则上可以破译所有密码,但费时费力。,密码暴力破解软件:89Winrar QQ密码暴力破解软件,18,案例一暴力破解法是一种用穷举法实现的密码破译方法。3.3,案例二,四色定理,(,又称四色问题或四色猜想,),。,3.3,算法的设计,四色问题描述,:任何一张地图只用四种颜色就能使具有共同边界的国家着上不同的颜色。,数学语言表示,:将平面任意地细分为不相重叠的区域,每一个区域总可以用,1,、,2,、,3,、,4,这四个数字之一来标记,而不会使相邻的有公共边界的两个区域得到相同的数字。,证明四色定理(,穷举法,),:,利用数学理论推出证明所有例子可以归约到证明有限个特例上;,利用计算机程序产生了所有特例,(,大约,1700,个例子,),,通过穷举发现所有特例都是四着色的。,19,案例二四色定理(又称四色问题或四色猜想)。3.3 算法的,案例三,百钱买百鸡问题,百钱买百鸡:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,问翁、母、雏各几何?,3.3,算法的设计,意思是:公鸡每只,5,元、母鸡每只,3,元、小鸡,3,只,1,元,用,100,元钱买,100,只鸡,求公鸡、母鸡、小鸡的只数。,20,案例三百钱买百鸡问题 百钱买百鸡:鸡翁一,值钱五3.3,设鸡翁、鸡母、鸡雏的个数分别为,x,、,y,、,z,,根据题意可得如下方程,组,:,5x3yz/3100,xyz100,1x,20, 1y33, 3z,100, z mod 30,测试集合:,1,x20, 1,y33,,z=3,6,9,.,99,测试条件:,5x3yz/3100,xyz100,3.3,算法的设计,21,设鸡翁、鸡母、鸡雏的个数分别为x、y、z,根据题意可,巧妙和高效的算法很少来自于穷举法,但基于以下因素,穷举法仍是一种重要的算法设计策略:,穷举法几乎可以通用于任何领域的问题求解,可能是唯一一种解决所有问题的一般性方法;,即使效率低下,仍可用穷举法求解一些小规模的问题实例;,如果解决的问题实例不多,而穷举法可用一种可接受的速度对问题求解,那么花时间去设计一个更高效地算法是得不偿失的。,3.3,算法的设计,思考题,举例说明生活中的穷举法应用。,22,巧妙和高效的算法很少来自于穷举法,但基于以下因素,穷,二、回溯法,回溯法,是一种选优搜索法,按选优条件向前搜索,以达到目标。,在搜索过程中,能进则进,不能进则退回来,换一条路再试,通过此种方式提高搜索效率,减少不必要的测试。,3.3,算法的设计,回溯法的应用,迷宫问题,搜索引擎中的网络爬虫,八皇后问题,23,二、回溯法3.3 算法的设计回溯法的应用23,案例一,老鼠走迷宫,3.3,算法的设计,老鼠从迷宫入口出发,任选一条路线向前走,在到达一个岔路口时,任选一个路线走下去,,如此继续,直到前面没有路可走时,老鼠退回到上一个岔路口,重新在没有走过的路线中任选一条路线往前走。按这种方式走下去,直到走出迷宫。,24,案例一老鼠走迷宫3.3 算法的设计老鼠从迷宫入口出发,任,案例二,搜索引擎中的网络爬虫。,3.3,算法的设计,搜索引擎,是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。百度和谷歌等是搜索引擎的代表。,搜索引擎的组成,:下载、索引和查询。,25,案例二搜索引擎中的网络爬虫。3.3 算法的设计 搜,网络爬虫,:自动下载互联网所有网页。,网络爬虫原理,:图的遍历,从图中某一顶点出发访遍图中所有顶点,且使每个顶点仅被访问一次。,回溯算法,:图的深度优先遍历,(,广度优先遍历)。,3.3,算法的设计,深度优先遍历顺序:,V,1,V,2,V,4,V,8,V,5,V,3,V,6,V,7,26,网络爬虫:自动下载互联网所有网页。 3.3 算法的设计深度优,案例三,八皇后问题,。,在,88,格国际象棋的棋盘上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上问有多少种摆法?,3.3,算法的设计,27,案例三八皇后问题。在88格国际象棋的棋盘上摆放八个皇后,回溯法解八皇后问题思路,:逐行摆放皇后。初始第,1,行皇后放第,1,列;摆放第,i,行皇后时,从第,1,列开始,逐列判定是否与前,i-1,行皇后攻击,直到找到一个不攻击的位置,继续第,i+1,行的摆放;若第,i,行无摆放位置,则拿掉该行皇后,回溯至第,i-1,行,第,i-1,行皇后从当前位置的下一列开始判定,继续搜索。当第,1,行皇后的摆放位置超出棋盘时,全部求解过程结束。,(92,种,),3.3,算法的设计,28,回溯法解八皇后问题思路:逐行摆放皇后。初始第1行皇后,回溯法有通用解法之称,当一个问题没有显而易见的解法时,可尝试使用回溯法求解,这实际是与穷举法一致的,因其本质仍是穷举。需要注意,回溯和穷举虽然能解很多问题,但其算法效率可能很低。,3.3,算法的设计,回溯法的基本思想是,能进则进,不能进则退,。为了求得问题的解,先选择某一种可能情况向前探索,在探索过程中,一旦发现原来的选择是错误的,就退回一步重新选择,继续向前探索,如此反复进行,直至得到解或确定该问题无解。,回溯法是求解实际问题的一个重要算法,很多无法使用贪心算法和动态规划算法进行求解的问题,都可以使用回溯算法进行求解,并且可以保证得到问题的最优解。,29,回溯法有通用解法之称,当一个问题没有显而易见的解法时,三、递归算法,递归,:直接或间接地调用自身的算法。,递归思想就是用与自身问题相似但规模较小的问题来描述自己。,3.3,算法的设计,递归算法的应用,盗梦空间,(,美国影片,),欧几里得算法,德罗斯特效应,(Droste Effect),斐波纳契数列,(Fibonacci,数列,),30,三、递归算法3.3 算法的设计递归算法的应用30,案例一,德罗斯特效应,。递归的一种视觉形式,它指一张图片的某个部分与整张图片相同,如此产生无限循环。,3.3,算法的设计,31,案例一德罗斯特效应。递归的一种视觉形式,它指一张图片的某,案例二,1202,年,意大利数学家斐波纳契出版了他的,算盘全书,。他在书中提出了一个关于兔子繁殖问题:如果一对兔子每月能生一对小兔,(,一雄一雌,),,而每对小兔在它们出生后的第三个月里,又能开始生一对小兔,假定在不发生死亡的情况下,由一对出生的小兔开始,,50,月后会有多少对兔子?,分析,:第一个月只有一对兔子,第二个月仍只有一对兔子,第三个月兔子对数为第二个月兔子对数加第一月兔子新生的对数。同理,第,i,个月兔子对数为第,i-1,月兔子对数加第,i-2,月兔子新生的对数。即从第一个月开始计算,每月兔子对数依次为:,1,1,2,3,5,8,13,21,34,55,89,144,233,。,3.3,算法的设计,32,案例二1202年,意大利数学家斐波纳契出版了他的算盘全书,兔子繁殖的规律,3.3,算法的设计,月数,小兔子对数,中兔子对数,老兔子对数,兔子总数,1,1,0,0,1,2,0,1,0,1,3,1,0,1,2,4,1,1,1,3,5,2,1,2,5,6,3,2,3,8,7,5,3,5,13,33,兔子繁殖的规律3.3 算法的设计月数小兔子对数中兔子对数老兔,递归过程,3.3,算法的设计,F,5,=F,4,+F,3,F,4,=F,3,+F,2,F,3,=F,2,+F,1,F,2,=1,F,1,=1,F,3,=1+1=2,F,4,=2+1=3,F,5,=3+2=5,回溯阶段,递推阶段,34,递归过程3.3 算法的设计F5F4F3F2=1F3F4F5回,Fibonacci,数列递归算法的伪代码描述,:,Fibonacci,数列的递归算法,输入:正整数,n,输出:,Fibonacci,数列的第,n,项,Fib(n),1 IF n2,2 THEN RETURN 1,3 RETURN Fib(n-1)+Fib(n-2) /,调用自身,3.3,算法的设计,35,Fibonacci数列递归算法的伪代码描述:3.3 算法的设,递归算法的主要优点,:结构清晰、可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来了很大方便。,递归算法的主要缺点,:递归算法的运行效率相对较低,无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。通常的解决方法是消除递归算法中的递归调用,使递归算法转化为非递归算法。,3.3,算法的设计,36,递归算法的主要优点:结构清晰、可读性强,而且容易用数,四、分治法,3.3,算法的设计,分治算法,:将一个难以直接解决的大问题,分解成一些规模较小的子问题,以便,各个击破,分而治之,。如果子问题还比较大,可反复使用分治算法,直到最后的子问题可以直接得出它们的结果。由于分治算法的子问题类型常与原来的相同,因而很自然地使用递归算法。,分治法的,应用,国王的婚姻中宰相的策略,Google,的,MapReduce技术,二分查找,用于组织管理和军事等领域,37,四、分治法3.3 算法的设计 分治算法:将一个难以直接,案例一,Google,的,MapReduce技术,3.3,算法的设计,谷歌在全球有,36,个数据中心,服务器不计其数。它的三大核心技术是:,GFS(Google File System),:专用文件系统;,BigTable,:分布式数据库系统;,MapReduce,:并行计算编程模型。,38,案例一Google的MapReduce技术3.3 算法的,MapReduce,模型中两项核心操作,:,Map,映射;,Reduce,化简、归约,3.3,算法的设计,MapReduce,处理大数据过程是由划分、治理、合并三个步骤组成,是分治策略的完美应用。,39,MapReduce模型中两项核心操作:3.3 算法的,案例二,二分查找,3.3,算法的设计,常用的二分查找是一个典型的分治算法。,二分查找基本原理,:用于在,n,个元素的有序序列中查找指定元素,e,。将,n,个元素分成个数大致相同的两半,取,a,n/2,与欲查找的,e,作比较,,若,e=a,n/2,,则找到,e,,算法终止,若,ea,n/2,,则只需在数组,a,的后半部分继续二分查找,e,二分查找每次比较将数据减少一半,也称折半查找。,40,案例二二分查找3.3 算法的设计 常用的二分查找是,二分查找在列表中查找,John,的计算过程,3.3,算法的设计,41,二分查找在列表中查找John的计算过程 3.3 算法的设计4,分治策略是解决工作、学习和生活中常见问题的一种思维方法,它在组织管理和军事领域得到广泛的应用,例如:某大企业的销售公司,由于其许多产品优质而非常畅销,总部会到各地建立分支机构,这其中就蕴涵着分治思想。,3.3,算法的设计,再如:中国革命战争时期经常遇到敌军强大,因此采用,集中优势兵力,逐个击破,的分治策略往往能产生以弱胜强的优异战果,又如:各种大型体育赛事通常分为初赛和决赛,世界杯足球赛要从报名参赛的,200,多支球队中选出成绩最好的,32,支球队,难度很大,成本也高。因此通过分区预选赛选出成绩最好的,32,支球队进入决赛圈,这种做法也包含分治思想并降低了难度和复杂度。,42,分治策略是解决工作、学习和生活中常见问题的一种思维方,五、贪心法,1.,问题的提出,3.3,算法的设计,假设有,3,种硬币,它们的面值分别是,1,元、,5,角、,1,角。现在有一个小孩买了价值,6,元,2,角的东西,并给售货员,10,元钱。当售货员找给小孩零钱时,希望她找给小孩的硬币数目最少。,3 3,1 0,3 8,2 2 2 2,3 2 1 0,3 8 13 18,这种简单地从具有最大面值的币种开始,按递减的顺序考虑各种币种的方法称为,贪心法,,或,启发式搜索法,。,43,五、贪心法3.3 算法的设计 假设有3种硬币,它们的面,2.,贪心算法,3.3,算法的设计,贪心法的基本思想,:将待求解的问题分解成若干个子问题进行分步求解,且每一步总是做出当前最好的选择,即得到局部最优解,再将各个局部最优解整合成问题的解。,贪心法体现了一种,快刀斩乱麻,的思想,以当前和局部利益最大化为导向的问题求解策略。,利用贪心法求解问题的过程:,分解:将原问题分解为若干个相互独立的阶段;,解决:对每个阶段求局部的最优解,即进行贪心选择,合并:把各个阶段的解合并为原问题的一个可行解。,44,2.贪心算法3.3 算法的设计 贪心法的基本思,利用贪心法对问题进行求解的过程,3.3,算法的设计,45,利用贪心法对问题进行求解的过程3.3 算法的设计45,3.,贪心法的应用,3.3,算法的设计,案例一,田忌赛马,战国时期,齐威王与大将田忌赛马,齐威王和田忌各有三匹好马:上马、中马与下马。比赛分三次进行,每次赛马以千金作赌。由于两者的马力相差无几,而齐威王的马分别比田忌相应等级的马要好,所以大家都认为田忌必输无疑。,田忌采纳了门客孙膑的意见,用下马对齐威王的上马,用上马对齐威王的中马,用中马对齐威王的下马,结果田忌以比胜齐威王而得千金。,46,3.贪心法的应用3.3 算法的设计 案例一,将齐王的马、田忌的马均按上、中、下马顺序排列,齐王依次出马,,孙膑的贪心选择策略,:,若剩下的最强的马都赢不了齐王剩下的最强的马,选择用最差的一匹马对阵齐王最强的马;,若剩下的最强的马可以赢齐王剩下的最强的马,选择用这匹马去赢齐王剩下的最强的马;,若剩下的最强的马和齐王剩下的最强的马打平的话,可以选择打平或者用最差的马输掉比赛。,3.3,算法的设计,47,将齐王的马、田忌的马均按上、中、下马顺序排列,齐王依,案例二,电缆铺设,假设要在,n,个城市之间铺设光缆,铺设光缆费用很高,且各个城市之间铺设光缆的费用不同,问如何铺设,使得,n,个城市的任意两个之间都可以通信,且使铺设光缆的总费用最低?,3.3,算法的设计,可用图论中的最小生成树求解,求解最小生成树算法是贪心法,48,案例二电缆铺设3.3 算法的设计可用图论中的最小生成树求,利用贪心法求解最小生成树,其中一种贪心选择策略是:贪心选择权值最小的边,若与之前加入的边构成回路,则放弃;否则,加入最小生成树。,3.3,算法的设计,电缆铺设的,最小生成树,49,利用贪心法求解最小生成树,其中一种贪心选择策略是:贪,贪心算法是最接近于人类日常思维的一种问题求解方法,它已在人类工作和生活的各个领域得到广泛的应用。,例如:公司招聘新员工是从一批应聘者中招收最能干的人。,再如:学校招生是从众多报考者中招收一批最好的学生。,这种按照某种标准挑选最接近该标准的人或物的做法就是贪心算法。,3.3,算法的设计,50,贪心算法是最接近于人类日常思维的一种问题求解方法,它,六、动态规划,1.,问题的提出,3.3,算法的设计,动态规划是解决多阶段决策最优化问题的一种方法。,案例一,GPS,中的最优路径。,全球定位系统,GPS(Global Positioning System),可以为我们计算出满足各种不同要求的、从出发地到目的地最优路径,可能是花费时间最短,也可能是过路费最少。,GPS,寻找最优路径的算法就是,动态,规划算法。,51,六、动态规划3.3 算法的设计动态规划是解决多阶段决策最优化,假设计算下图中顶点0到顶点6的最短路径。,第0阶段,第1阶段,第2阶段,第3阶段,第4阶段,3.3,算法的设计,52,假设计算下图中顶点0到顶点6的最短路径。第0阶段第1,定义,costi,:从顶点,0,到顶点,i,的最短路径。,第,0,阶段:,cost0=0,第,1,阶段:,cost1=cost0+4=4,cost2=cost0+5=5,第,2,阶段:,cost3=min,cost0+8,cost1+4,cost2+5=8,第,3,阶段:,cost4=min,cost1+6,cost3+8=10,cost5=min,cost2+7,cost3+9=12,第,4,阶段:,cost6=min,cost4+5,cost3+9,cost5+4=15,根据计算,从顶点,0,到顶点,6,的最短路径值为,15,。,从顶点,6,向前回溯,最短路径为,0146,。,3.3,算法的设计,53,定义costi:从顶点0到顶点i的最短路径。3.3 算法,2.,动态规划算法,3.3,算法的设计,动态规划是美国数学家,R.Bellman,等人于,1951,年在研究多阶段决策过程的优化问题时创立的一种解决问题的新方法。,在现实生活中,有一类问题可以将其活动过程分解成若干个相互联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。这种将一个问题看作是一个前后相互关联且具有链状结构的多阶段过程称为多阶段决策过程,将解决多阶段决策的最优化的过程称为动态规划算法,。,54,2.动态规划算法3.3 算法的设计 动态规划是,动态规划法主要适用于最优化问题的求解,:这类问题会有多种可能的解,每个解都有一个值,而动态规划找出其中最优(最大或最小)值的解。若存在若干个最优值的解的话,它只取其中的一个。,3.3,算法的设计,动态规划问题求解的基本思想,:将待求解的问题分解为若干个互相联系的子问题,然后按自底向上的顺序推导出原问题的解。通过存储子问题的解,可以避免在求解过程中重复多次求解同一个子问题,从而可以提高该算法的求解效率。动态规划算法实质是分治思想和冗余解决方法的结合。,55,动态规划法主要适用于最优化问题的求解:这类问题会有多,3.,动态规划的应用,3.3,算法的设计,案例二,Fibonacci,数列,。,F1=1,F2=1,Fi=Fi-1+Fi-2,计算,Fn,(n3),动态规划求,Fibonacci,数列的伪代码描述如下:,输入:正整数,n,输出:,Fibonacci,数列的第,n,项,Fib(n),1 F1,F2,1,2 FOR i=3 to n,3DO Fi,Fi-1+Fi-2,4 RETURN Fn,56,3.动态规划的应用3.3 算法的设计 案例二,动态规划已在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用,最短路线、库存管理、资源分配、设备更新、排序和装载等问题运用动态规划算法求解比较方便,例如:将动态规划方法运用于经济学领域的最优投资与消费选择策略的求解,可以得到连续时间下两类资产的最优投资与消费问题的解决方案。,再如:动态规划也适用于人生规划,它是人类智慧的体现,千里之行,始于足下,任何一项伟大事业的完成总是从小事做起的,小目标的达成是实现大目标的基础。,3.3,算法的设计,57,动态规划已在经济管理、生产调度、工程技术和最优控制等,3.4,算法的评价和分析,一、算法的正确性,一个正确的算法是对每一个输入数据产生对应的正确结果并且终止。而错误的算法对于某些输入数据要么不会终止,要么在终止前给出的不是预期的正确结果。,算法确认,:设计出算法后,证明该算法对所有可能的合法输入都能计算出正确结果的工作过程。,程序证明,:用算法语言描述构成的程序在计算机上运行,也应证明该程序是正确的。,算法确认和程序证明的研究难度很大,(D.Gries,吴文俊,),。,58,3.4 算法的评价和分析一、算法的正确性算法确认:设计出算法,二、算法的复杂性,3.4,算法的评价和分析,算法的时间复杂度,:度量算法的运行时间。,多项式时间复杂度,:,1,、,log,2,n,、,n,、,nlog,2,n,、,n,2,、,n,3,指数时间复杂度,:,2,n,、,n!,影响程序执行时间的因素很多,如算法本身、输入数据量、计算机硬件配置、编程语言和编译器等。,算法的空间复杂度,:为解问题实例而需要的存储空间。,算法的存储空间不包含为容纳输入数据而分配的存储空间,也不包含实现算法的程序代码和常数以及程序运行时所需要的额外空间,而仅是算法所需要的工作空间。,算法设计中经常可以,以空间换时间,以时间换空间,。,59,二、算法的复杂性3.4 算法的评价和分析算法的时间复杂度:度,本章小结,算法的概念,:起源,定义,特征,算法的描述,:目的,方法,(,四种,),自然语言、,流程图,、,伪代码,、程序设计语言,算法的设计,(,一般步骤,分类,),穷举法:暴力破解法、四色定理、百钱买百鸡 回溯法:老鼠走迷宫、网络爬虫、八皇后问题 递归法:欧几里得、德罗斯特效应、,Fibonacci,分治法:国王的婚姻、,MapReduce,、二分查找 贪心法:,货币,支付、田忌赛马、电缆铺设 动态规划:,GPS,最优路径、,Fibonacci,数列,算法的评价和分析,算法的正确性,算法的复杂性,(,时间、空间,),60,本章小结算法的概念:起源,定义,特征60,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!