使用数学工具来定义

算法复杂度:$S(n)$ 与 $T(n)$

复杂度的观察应该是宏观的,不用纠结于每行代码运行时的消耗,而是从另一个高度把握。

空间复杂度 $S(n)$

我们做一个简单的规定:$S(n)$ 为算法的空间复杂度,观察程序执行时占用储存单元的长度。n 即为数据的规模,显然复杂度过高会吃爆内存造成程序中断。

现代计算机 pc 内存多以 GB 为单位,程序的空间占用不是这么紧缺。换言之,空间复杂度为一般程序次要的考察因素。

嵌入式开发,大型服务器运维,仍需要考虑空间分配。

时间复杂度 $T(n)$

$T(n)$ 关注的是程序的运行时间与数据规模 n 的 关系,无论时代如何发展,只要人们不能减速时间,时间消耗就还是最重要的程序消耗,当然,计算机的发展会加快计算速度,并提升 cpu 带宽,但是与如今程序规模的发展相比,仍是杯水车薪。大量并发,亿万级大数据已成主流,时间就是金钱。

所以,对程序时间消耗有更强的掌控力已经是程序员的必修课。

最小上界 $O(n)$

关于上下界的严格数学证明不再赘述

引入 $O(n)$ 作为对程序时间复杂度的粗略上界估计,$O(n)$ 为最小上界

算法的渐进表示

  1. 算法加和,考虑更慢的一边
  2. 算法的嵌套,复杂度做乘法
  3. $T(n)$ 是 n 的 k 阶多项式,$T(n)=\Theta(n^k)$
  4. for 循环嵌套,$T(n)$ 为各层循环次数的积再乘以循环体复杂度
  5. if-else 结构考虑条件,两个分支,三者中最慢的一个。
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2023 Jack Kong
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信