时间复杂度

时间复杂度是指算法运行的快慢。

时间复杂度是用来衡量算法的好坏。除此之外,空间复杂度也是衡量算法好坏的一个标准,但是由于如今内存越来越大,越来越便宜,空间复杂度便不重要了。

算法的时间复杂度是一个函数(就像数学中带有未知数的函数表达式)

一个算法所花费的时间与其中语句的执行次数(或是大概的执行次数)成正比,所以算法中基本操作的执行次数,为算法的时间复杂度(即找到某条基本语句与算法中的N之间的数学表达式,就是算出了算法的时间复杂度)

只需要大概的执行次数,那么我们使用大O的渐进表示法(估算)例如,需要F(N)此执行次数,F(N)=N^2+2*N+10,则时间复杂度为O(N^2)

大O的渐进表示法: 1.用常数1取代运算时间中所有的加法常数。例如,需要F(N)此执行次数,  —————————F(N)=100,则时间复杂度为O(1)

           —————   2.在得到运行次数的函数中,只保留最高阶项。例如,需要F(N)此执行次—————————数,F(N)=N^2+2*N+10,则时间复杂度为O(N^2)

————————   3.如果最高阶项存在,且项数不为1,则将项数变为1,得到的就是时间复杂度

————————---例如,需要F(N)此执行次数, F(N)=2N,则时间复杂度为O(N) 

————————   4.F=M+N,时间复杂度为O(M+N),若有条件:M>>N,则为O(M)——————————————————————————————    N>>M,则为O(N)——————————————————————————————    M,N差不多大,O(N)或O(M)

时间复杂度最好,最坏,平均情况:当一个算法随着输入不同,时间复杂度不同,时间复杂度做悲观预测,看最坏情况。可参考strchr函数

冒泡排序的时间复杂度:执行次数F(N)=N*(N-1)/2,时间复杂度 O( N ^ 2 )

二分查找的时间复杂度:最好情况————O(1)  最坏情况 O(N)=log2N

递归函数的时间复杂度:递归函数的时间复杂度为 递归次数 * 每次递归调用的次数——————————    斐波那契数列递归的时间复杂度

long long Fib ( size_ N )
{
   if ( N < 3 )
   return 1;
   else
   return Fib ( N - 1 ) + Fib ( N - 2);
}

Fib函数的循环如上图所示,次数为F(N)=2^0+2^1+2^2+2^3+……+2^(n-1)-X =2^N-X,(X是指右边分支提前结束所少的次数,即F(n-2)比F(N-1)少的次数),则时间复杂度为O(2^N)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值