加载中…
个人资料
千锋大数据
千锋大数据
  • 博客等级:
  • 博客积分:0
  • 博客访问:38,911
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

简单程序的时间复杂度分析

(2020-02-20 12:44:49)

  一、算法的概念

  算法中基本操作的执行次数一般是与问题的规模有关的。对于节点个数为n的数据处理问题,用T(n)表示算法基本操作的执行次数。为评价算法的时间复杂度与空间复杂度,我们引入记号为“O”的数学符号。设T(n)和f(n)是定义在正整数集合上的两个函数,如果存在正常数C和No,使得当n=No时,都有0=T(n)=C*f(n),则记T(n)=0(f(n))。在评价算法的时间复杂度时,不考虑两个算法执行次数之间的细小区别,而只关心算法的本质区别。

  常见算法时间复杂度排序为:

  **Ο(1)Ο(log2n)Ο(n)Ο(nlog2n)Ο(n2)Ο(n3)…Ο(2n)Ο(n!)

  


  算法时间复杂度的最小、最大和平均值:

  算法在最好的情况下的时间复杂度是指算法计算量的最小值。

  算法在最坏的情况下的时间复杂度是指算法计算量的最大值。

  算法在平均情况下的时间复杂度是指算法在所可能的情况下的计算量经过加权计算出的平均值。

  csdn找到的算法的描述

  二、常用程序的简单的时间复杂度分析

  **首先我们将每次执行一行程序的时间复杂度记为O(1)。

  时间复杂度分析的基本策略是:从内向外分析,从最深层开始分析。如果遇到函数调用,要深入函数进行分析。

  1、对于一个循环,假设循环体的时间复杂度为 O(n),循环次数为 m,则这个

  循环的时间复杂度为 O(n×m)。

  所以上述程序的时间复杂度为O(n×1),为O(n)。由此延伸,多重循环的时间复杂度可以内外层循环相乘获得

  所以上述程序的时间复杂度为O(n × n × 1)=O(n^2)。

  2.对于顺序执行的程序语句,时间复杂度可用叠加计算

  所以时间复杂度的计算为O(n^2)+O(n),由于只考虑量级的关系,所以该代码块的时间复杂度为O(n^2)。

  3.对于条件判断语句,总的时间复杂度等于其中 时间复杂度最大的路径 的时间复杂度。

  此时的时间复杂度为O(n^2)。

  练习1

  需要满足i*2n,所以循环次数为log(2)(n),所以时间复杂度为o(log(2)(n))即为o(log p= n).=

  练习

  显然运行次数,T(0) = T(1) = 1,同时 T(n) = T(n - 1) + T(n - 2) + 1,这里的 1 是其中的加法算一次执行。

  显然 T(n) = T(n - 1) + T(n - 2) 是一个斐波那契数列,通过归纳证明法可以证明,当 n = 1 时 T(n) (5/3)^n,同时当 n 4 时 T(n) = (3/2)^n。

  所以该方法的时间复杂度可以表示为 O((5/3)^n),简化后为 O(2^n)。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有