前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法基础+分治策略(算法复习第1弹)

算法基础+分治策略(算法复习第1弹)

作者头像
张俊怡
发布2018-04-24 13:32:58
9840
发布2018-04-24 13:32:58
举报

马上就要算法考试了,好紧张,先复习第一波....

参考文献(算法导论)+(张莉老师ppt)


函数的增长,对算法效率的描述

渐进记号:Θ、Ω、O、o、w(那个很像w的符号,不记得咋打出来了)

Θ标记(最常用):存在正常量c1和c2,使得当n 足够大的时候,能够让函数 f(n) 夹入c1g(n)和c2g(n)之间

如图:

f(n)=Θ(g(n)) 图一

称g(n)是f(n)的一个渐进紧确界,也就是f(n)得在c1g(n)和c2g(n)之间,不得越界

举个例子证明(考点):

证明这个式子

图二

Ω标记:渐进下界

如图,和图一相比,它没有上界要求,图一上下均不能越界,它只有下界要求,所以叫做渐近下界

图三

O:渐近上界

和Ω标记类似,上边不越界,下边不做要求

图四

o标记:非渐进紧确的上界,图一Θ是渐进紧确的,而O可以是Θ

也可以不是,而o有点像集合中真包含的概念,它不是Θ的O

w(那个很像w的符号,不记得咋打出来了)标记符:和o相反,非渐进紧确的下界

通过上边几个图的理解,下边表里边的式子就很好理解了

左边是满足的表达式,右边是两者的相对增长速度

图五

这也是比较两个函数之间增长速度的方法(n足够大的时候,求函数之比的极限,根据结果判断)

图六


分治策略

概念:将原问题分解成子问题,子问题与原问题一样,至少规模更小,直到规模足够小,递归停止,问题得以解决

包括的例子有,归并排序、实验中的gray码问题

分治算法的分析:

分治法解题的一般步骤

(1)分解,将要解决的问题划分成若干规模较小的同类问题;

(2)求解,当子问题划分得足够小时,用较简单的方法解决;

(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

三个求解分治法Θ或Ω的方法

1、代入法

即假设一个界,然后数学归纳法证明

这种方法需要经验的积累,可以通过转换为先前见过的类似递归式来求解。

2、递归树法

在递归树中,每一个结点都代表递归函数调用集合中一个子问题的代价。将递归树中每一层内的代价相加得到一个每层代价的集合,再将每层的代价相加得到递归式所有层次的总代价。

如归并排序,忘了归并排序的可以参照这里  归并排序

这是其递归式

图七

这是递归树的式子(主方法常用这个式子)

图八

递归树式子需要解释的地方有

cn其实就是一个函数f(n),这个函数所代表的意思是分解和合并步骤所花费的时间,哈哈

其(f(n))复杂度为Θ(n),由此再去理解图七中的式子就好理解了

下面来用递归树的方法求分治算法的渐进界:

下边这是ppt上的例子,怎么理解这个递归树例子呢,最顶层是cn,从它开始递归,首先你可以把n理解为2的某次幂,比如,n是2的4次幂,所以整个递归树就有(logn)也就是4层,每一层的代价刚好都是cn,可求出其T(n),第5层也就是常量的,为Θ(n),也可以回去图八和图七解释,哈哈

图九

这个例子也一样,只不过不是递归成一样的问题,是两个一样的子问题

图十

3、主方法法

它可以瞬间估计一个递推式的算法复杂度。但是我们知道,这后面肯定是严格的数学证明在支撑着,对于我们用户来说,我们只用知道怎么用就行了。

T(n) = aT(n/b) + f (n) ,函数f(n),这个函数所代表的意思是分解和合并步骤所花费的时间

下图就是主定理,记住就行,也可以自己去推导一蛤~

图十一

PPT上这样说主定理,一样的

图十二

图十三

下面贴一段gray码问题的分治解法


图十四

第一次写简书,写的乱乱的,明天将推出动态规划和毛概,希望写的更好,祝大家期末取得好成绩~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.12.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档