2. 时间复杂度与空间复杂度

  本文是《小甲鱼数据结构》的学习笔记,对视频课程中的相关知识进行总结。

  欢迎大家在评论区多多留言互动~~~~

1. 算法效率的度量方法

1.1 事后统计方法

  这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率高低。

  这种方法的缺陷在于:(1)必须依据算法实现编制好测试程序通常需要花费大量的时间和精力,但是如果发现测试的算法很糟糕的话就得不偿失。(2)不同的测试环境差别很大。

1.2 事前分析估算法

  在计算机编写程序前,依据统计方法对算法进行估算。

1.2.1 影响时间消耗的因素

  (1)算法所采用的策略和方案
  (2)编译产生代码的质量(主要与编译器有关)
  (3)问题的输入规模
  (4)机器执行指令的速度

  抛开与计算机硬件和软件相关的因素,一个程序运行时间依赖于算法的好坏和问题的输入规模。所以我们在研究算法的复杂度的时候,侧重的是算法的随着输入规模的扩大的增长量的一个抽象,而不是精确地定位需要总共执行多少次。所以在实际分析中,不计那些循环索引的递增和循环终止条件、变量声明、打印结果等操作。最终在分析程序运行时间时,最重要的时把程序看成是独立于程序设计语言的算法或者时一系列的步骤;重要的时把基本操作的数量和输入模式关联起来。

1.2.3 函数的渐进增长

  通过分析可以知道,判断一个算法的效率时,函数中的常数和其他次项常常可以忽略,而更应该关注阶数最高的项,对于阶数最高的项,也可以忽略他们的常数(即系数)。

2. 时间的复杂度

2.1 时间复杂度的定义

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

  其中最关键的是,执行次数==时间,寻找的执行次数与问题规模规模之间数量级之间的关系。

2.2 时间复杂度的记法

  时间复杂度常记作 O(),即大 O 阶,而计算大 O 阶有着下面的规律

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

2.3 常见的时间复杂度

  常见的时间复杂度有常数阶,线性阶,平方阶,立方阶,对数阶等。

  如下面的程序

这个的内层循环的次数会随着迭代的增加而逐渐减少,总的执行次数是100+99+……+1,通过计算可知总的执行次数是 n 2 2 + n 2 \frac{n^2}{2}+\frac{n}{2} 2n2+</

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值