递归与分治策略,基本思想
写在前面:由于作者的能力有限,所写内容仅供参考嗷,友好交流,不要问候亲妈谢谢大家
递归
递归的概念
- 直接或间接地调用自身的算法称为递归算法。用函数自身给出定义的函数称为递归函数。
- 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。
- 分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。
递归函数
定义
用函数自身给出定义的函数
两个条件
- 边界条件
- 递归方程
双递归函数
当一个函数及它的一个变量是由函数自身定义时,称这个函数是双递归函数。0
优缺点
优点 | 缺点 |
---|---|
简洁优雅 | 执行效率并不高 |
正确性易于证明 | 堆栈空间耗费高 |
分治
基本思想
- 将要求解的较大规模的问题分割成k个更小规模的子问题。
- 对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止。
- 将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
适用的问题
- 该问题可以分解为若干个规模较小的相同问题;
- 该问题所分解出的各个子问题是相互独立的,即子问题之间不 包含公共的子问题;
- 该问题的规模缩小到一定的程度容易解决;
- 利用该问题分解出的子问题的解可以合并为该问题的解。
如果各子问题是不独立的,则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然也可用分治法,但一般用动态规划较好。
要点
- 分几个?子问题规模多大呢?
- 人们从大量实践中发现,在用分治法设计算法时,最好使子问题的规模大致相同。即将一个问题分成大小相等的k个子问题的处理方法是行之有效的。这种使子问题规模大致相等的做法是出自一种平衡(balancing)子问题的思想,它几乎总是比子问题规模不等的做法要好。
- 子问题如何求解。
- 合并原问题的解。
- 分析复杂度。
标签:策略,递归,递归函数,分治,使子,问题,函数 来源: https://blog.csdn.net/wakakawsad/article/details/115433140
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。