算法的复杂度分析

    xiaoxiao2021-03-26  10

          今天学习时间复杂度记录一些,感觉这块满难搞的,先一点点来慢慢消化,大家多多指教哈~

         1.基本概念

         算法复杂性的高低体现在运行该算法需要的计算及资源的多少上,所需资源越多,该算法的复杂性越高。对计算机资源,最重要的是时间和空间。

           时间复杂性:需要时间资源的量。空间复杂性:需要空间资源的量。算法消耗的量应该只依赖于要解的问题的规模、算法的输入和算法本身。而影响算法效率的因素有代码质量、语言、编译器、机器、输入规格。在算法分析中,总是选择出现在算法中某个特定步骤,通过数学分析来确定完成该算法需要的步数。尤其在很多排序算法中数据项得比较是无法避免的,因此,通常通过它来度量排序算法的时间复杂度(通常用表示算法时间复杂度)

            2.公式理解

        一般情况下我们认为运行算法的时间花费以来与问题的规模n。并且我们这样我们假设一个算法花费(n^3+n)步数,则认为该算法时间复杂度为n^3阶的。因为随着n逐渐增大,项n^3阶比项n占优,项n相比之下就变得不重要了。

           定义:当且仅当存在两个正常数cn对于所有n≥n,使得|T(n)|≤c|f(n)|,那么定义T(n)=○f(n))

       类似的将其应用在算法中的时间复杂度中,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示。若有某个辅助函数f(n),使得当n趋近于无穷大时,Tn)/f(n)的极限值为不等于零的常数,则称f(n)T(n)的同数量级函数。记作T(n)=(f(n))(O不包括该函数的低阶项和首项系数)称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。

               EXP

         (1)一个算法完成需花费(n^3+n)步数,那么f(n)=n^3+n=(1+1/n^2)n^3≤2n^3    (n≥1)

            这样该算法的时间复杂度为○(n^3),因为可以分别将cn分别赋值为21

          (2)有两个算法A时间复杂度为n^3,算法B时间复杂度为n

             这种情况下总会让我们有个误区是A算法比B算法快。但这是不确定的。如果算法A每步执行时间是算法B执行时间的1/100,那么算法AB运行时间分别是n^3100n。这种情况下当n<10时,算法A比算法B运行的快,对于n>10时,算法A比算法B慢。所以我们要理解f(n)中常量的重要性,不能忽视这个常量,但是不管此常数有多大,随着n的增加,他的重要性逐渐减小。

       3.关于○常见的运算规则

        (1)○(f)+○(g)=○(max(f,g))

        (2)○(f)+○(g)=○(f+g)

        (3)○(f)○(g)=○(fg)

        (4)如果g(n)=○(f(n)),则○(f)+○(g)=○(f)

        (5)○(Cf(n))=○(f(n)),其中C为常数

        (6)f=○(f)

    
    转载请注明原文地址: https://ju.6miu.com/read-600079.html

    最新回复(0)