算法复杂度表示(大O表示法)

Posted 嘚吧嘚吧嘚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法复杂度表示(大O表示法)相关的知识,希望对你有一定的参考价值。


- 概念:
     大O表示法:称一个函数g(n)是O(f(n)),当且仅当存在常数c>0和n0>=1,对一切n>n0均有|g(n)|<=c|f(n)|成立,也称函数g(n)以f(n)为界或者称g(n)囿于f(n)。记作g(n)=O(f(n))。 定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数。T(n)称为这一算法的“时间复杂度”。当输入量n逐渐加大时,时间复杂度的极限情形称为算法的“渐近时间复杂度”。
   即`运行时间`指一种算法的运算时间的增速,并不是以秒为单位的速度。一个算法,并不仅仅要知道他运行的时间,还要知道其随着数据内容的增加他的运算时间是如何增加的。 O(n) 中n是操作的次数。

- 表示意义
    - 他表示一种算法在最糟糕的情况下需要计算的次数。比如在一个电话簿(n个电话)中找一个电话,利用快速查找,最好的情况是第一次就找到,最坏的情况是第n次找到。这个运行时间要按照最糟糕的情况算  即O(n)
  -我们常用大O表示法表示时间复杂度,注意它是某一个算法的时间复杂度。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。此外,一个问题本身也有它的复杂度,如果某个算法的复杂度到达了这个问题复杂度的下界,那就称这样的算法是最佳算法。

- 常见的大O运行时间(从快到慢进行排序)
    - O(㏒n)   对数时间  比如二分查找
    - O(n)      线性时间  比如简单查找
    - O(n*㏒n)      比如快速排序
    - O(n2)         比如选择排序
    - O(n!)         比如旅行者问题
 
复杂度与时间效率的关系:
c < log2n < n < n*log2n < n2 < n3 < 2n < 3n < n! (c是一个常量)

- 总结
    - 算法的速度并非指时间,不是以秒为单位;而是操作数的增速。从增量的角度度量的。
    - 平时说的算法的速度,指的是随着输入的增加,其运行时间将会以什么样的速度进行增加。
    - 算法运行时间用大O表示法表示。
    - O(㏒n)比O(n)快。当操作的元素越来,快的越明显。

- 旅行商问题
    - 内容
        - 一个旅行商要去5个城市,他想选择一个最短的距离,共有5!=120中方法。运行时间为:O(n!) 即操作数(运算的次数)为n的阶层。

以上是关于算法复杂度表示(大O表示法)的主要内容,如果未能解决你的问题,请参考以下文章

算法的时间复杂度

C++算法恢复训练之时间复杂度

2.算法中的大O符号

如何计算时间复杂度

算法的时间空间复杂度如何比较?

什么是时间复杂度