【技术累积】【点】【算法】【17】算法的时间复杂度和空间复杂度

正文

懒得写过程了,少量的数学推导。

直接上结论:

  • 时间复杂度用的更多,人的耐心,你懂得;

  • 时间复杂度低了,有时候会牺牲空间复杂度;

  • 主要跟计算次数有关系,所以计算的是次数x,n是参数值;

  • T(n) = O(f(n));举例:fn具体的可能是nlogn+1+n,大O写法就是,O(nlogn),即,取最高阶(因为对时间影响最大)

  • 对于不同的时间增长影响,有图,一般而言O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(Cn)

  • 时间复杂度分析的基本策略是:从内向外分析,从最深层开始分析。如果遇到函数调用,要深入函数进行分析。

  • 编码中,要对自己写的一些算法有一定的敏感度,比如多层循环,比如较为复杂的调用(找最长的链),有预估能力,以及调优的能力

各种排序算法情况

时间复杂度记忆-

  • 冒泡、选择、直接 排序需要两个for循环,每次只关注一个元素,平均时间复杂度为O(n2)O(n2) O(n^2)(一遍找元素O(n)O(n) O(n) ,一遍找位置O(n)O(n) O(n) )
  • 快速、归并、希尔、堆基于二分思想,log以2为底,平均时间复杂度为O(nlogn)O(nlogn) O(nlogn) (一遍找元素O(n)O(n) O(n) ,一遍找位置O(logn)O(logn) O(logn) )

稳定性记忆-“快希选堆”(快牺牲稳定性)

  • 排序算法的稳定性:排序前后相同元素的相对位置不变,则称排序算法是稳定的;否则排序算法是不稳定的。

以及表

排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性
直接插入排序 O(n2) O(n2) O(n) O(1) 稳定 简单
希尔排序 O(nlog2n) O(n2) O(n) O(1) 不稳定 较复杂
直接选择排序 O(n2) O(n2) O(n2) O(1) 不稳定 简单
堆排序 O(nlog2n) O(nlog2n) O(nlog2n) O(1) 不稳定 较复杂
冒泡排序 O(n2) O(n2) O(n) O(1) 稳定 简单
快速排序 O(nlog2n) O(n2) O(nlog2n) O(nlog2n) 不稳定 较复杂
归并排序 O(nlog2n) O(nlog2n) O(nlog2n) O(n) 稳定 较复杂
基数排序 O(d(n+r)) O(d(n+r)) O(d(n+r)) O(n+r) 稳定 较复杂

图片

参考文章

posted @ 2018-09-28 16:31  韧还  阅读(535)  评论(0编辑  收藏  举报