算法的时间复杂度和空间复杂度

2019-05-14  本文已影响0人  瀚海来客

转载自:https://www.jianshu.com/p/88a1c8ed6254
作者:JS_HCX
来源:简书

简要整理

一 、算法时间复杂度

我们发现一个高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:
- 算法采用的策略,方案
- 编译产生的代码质量
- 问题的输入规模
- 机器执行指令的速度

判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高项)的阶数。

如何分析一个算法的时间复杂度呢?即如何推导大O阶呢?
- 用常数1取代运行时间中的所有加法常数。
- 在修改后的运行次数函数中,只保留最高阶项。
- 如果最高阶项存在且不是1,则去除与这个项相乘的常数。
- 得到的最后结果就是大O阶。

常用的时间复杂度所耗费的时间从小到大依次是:
O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

二 、算法空间复杂度

我们在写代码时,完全可以用空间来换去时间。

定义:算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式记作:
      S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

通常,我们都是用“时间复杂度”来指运行时间的需求,是用“空间复杂度”指空间需求。
当直接要让我们求“复杂度”时,通常指的是时间复杂度。
上一篇 下一篇

猜你喜欢

热点阅读