算法01——时间复杂度

时间复杂度

常数时间复杂度

如果一个操作的执行时间不以具体样本量为转移,每次执行时间都是固定的,则这样的操作为常数时间复杂度
常见的常数时间复杂度操作:

常数时间复杂度操作
算数运算+、-、*、/、%等
位运算>>、>>>、<<、<<<、|、&、^等
算数运算+、-、*、/、%等
赋值、比较、自增、自减等++、–、>、==等
数组寻址arr[i]

估计算法的时间复杂度,要将指令拆成常数时间复杂度操作(原子操作)才能准确估计。

递归问题的时间复杂度求解

递归能够划分成相同的子问题时,可用master公式求解。
T ( N ) = a T ( N / b ) + O ( N d ) T(N) = aT(N/b) + O(N^d) T(N)=aT(N/b)+O(Nd)
其中, a a a代表递归子问题的数量, 1 / b 1/b 1/b代表递归子问题的规模, d d d代表除了递归问题外,剩余部分的时间复杂度幂数。
比如,在二分查找中,每次递归都将当前问题划分成1个1/2的子问题,故, a = 1 , 1 / b = 1 / 2 a = 1, 1/b = 1/2 a=1,1/b=1/2,剩余部分的时间复杂度未 O ( 1 ) , d = 0 O(1),d = 0 O(1)d=0
此时分为3中情况:

  • l o g b a < d log_b^a<d logba<d时: T ( N ) = O ( N d ) T(N) = O(N^d) T(N)=O(Nd)
  • l o g b a > d log_b^a>d logba>d时: T ( N ) = O ( N l o g b a ) T(N) = O(N^{log_b^a}) T(N)=O(Nlogba)
  • l o g b a = d log_b^a=d logba=d时: T ( N ) = O ( l o g n ∗ N d ) T(N) = O(log_n * N^d) T(N)=O(lognNd)

故二分查找的时间复杂度满足第三种情况,故二分查找的时间复杂度为: O ( l o g n ∗ N 0 ) = O ( l o g n ) O(log_n * N^0) = O(log_n) O(lognN0)=O(logn)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值