【技术累积】【点】【算法】【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)
    《【技术累积】【点】【算法】【17】算法的时间复杂度和空间复杂度》

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

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

各种排序算法情况

时间复杂度记忆-

  • 冒泡、选择、直接 排序需要两个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)稳定较复杂

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

参考文章

    原文作者:韧还
    原文地址: https://www.cnblogs.com/andy1202go/p/9719432.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞