分治与递归

分而治之

从国家治理到体育竞赛,分治的思想贯穿到人类生活生产的很多方面。行省制的建立就是分而治之思想的体现,一个庞大的帝国幅员辽阔人口众多,单单依靠中央政府的直接管理肯定会有鞭长莫及的情况。于是依靠老祖先的智慧有了行省制、郡县制、百户千户制,大大提高了国家的治理能力。世界杯选拔按大洲分赛区、班级里分学习小组…

分治策略

分治问题可以总结为以下执行策略:

  1. 一个大问题可以分解为小问题,小问题与大问题的解结构相同,但是小问题的规模更小。
  2. 用递归策略来解决小问题。
  3. 将小问题的解合并组成大问题的解。
    以上策略说明分治方法的重点在于递归,分治算法的核心就是递归,分治的定义里面就有递归。分治把大问题分解成小问题,逐级分解到极容易的小问题,所以分治问题另外两个重点就是分解和合并过程。

递归表达式

T(n) = aT(n/b)+f(n)
a:每次分解的子问题的个数,理论上大于等于1。
b:问题分治的规模的缩小系数,理论上大于1。
f(n):分解和合并所用成本。
递归表达式的解法有递归树法、替换解法、大师解法。

递归树法

以T(n) = T(n/4)+T(n/2)+n^2为例。
在这里插入图片描述
T(n)= n^2* (1+5/16+(5/16)^2+ (5/16)^3…) = θ(n^2);

替代解法

替换解法的步骤如下:

  1. 猜一个结果
  2. 用数学归纳法带入验证
  3. 求解公式里的系数的取值范围

替换法缺点明显,一次就猜到合适的结果不太容易特别是对于比较复杂的递归表达式。

大师解法

这个名字起得霸气,反正不是我起得,大师解法用法很广功能强大,名副其实?
以递归表达式T(n) = aT(n/b)+f(n)推起:
在这里插入图片描述
由以上结果推导出T(n)至于两部分有关,a,b是常量,第一部分是已决定的,由渐进表示的性质可得,T(n) = max(第一部分,第二部分);
这里有四种情况:小于,大于,等于,无法比较。
如果f(n)<θ(nlogba)则T(n) = θ(nlogba);
如果f(n)>θ(nlogba)则T(n)= f(n);
如果f(n) = θ(nlogba) 带入θ(nlogba)到第二部分,化简可得
T(n) =nlogba *logbn
无法比较的情况:不做介绍。

举例

乘方an
分析:如果n为偶数,an = an/2*an/2,如果n为奇数,
an = an/2*an/2 x a;
所以递归表达式为 T(n) = T(n/2) + θ(1);
根据大师解法a = 1,b = 2,所以第一部分等于θ(1),于是使用的第二种情况f(n) = θ(nlogba),所以T(n) = logn;

n个球找一个次品
n个球的重量一样除了一个次品例外,一杆秤要求以更快的速度找到这个次品。
方法一:容易想要此题类似于折半查找,把球分成两等分(多出来一个也不影响),把其中一份再分成两等分,如果这两等分一样,次品在另外一半球里。这样就可以知道这个次品是重了还是轻了,类似于不断分下去直到找到这个次品。递归表达式为
T(n) = T(n/2) +θ(1); 所以T(n) = logn;
方法二:第一种方法看上去已经很优秀了,但是还有更好的方法。
把球三等分,称其中的两份就能确定次品在那一堆里。
T(n) = T(n/3) + θ(1); 所以T(n) = log3n;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值