时间复杂度

8##### 时间复杂度
时间常数的操作O(1)

时间复杂度的定义

时间复杂度的分析

eg1.有序数组a,无序数组b,查找b中当前不属于a的所有数(num(a):N,num(b):M)。

  1. 每个b数,都遍历a一下
    显然,时间复杂度O(M*N)
  2. 每个b数,都二分查找a一下
    二分查找过程,相当于2的阶乘直到样本量,故而时间常数操作的数量是log N,时间复杂度为O(M*log N)
  3. b先排序,再对a数外排。
    排序的时间复杂度为O(Mlog M),外排过程中O(N+M),总体时间复杂度O(Mlog M)+O(N+M)
  • 算法优劣分析
    方式1的时间复杂度无疑是最差的,对2和3来说优劣性取决于样本量,当b数组很大的时候,显然2方式更优2。当a数组很大的时候,b数组排序的代价相对小,方式3更优。

eg2. 等差数列形式的时间复杂度
比如冒泡排序,选择排序。每确定一个数,需要对剩余的右边的数进行遍历。因此,时间复杂度为
1+2+3+…+n的形式,用等差数列的前n项和公式和时间复杂度的定义规则,数据规模决定时间复杂项为n的二次方,因此,时间复杂度为O(N^2).

递归的时间复杂度

master公式: T [n] = aT[n/b] + T (N^d)

其中 a >= 1 and b > 1 是常量,表示的意义是n表示问题的规模,a表示生成的子问题数,b表示每次递归是原来的1/b之一个规模,f(n)表示分解和合并所要花费的时间之和。

解法:
①当d<logb a时,时间复杂度为O(n^(logb a))
②当d=logb a时,时间复杂度为O((n^d)*logn)
③当d>logb a时,时间复杂度为O(n^d)

如归并排序,每次递归对左右两部分进行递归,每个递归的样本量为二分之一,每次递归操作的时间复杂度o(n),时间复杂度n*log n.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值