【五大算法策略汇总】01 - 递归 与 分治策略

递归

Recursion

递归算法:直接或间接地调用自身的算法称为递归算法。

递归函数:用函数自身给出定义的函数成为递归函数。

分治策略

Divide and Conquer

设计思想将一个难以直接解决的大问题分割成一些规模较小的相同问题,以便逐个击破

由分治法产生的子问题往往是原问题的较小模式,这为使用递归技术提供了方便,我们可以通过反复应用分治,从而使得问题的规模不断缩小,直到使得子问题变得容易求解。

  • 并非一切递归函数都能够用非递归方式定义。
  • 当一个函数及它的一个变量由函数自身定义时,称这个函数为双递归函数。——Ackerman函数

分治策略设计算法的要点

  • 子问题与原问题具有相同的性质
  • 子问题的求解彼此独立
  • 划分时子问题的规模应尽可能均衡(可获得更低的复杂度)

分治策略分解的子问题可通过递归/迭代方法进行求解

递推方程
对于方程(1),可以使用迭代法、递归树(换名法,用2k来替换n)方法求解
对于方程(2),可以使用迭代法、换元法、递归树、主定理等方法求解

换名法求解方程(2)
换名法

分治策略是一种设计思想,而递归或迭代是一种求解的手段,二者不可混为一谈


分治策略的算法设计模式如下

divide-and-conquer(P){
	if(|P| <= n0){        //n0是问题规模阈值,表示此处问题规模小到能够直接求解
		adhoc(P);     //adhoc()是分治法的基本子算法
	}
	divide P into smaller subinstances P1,P2,P3...Pk;
	for(int i = 1; i <= k; i++){
		yi = divide-and-conquer(Pi);
	}
	return merge(y1,y2,y3...yk);       //merge()是分治法的合并子算法
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值