码迷,mamicode.com
首页 > 其他好文 > 详细

时间复杂度的理解

时间:2018-03-04 23:53:08      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:一个   lex   运算   意义   需要   问题   元素   简单的   represent   

『 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)就能表示乘法运算的时间复杂度

 

时间复杂度的理解

标签:一个   lex   运算   意义   需要   问题   元素   简单的   represent   

原文地址:https://www.cnblogs.com/value-code/p/8506340.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!