当前位置:首页 > > 充电吧
[导读]算法设计中经常会用到递归,利用递归式的方法可以清晰地显示算法的整个过程,而对于分析算法的复杂度,解递归式就有了用处,这里的方法来自于《算法导论》。(一)代换法:实质上就是数学归纳法,先对一个小的值做假


算法设计中经常会用到递归,利用递归式的方法可以清晰地显示算法的整个过程,而对于分析算法的复杂度,解递归式就有了用处,这里的方法来自于《算法导论》。

(一)代换法:

实质上就是数学归纳法,先对一个小的值做假设,然后推测更大的值得正确性。由于是数学归纳法,那么我们就需要对值进行猜测。现在,我们看下面这个例子:


我们先假设一个结论T(n) = O(lg(n - b)),并且假设对T(n / 2上取整)成立(这就是数学归纳法了),那么把T(n / 2上取整)用假设的结论进行代换,我们有T(n) <= lg((n - b)) / 2上取整)

这是一个很简单的例子,但是其中有些事情还是要交代的。

一个是结论的猜测不是一个容易的事情。另一个是在上面的例子中我没有直接下结论说T(n) = O(lg(n)),而是减去了一个常数b,这是为什么呢?答案是:we can prove something stronger for a given value by assuming something stronger for smaller values.还有一点值得说明,请看下面这个例子:


这里出现了sqrt(n),我们采用变量代换的方法:令n = 2 ^ m,则上式变为T(2 ^ m) = 2T(2 ^ (m / 2) ),再设S(m) = T(2 ^ m),则得到S(m) = 2S(m / 2) + 1。我们先假设S(m) = m - b

这里我们采用了变量代换的方法。如果假设时,感觉变量不明朗,那么这是一种很有效的方法。

(二)递归树方法:

利用递归树方法求算法复杂度我想最好的例子就是归并排序了,这里我不想拿归并排序做例子,而只是用书中一些更简单形象的例子来说明:

根据上式我们建立递归式T(n) = 3T(n / 4) + cn^2,这里我们抛去上下界函数的影响(sloppiness that we can tolerate),并且把Theta(n ^ 2)用cn^2代替。下面建立递归树模型:






在递归树中,每一个结点都代表一个子代价,每层的代价是该层所有子代价的总和,总问题的代价就是所有层的代价总和。

所以,我们利用递归树求解代价,需要知道什么呢,一个是每一层的代价,一个是层数,就是这两个。

这些,都需要我们用觉察的态度来发现,而事实证明,这不是一件难事,很多情况下是有规律可循的。

我们且看上面这个例子,递归树的构造很简单,当递归调用到边界是,就达到了常量T(1),达到常量T(1)所用到的递归次数就是整个递归树的深度,我们从图中可以得到第i层的结点的代价为n / ( 4 ^ i ),当n / (4 ^ i) = 1即i = log4(n)时,递归到达了边界,所以,整个递归树的深度就是i = log4(n)。我们要求的总的代价是所有的总和,结果为O(n ^ 2)。计算过程我就不再累述了。但是,递归树并不是都是这样的满的树,也就是不是每一层的结点都是相同的结构,所以我们在构造递归树的时候要仔细看好这一点,才能保证在计算时不会出错。

(三)主方法:

其实应该叫做主定理方法,利用这个方法,我们只需要记住主定理的三种情况,并且在满足一定的条件下,就可以速度解出递归式。主定理的三种情况不在这里给出,一定条件我只说一下我对于多项式大于(或小于)的理解,比如x和1.1x,那么x就是多项式小于1.1x,二者差了一个多项式(0.1x),而至于x与xlgx就不存在多项式大于(或小于)的关系。

这个方法很直截了当,我在学习这个方法的时候其实就是从课后练习入主。但是三种情况,我却无法牢记。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭