还剩27页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
递归与分治的PPT课件大纲汇报人添加目录标题分治的应用0104递归与分治的概念递归与分治的优缺点0205目录递归与分治的经典案递归的应用例分析0306添加章节标题递归与分治的概念递归的定义递归是一种编程技巧,通过函数调递归函数必须有一个或多个递归情用自身来解决问题况,用于将问题分解为更小的子问题添加标题添加标题添加标题添加标题递归函数必须有一个或多个基本情递归函数必须能够将子问题的解组况,用于结束递归合成原问题的解分治的定义分治是一种解决问题的策略,将问题分解为多个子问题,然后分别解决子问题,最后将子问题的解合并得到原问题的解分治策略适用于可以分解为多个子问题的问题,如排序、查找等分治策略的关键在于如何分解问题,以及如何将子问题的解合并得到原问题的解分治策略的优点是可以降低问题的复杂度,提高解决问题的效率递归与分治的联系与区别递归一种编程技巧,通过函数调用自身来解决问题分治一种算法思想,将大问题分解为小问题,分别求解联系递归和分治都可以用来解决复杂问题,都需要将问题分解为更小的子问题区别递归需要函数调用自身,而分治不需要;递归适用于解决具有重复性的问题,而分治适用于解决具有可分解性的问题递归的应用递归在数学中的应用阶乘计算n!=n*斐波那契数列Fn=汉诺塔问题将n个盘子n-1!Fn-1+Fn-2从A柱移动到C柱背包问题给定一组物品和一迷宫问题寻找从起点到排序算法如快速排序、个背包,求在不超过背包容量终点的最短路径归并排序等的情况下,能装入的最大价值递归在算法中的应用递归在排序算递归在搜索算递归在树形数递归在动态规法中的应用,法中的应用,据结构中的应划中的应用,如快速排序、如深度优先搜用,如二叉树、如背包问题、归并排序等索、广度优先红黑树等最短路径问题搜索等等递归在实际问题中的应用排序问题快速排序、归并排序等图论问题最短路径、最小生成树等动态规划问题背包问题、最长公共子查找问题二分查找、深度优先搜索等序列等计算机科学问题编译器设计、操作系数学问题阶乘、斐波那契数列等统等分治的应用分治在数学中的应用快速排序将数组分为两部分,分别排序,然后合并矩阵乘法将矩阵分为四个部分,分别计算,然后合并快速傅里叶变换将信号分为两部分,分别计算,然后合并快速数论算法将大数分解为两部分,分别计算,然后合并分治在算法中的应用快速排序将数组分为两部分,分别排序,最后合并归并排序将数组分为两部分,分别排序,最后合并矩阵乘法将矩阵分为四个部分,分别计算,最后合并快速傅里叶变换将信号分为两部分,分别计算,最后合并快速搜索将搜索空间分为两部分,分别搜索,最后合并动态规划将问题分为两部分,分别求解,最后合并分治在实际问题中的应用快速排序将数组分为两部分,分别排序,然后合并归并排序将数组分为两部分,分别排序,然后合并矩阵乘法将矩阵分为四部分,分别计算,然后合并快速傅里叶变换将信号分为两部分,分别计算,然后合并查找问题将问题分为两部分,分别查找,然后合并图的遍历将图分为两部分,分别遍历,然后合并递归与分治的优缺点递归的优缺点优点代码简洁,缺点可能会导优点适用于解决缺点不适用于解决具有循环性质的易于理解致栈溢出,影响具有递归性质的问问题,如循环链表题,如树、图等程序性能等分治的优缺点优点易于理解和实现适用于解决大规模问--题可以并行处理--易于理解和实现-适用于解决大规模问题-可以并行处理缺点递归深度过大可能导致栈溢出递归次数过--多可能导致效率降低某些问题不适合使用分治法解-决-递归深度过大可能导致栈溢出-递归次数过多可能导致效率降低-某些问题不适合使用分治法解决如何选择递归与分治l递归的优点代码简洁,易于理解,适合解决具有递归性质的问题l递归的缺点可能会导致栈溢出,不适用于大规模数据l分治的优点可以并行处理,适合解决大规模数据问题l分治的缺点代码复杂,不易理解,需要更多的计算资源递归与分治的经典案例分析斐波那契数列的递归实现斐波那契数列的定义每个递归实现定义两个函数,一递归终止条件当n为0或1数字是前两个数字的和个用于计算第n个斐波那契数,时,返回n一个用于递归调用递归过程当n大于1时,递归递归实现代码示例Python语递归实现优缺点优点是代码调用计算第n-1和第n-2个斐波言实现斐波那契数列的递归函简洁,缺点是效率较低,容易那契数,并返回它们的和数导致栈溢出归并排序的分治实现单击此处输入你的项正文,文字是您思想的提炼,请尽量言简意赅的阐述观点单击此处输入你的项正文,文字是您思想的提炼,请尽量言简意赅的阐述观点a.将序列分为两部分b.递归地对两部分进行排序c.合并两部分单击此处输入你的项正文,文字是您思想的提炼,请尽量言简意赅的阐述观点快速排序的递归与分治实现比较快速排序的基本思想通过选取一个基准元素,将数组分为两部分,一部分小于基准元素,另一部分大于基准元素递归实现通过递归调用快速排序函数,分别对两部分进行排序分治实现将数组分为两部分,分别进行排序,然后合并两部分比较递归实现更加直观,易于理解,但可能会导致栈溢出;分治实现更加高效,但实现起来较为复杂堆排序的递归与分治实现比较堆排序的递归实现通过不断调整数组元素的位置,将最大元素放到数组末尾,然后递归处理剩余元素堆排序的分治实现将数组分为三部分,分别处理最小元素、最大元素和中间元素,然后合并三部分的结果递归与分治实现比较递归实现中,函数调用栈会占用大量内存,而分治实现中,内存占用较少;但递归实现代码更简洁易懂适用场景递归实现适用于内存充足且代码可读性要求高的场景,分治实现适用于内存有限且需要优化性能的场景递归与分治的注意事项避免无限递归确保递归函数有终止条件使用递归深度限制检查递归条件是否正确避免在递归函数中修改全局变量注意递归效率控制递归深度设置递归深优化递归算法使用尾递归度限制,避免栈溢出或迭代代替递归避免重复计算使用记忆化考虑空间复杂度递归需要额外的栈空间,可能导致空间不搜索或动态规划足分治时注意数据规模和分解程度分解程度分治时,需要考虑递归深度分治时,需要考虑分解的程度,避免分解过度导递归的深度,避免递归过深导致计算复杂度增加致栈溢出数据规模分治时,需要考虑空间复杂度分治时,需要考数据的规模,避免数据量过大虑空间复杂度,避免空间浪费导致计算时间过长导致内存不足感谢您的观看汇报人。
个人认证
优秀文档
获得点赞 0