如何分析算法的时间复杂度!

这篇具有很好参考价值的文章主要介绍了如何分析算法的时间复杂度!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

算法时间复杂度定义

列举常见的时间复杂度以及如何计算:                          

1.常数阶:

2.线性阶:

3.对数阶:

4.平方阶:


        我们知道,学习数据结构和算法就是为了解决程序的“快”和“省”的问题,那么如何让代码运行得更快,让代码更省存储空间。则就要用到时间复杂度分析,复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半。

算法时间复杂度定义

        在进行算法分析时,语句总的执行次数T (n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作: T (n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数

        这样用大写 O( )来体现算法时间复杂度的记法,我们称之为大O记法。一般情况下, 随着n的增大,T(n)增长最慢的算法为最优算法。

 推导大O阶:
        1.用常数1取代运行时间中的所有加法常数。
        2.在修改后的运行次数函数中,只保留最高阶项。
        3.如果最高阶项存在且不是1,则去除与这个项相乘的常数(即使此常数变为1)。得到的结果就是大O阶

列举常见的时间复杂度以及如何计算:                          

1.常数阶:

         程序时间复杂度怎么分析,算法,数据结构,c语言

         我们可知以上代码算法的运行次数函数是f (n) =3。 根据我们推导大O阶的方法,第一步就是把常数项3改为1。第二步,观察到没有最高阶项,所以此算法的时间复杂为O(1);

程序时间复杂度怎么分析,算法,数据结构,c语言        

以上代码同理可得,此代码执行了10次。运行次数函数是f (n) =10保留最高阶项时发现,它根本没有最高阶项,只需用常数1即可,所以此算法的时间复杂为O(1)。对于此类O(1)的时间复杂度,又称常数阶。

         注意:无论这个常数是多少,我们都记作O(1),而不能是O(3)、O(12)等其他任何数字,这是初学者常常犯的错误。

        对于分支结构而言,无论是真,还是假,执行的次数都是恒定的,不会随着n的变大而发生变化,所以单纯的分支结构(不包含在循环结构中),其时间复杂度也是O(1)。

2.线性阶:

        线性阶相对于常数阶是比较复杂的,要确定此阶数,我们则需要确定某个特定语句或者某个特定语句集运行的次数。关键就要分析循环结构的运行情况。

程序时间复杂度怎么分析,算法,数据结构,c语言

可以看出以上代码共执行了 3n+3 次,它的运行次数函数是f (n) =3+3n,我们只保留最高阶项,并且除与这个项相乘的常数(即将 3n 的 3 改为 1),则时间复杂度为 O(n)。

3.对数阶:

        关于对数阶我们可以通过如下代码来进行理解:

        程序时间复杂度怎么分析,算法,数据结构,c语言

        由于每执行一次 ,i 就会离 n的值更近,那么当有x个2相乘后大于n,就会退出循环。那么 由  ,得到 ,那么这个代码的时间复杂度为O()。

          程序时间复杂度怎么分析,算法,数据结构,c语言

 同理,可以得到 ,所以 ,即这个代码的时间复杂度O()。

4.平方阶:

        为了引入平方阶,我们要利用到线性阶来帮助理解:

程序时间复杂度怎么分析,算法,数据结构,c语言

上面的例子是循环嵌套,我们已经知道内部循环执行一次是O(n),那么外层需要执行n次,很容易得出这段代码的时间复杂度为O(n*n)  即为O().。

程序时间复杂度怎么分析,算法,数据结构,c语言

 

同样的道理,外层循环执行m次,内层循环为O(n),那么时间复杂度就为O(m*n)。

可以发现,循环的时间复杂度为:循环体的复杂度乘以该循环运行的次数。

        那么加大难度,来看下面这个代码,它的时间复杂度是多少呢?

程序时间复杂度怎么分析,算法,数据结构,c语言

 通过分析,当 i = 0 时,内层循环执行了 n 次,当 i = 1 使,执行了 n - 1次,...... 当 i = n-1 时,内层循环执行了 1 次,所以总共执行次数为:

        n + (n - 1) + (n - 2) +......+ 1 =  程序时间复杂度怎么分析,算法,数据结构,c语言 = 程序时间复杂度怎么分析,算法,数据结构,c语言 

根据推导大 O 阶的方法,第一步:将常数项改为 1 ,没常数项则不考虑。第二步:只保留最高项,即保留   ,第三步:将最高项的系数改为 1 。 那么时间复杂度即为 O()。文章来源地址https://www.toymoban.com/news/detail-792744.html

到了这里,关于如何分析算法的时间复杂度!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法分析与设计-数字三角形问题(动态规划)(通俗易懂,附源码和图解,含时间复杂度分析)(c++)

    (一)题目 问题描述 给定一个由 n n n 行数字组成的数字三角形,如图所示。 试设计一个算法,计算从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 算法设计 对于给定的由 n n n 行数字组成的数字三角形,计算从该三角形的顶至底的路径经过的数字和的最大值

    2023年04月10日
    浏览(44)
  • 排序算法大全集,从时间复杂度和空间复杂度上对各个排序算法进一步的分析和评估,从插入排序、交换排序、归并排序、基数排序到外部排序,通晓堆排序、希尔排序、快速排序等算法

    目录 1.基本概念和排序方法概述 排序方法的分类 2.插入排序 1.直接插入排序 2.折半插入排序 3.希尔排序 3.交换排序 1.冒泡排序 2.快速排序 3.简单选择排序 4.堆排序 4.归并排序 5.基数排序 6.外部排序 7.各类排序方法的综合比较 1.时间性能 2.空间性能 3.排序方法的稳定性能 4.关于

    2024年02月08日
    浏览(46)
  • 算法的时间复杂度与空间复杂度

    1.算法效率 2.时间复杂度 3.空间复杂度 4.复杂度oj题目 1.算法效率 1.1 如何衡量一个算法的好坏 一辆车的好坏我们可以从价格,油耗...... 方面来衡量,但衡量一个算法的好坏我们该从哪一个方面入手呢?比如斐波那契数列: 斐波那契数列的递归实现方式非常简洁,但简洁一定

    2024年02月15日
    浏览(83)
  • 【算法基础】时间复杂度和空间复杂度

    1 算法的评价 2 算法复杂度 2.1 时间复杂度(Time Complexity) 2.1.1 如何计算时间复杂度: 2.1.2 常见的时间复杂度类别与示例 2.2 空间复杂度 2.2.1 如何计算空间复杂度 2.2.2 常见的空间复杂度与示例 3 时间复杂度和空间复杂度计算示例 例子1:计算数组中所有元素的和。 例子2:快

    2024年02月08日
    浏览(56)
  • 算法的时间复杂度和空间复杂度

    目录 本章重点 一 时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3 常见的时间复杂度的计算 二 空间复杂度 三 常见复杂度对比 四 复杂度的oj练习 4.1 消失的数字 4.2 旋转数字 每一天都是人生限定,每一天都值得100%努力 (1)算法效率(2)时间复杂度(3)空间复

    2024年02月01日
    浏览(47)
  • 算法之【时间复杂度】与【空间复杂度】

    目录 一、算法 1、算法定义 2、两种算法的比较 3、算法的特性 4、算法设计的要求 二、算法的复杂度 1、时间复杂度 1.1定义 1.2大O的渐近表示法 1.3推导大O阶方法 1.4最坏情况与平均情况 1.5常见的时间复杂度计算示例 🍂常数阶: 🍂线性阶:  🍂对数阶: 🍂平方阶: 2、空间

    2024年02月05日
    浏览(57)
  • 算法学习22:时间复杂度 和 空间复杂度

    提示:以下是本篇文章正文内容: 😍😍😍文章链接👍👍👍 提示:这里对文章进行总结: 💕💕💕

    2024年04月22日
    浏览(91)
  • 八大排序算法(含时间复杂度、空间复杂度、算法稳定性)

    下列算法默认都是对数组进行升序 1.1、算法思想 插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序的具体步骤如下: 从第一个元素开始,该元素可以认为已经被排序;

    2024年02月08日
    浏览(43)
  • 数据结构:算法(特性,时间复杂度,空间复杂度)

    算法(Algorithm)是对 特定问题求解步骤 的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。 一个算法必须总在执行有穷步之后结束,且每一步都可在有穷时间内完成。 算法必须是有穷的,而程序可以是无穷的 算法中每条指令必须有确切的含义,对于

    2024年02月06日
    浏览(52)
  • 算法的时间复杂度和空间复杂度(数据结构)

    目录 1、算法效率 1如何衡量一个算法的好坏 2算法的复杂度 2、时间复杂度 1时间复杂度的概念 2大O的渐进表示法 2时间复杂度计算例题 1、计算Func2的时间复杂度 2、计算Func3的时间复杂度 3、计算Func4的时间复杂度 4、计算strchr的时间复杂度 5、计算BubbleSort的时间复杂度 6、计算

    2024年02月03日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包