递归方程时间复杂度计算公式

对于T(n) = a*T(n/b)+c*n^k;T(1) = c 的递归关系,

有如下结论:

if (a > b^k)   T(n) = O(n^(logb(a)));
if (a = b^k)   T(n) = O(n^k*logn);
if (a < b^k)   T(n) = O(n^k);

对于:T(n) = 25T(n/5)+n^2

a=25    b = 5   k=2

有:a==b^k      故T(n)=O(n^k*logn)=O(n^2*logn)

对于:T(n)=4T(n/2)+cn

a=4   b=2    k=1

有:a>b^k   故:T(n)=O(n^(logb(a)))=O(n^2)

对于:T(n)=T(n/2)+cn^3

a=1  b=2   c=3

有:a<b^k  故:T(n)=O(n^k)=O(n^3)

另一个比较官方的定理:

递归方程时间复杂度计算公式

时间: 2024-10-13 08:41:09

递归方程时间复杂度计算公式的相关文章

快速排序为什么快?

这是曾经思考过的问题, 它为什么叫快速排序呢?思考无果,然后忘记了,然后昨天被问起,自然想不出很好的答案.直到,看到了<暗时间>上有这个问题的答案. 在<暗时间>里,作者刘未然并没有直接给出答案,而是先说了两个游戏,猜数字和称球.这两个问题都很好理解,并且不难解答.然而,令我豁然开朗的是,他们指向了同一个思想,分而治之!把问题不断切割一半又一半,直到答案水落石出. 回到正题,我们的目标是排序,无论哪个排序方法都是基于两两比较的,问题在于如何才能减少比较的次数呢?举个例子,有这么一组

数据结构和算法之时间复杂度和空间复杂度

前言 上一篇<数据结构和算法>中我介绍了数据结构的基本概念,也介绍了数据结构一般可以分为逻辑结构和物理结构.逻辑结构分为集合结构.线性结构.树形结构和图形结构.物理结构分为顺序存储结构和链式存储结构.并且也介绍了这些结构的特点.然后,又介绍了算法的概念和算法的5个基本特性,分别是输入.输出.有穷性.确定性和可行性.最后说阐述了一个好的算法需要遵守正确性.可读性.健壮性.时间效率高和存储量低.其实,实现效率和存储量就是时间复杂度和空间复杂度.本篇我们就围绕这两个"复杂度"展开

递归算法的时间复杂度分析

在算法分析中,当一个算法中包括递归调用时,其时间复杂度的分析会转化为一个递归方程求解.实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比較经常使用的有下面四种方法: (1)代入法(Substitution Method)         代入法的基本步骤是先猜測递归方程的显式解,然后用数学归纳法来验证该解是否合理.         (2)迭代法(Iteration Method)         迭代法的基本步骤是迭代地展开递归方程的右端,使之成为一个

递归算法的时间复杂度分析 转载

在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解.实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法: (1)代入法(Substitution Method)        代入法的基本步骤是先推测递归方程的显式解,然后用数学归纳法来验证该解是否合理.        (2)迭代法(Iteration Method)        迭代法的基本步骤是迭代地展开递归方程的右端,使之成为一个非递归的和

(转)递归树求递归算法的时间复杂度

本文转载:http://www.cnblogs.com/wu8685/archive/2010/12/21/1912347.html 递归算法时间复杂度的计算方程式一个递归方程: 在引入递归树之前可以考虑一个例子: T(n) = 2T(n/2) + n2 迭代2次可以得: T(n) = n2 + 2(2T(n/4) + (n/2) 2) 还可以继续迭代,将其完全展开可得: T(n) = n2 + 2((n/2) 2 + 2((n/22)2 + 2((n/23) 2 + 2((n/24) 2 +-

算法的时间复杂度和空间复杂度分析

一 算法的时间复杂度分析 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了.并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多.一个算法中的语句执行次数称为语句频度或时间频度.记为T(n). (2)时间复杂度 在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化.但有时我们想

数据结构-时间复杂度

在进行算法分析时,语句总是执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级.算法的时间复杂度,也就是算法的时间量度,基座:T(n)=O(f(n)).它表示岁问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度.其中f(n)是问题规模n的某个函数. 这样用大写O( )来体现算法时间复杂度的激发,我们称之为大O记法. 一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法.三个求和算法的时间复杂度分别

前尘----时间复杂度和空间复杂度计算

算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作. 算法的五个特性: 输入输出:算法具有零个或多个输入,算法至少有一个或者多个输出.输出的形式可以是打印也可以是返回一个或者多个值. 有穷性:指算法在执行有限步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成. 确定性:算法的每一步骤都具有确定的含义,不会出现二义性,算法在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果.算法的每个步骤被精确定义而无歧义. 可

循序渐进学习时间复杂度

一.浅谈算法 学习软件开发这么多年,常常听到程序=数据结构+算法,但是很多人对这句话提出质疑,因为实际项目开发的时候大部分人是做螺丝钉的角色,而且大部分甘于做螺丝钉的角色,就会认为实际项目,只是完成业务开发而已,去哪都是增删改查,数据结构根本用不到.我认为,算法和基本的数据结构是非常重要的,对于一个合格的程序猿来说,有时候我们没有涉及到,只是别人把需要的事情都给我们做了,比如的java版本的hashmap,采用红黑树的结构,提高了更多效率,软件开发高速发展的同时,编程的门槛也会越来越低,只有了解