时间复杂度的理解

Posted 世界辣么大

tags:

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

『 O(某函数())』用来描述一个算法处理给定的数据大概需要多少次运算。

  - 大O符号是一种算法复杂度的相对表示方式。

  这句话中有三个重要的用词,只要理解它们,就能知道它到底是什么意思了:

    1、相对(relative):你只能比较相同的事物。你不能把一个做算数乘法的算法和排序整数列表的算法进行比较。

      就好比拳击比赛需要分重量级进行比赛一样,这样的比较是没有意义的。

    2、表示(representation):大O(用它最简单的形式)把算法间的比较简化为了一个单一变量。这个变量的选择基

      于观察或假设。例如,处理某一个问题,有三种算法可以解决,它们的时间复杂度分别是O(n),O(logn),O(n2),

      这样就能很快比较出这三种算法的优劣了。而里面的变量是多少,取决于算法是什么样的模式,它们在运算过程中

      做了什么样的操作。

    3、复杂度(complexity):如果排序10,000个元素花费了我1秒,那么排序1百万个元素会花多少时间?

      在这个例子里,复杂度就是相对其他东西的度量结果。

  - 算术可以让我们更好的理解大O:

    这里我们可以联系小学学的竖式运算来理解:

    1)当我们进行加法运算时,我们需要对每一位上的数做一遍加法,所以,当我们进行2个4位数的加法时,就需要算4次,

      如若进位,就需要多算一次,100位数相加就需要做100次运算,以此类推;减法的模式和加法类似,只是借位替代了进位;

    2)我们在做乘法运算时,需要将每1位数字与另一个数字的每1位相乘,再做加法,所以两个n位数想乘,就要

      先做n2次乘法,再做大概2n次加法来得到最终结果。

    - 上面的两个例子都是用来解决两个数字的运算问题的,但它们的模式不一样,经历的过程不一样,所以复杂度就不一样,

    加法的模式中,位数和运算操作是成正比的,所以它的时间复杂度可以用O(n)表示;

    而乘法的模式中,它是以平方的方式进行增长,它的时间复杂度可以用O(n2+2n)表示。

    我们只关心复杂度最重要的部分:乘法运算中,我们可以把操作次数表示为:n2 + 2n。但当n特别大时,第二个 2n 就无关紧要。

    所以只需要用O(n2)就能表示乘法运算的时间复杂度

 

以上是关于时间复杂度的理解的主要内容,如果未能解决你的问题,请参考以下文章

对时间复杂度的简单理解

算法的时间与空间复杂度理解说明

时间复杂度与空间复杂度的理解与计算

关于时间复杂度空间复杂度的理解

试图理解这个动态递归子集和的时间复杂度

时间复杂度的理解