• 时间复杂度的理解


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

  • 相关阅读:
    python爬虫实例--爬取拉勾网
    面试时,如何回答你还有什么想要了解的?
    深入理解三次握手四次挥手以及使用scapy实现ddos雏形
    解决socket粘包的两种low版模式 os.popen()和struct模块
    浅谈osi模型 三次握手 四次挥手 ddos攻击原理
    渲染相关书籍
    unity 场景编辑器物体加图标
    音乐模拟器
    3d服装制作软件
    uv投影插值
  • 原文地址:https://www.cnblogs.com/value-code/p/8506340.html
Copyright © 2020-2023  润新知