您当前的位置: 首页 >  数据结构与算法

命运之手

暂无认证

  • 4浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【数据结构与算法】【03】算法复杂度

命运之手 发布时间:2022-05-12 20:00:00 ,浏览量:4

什么是算法

算法就是解决问题的一套步骤,任何领域都存在算法,本专栏的算法则是和编程中的数据结构相关的算法

前面提到,数据结构就是数据在内存中的存储和组织方式

那么我们如何对这些数据进行添加、删除、修改、查找、排序,这就形成了一套套的算法

它们完整的说法应该是,通用数据结构操作算法

算法性能

一个算法的好坏,即性能评价指标,主要包括两方面

一是时间上的,即CPU进行了多少次运算,消耗了多长的时间

一是空间上的,即计算过程中,程序本身、用户输入、运算过程中产生的临时变量,总共占用了多大内存

时间和空间两方面的性能,有时候是不能兼得的,此时就会采用空间换时间,或者时间换空间的策略

算法复杂度

算法复杂度,是表示算法性能的一种方式,它是时间或空间关于数据量的曲线公式

类似于S(n) = k*n² + m,这里的k和m都是常量系数

我们在实际考虑算法性能时,一般主要考虑的是数据量足够大的情况

高中方程曲线学的比较好的同学的应该知道,k和m只决定曲线的平缓程度和初始位置

曲线最终的大小,主要是取决于变量n本身的增长速度的

比如n³最终会大于n²,不管k和m等于多少

所以我们在表示复杂度时,干脆将k和m等常量省去,只看最核心的部分,即S(n) = n²

这样我们就得到了这样一个最终的复杂度表示方法

  • T表示时间复杂度,time的缩写
  • S表示空间复杂度,storage的缩写
  • O表示成本随数据量的增长变化趋势,数学中无穷大的意思
  • 时间复杂度最终表示为:T(n) = O(n²)
  • 空间复杂度最终表示为:S(n) = O(n²)

复杂度量级

当n趋向于无穷大时,最终决定算法成本量级的,是O参照的括号内函数

所以我们就以括号内的函数来表示复杂度量级

常见的复杂度量级有

  • 常数阶O(1)
  • 对数阶O(logN)
  • 线性阶O(n)
  • 线性对数阶O(nlogN)
  • 次方阶O(nk)
  • 指数阶(2n)

从上到下,复杂度量级越来越大,算法效率越来越低

复杂度量级图像分析

我们以函数函数曲线的形式,更直观的感知不同复杂度量级,在效率上的区别

在这里插入图片描述

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0457s