计算机算法设计与分析笔记(二)——递归与分治

1.递归

1.1 定义

递归函数:用函数自身定义的函数
递归函数的两个要素:边界条件与递归方程
递归算法:直接或间接调用自身的算法

1.2 双递归函数

当一个函数及它的一个变量是由函数自身定义时,则称这个函数为双递归函数;

例如:
Ackerman函数,其定义如下:
A(1,0)=2
A(0,m)=1 m≥0
A(n,0)=n+2 n ≥2
A(n,m)=A(A(n-1,m),m-1) n,m ≥1

1.3 典型递归问题

全排列
整数划分问题

1.4 递归的优缺点

优点:
1)算法简明;
2)正确性易证明,是分析、设计的有力工具。

缺点:
1)执行效率不高;
2)堆栈空间耗费

2 分治法

2.1设计思想

设计思想是,将规模为n的问题分解为k个规模较小的子问题,使这些子问题相互独立且与原问题相同递归地解这些子问题,然后各个子问题的解合并得到原问题的解

[注意]:在用分治法设计算法时,最好使子问题的规模大致相同。 即将一个问题分成大小相等的k个子问题

2.2 能用分治法解决的问题的特征

分治法所能解决的问题一般具有以下特征:

  1. 该问题可以分解为若干个规模较少的相同问题
  2. 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题
  3. 该问题的规模缩少到一定规模就可以容易地解决,问题规模不能无休止地缩小下去
    4.利用该问题分解地子问题的解可以合并为该问题的解

2.3 分治法的求解过程

分治法的求解过程:

  1. 分解:把原问题分解为若干个规模较小、相互独立,与原问题相同的子问题;
  2. 求解:若子问题规模较小且容易被解决则直接解,否则再继续分解为更小的子问题,直到容易解决;
  3. 合并:将已求解的各个子问题的解,逐步合并为原问题的解

2.4算法时间复杂性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 适用问题

大数相乘、矩阵乘法、快速富立叶变换、
棋盘覆盖、排序、选择等。

2.6典型例题

二分搜索问题
棋盘覆盖

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值