算法的复杂度分析

2 篇文章 0 订阅
1 篇文章 0 订阅

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

     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)


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值