- 0
- 0
- 约4.07万字
- 约 20页
- 2025-10-17 发布于北京
- 举报
第3讲递归与分治策略
课程教学的基本要求:
理解递归概念,熟练掌握递归程序的设计方法
理解分治法基本思想和程序设计框架
掌握2~3个分治法求解问题的程序实现方法。
掌握这些算法的时间分析方法
[找出伪币]给你一个装有16个硬币的袋子。16个硬币中有一个是的,并且那个
的硬币比真的硬币要轻一些。你的任务是找出这个的硬币。
为了帮助你完成这一任务,将一台可用来比较两组硬币重量的仪器,利用这台仪器,可
以知道两组硬币的重量是否相同。
有12个球,其中有1个球的重量与其他11个球不等。其他11个球的重量都一样。条件
是只有一架天平;最少秤多少次,把那个球找出来。
一、分治法
任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,
越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1
时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。
而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当
的。
分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问
题,以便各个击破,分而治之。
如果原问题可分割成k个子问题,1k≤n,且这些子问题都可解,并可利用这些子问
题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题
的较小模式,这就为使用递归技术了方便。在这种情况下,反复应用分治,可以使
子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。
这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,
并由此产生许多高效算法。
1、什么是分治算法
分治算法是:(分而治之)
原问题成互不相交的子问题
同样的方法求解子问题
把子问题的解合并成原问题的解
2、分治法所能解决的问题一般具有以下几个特征:
该问题的规模缩小到一定的程度就可以容易地解决;
该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。
Lecture3RecursionandDivide
andConquerStrategy
Basicrequirementsforcourseteaching:
Understandtheconceptofrecursionandbeproficientinthe
designmethodofrecursiveprogramsUnderstandthebasici
deasandprogrammingframeworkofthedivide-and-conquer
methodMaster2~3programimplementationmethodsfor
solvingproblemsusingthedivide-and-conquermethod.Master
thetimeanalysismethodsofthesealgorithms
[FindtheCounterfeitCoins]Givesyouabagcontaining16coins.Oneofthe16coinsiscounterfeit,andthecounterfeit
coinislighterthantherealcoin.Your
原创力文档

文档评论(0)