再次研究算法时间复杂度

算法的时间复杂度

前言

主要是强迫症犯了,我就想知道快排的对数阶怎么来的,现在复习一下,老早之前学过的东西了,容易忘,希望自己不仅仅只是会一些框架。

递归算法的公式

T [n] = aT[n/b] + f (n)

其中 a >= 1 and b > 1 是常量 并且 f (n) 是一个渐近正函数, 为了使用这个主定理,您需要考虑下列三种情况:
在这里插入图片描述

  1. T [n]指的是平均复杂度
  2. 空表,即T[0] = 0
  3. T[1] = 1

平均复杂度(也是最好的情况,因为是快排)

快速排序最优的情况就是每一次取到的元素都刚好平分整个数组
在这里插入图片描述

  1. T[n/2]为平分后的子数组的时间复杂度
  2. f[n] 为平分这个数组时所花的时间
    解释一下最后的一步, 当n >= 2时:nlogn >= n (也就是logn > 1),所以取后面的 nlogn,俺清晰的记得在数据结构里面,时间复杂度取最高阶,所以和俺想的一样。

最坏复杂度

划分之后一边是一个,一边是n-1个
T[n] = T[n - 1] + O(n)
= T[n - 2] + 2O(n)
= T[n - 3] + 3O(n)
= nO(n) = O(n^2)

参考文章
https://www.zhihu.com/question/22393997/answer/406307936
https://www.cnblogs.com/pugang/archive/2012/07/02/2573075.html
https://blog.csdn.net/not_in_mountain/article/details/77976743

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值