算法时间复杂度分析以及渐进表示法

1.2 什么是算法?

算法是一个有限指令集,接收一些输入(有些情况下不需要输入),一定会产生输出,一定在有限步骤之后终止。

每一条指令必须:

  • 有充分准确的目标,不可以有歧义
  • 在计算机能处理的范围内
  • 描述应该不依赖于任何一种计算机语言以及具体的实现手段。

1.2.1 什么是好的算法

主要通过两个指标来分析算法的好坏,分别是空间复杂度和时间复杂度。

空间复杂度S(n) Space

根据算法所写成的程序在执行时占用的存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限度,造成程序非正常中断。

时间复杂度T(n) Time

根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果。

下面是一个计算k阶多项式结果的2个算法:

在这里插入图片描述
机器运行加减法的速度要比运行乘除法的速度快很多。因此我们在数运算的时候,一般情况只需要关注乘除法,加减法可以忽略不计。

在分析一般算法的效率(时间复杂度)时,我们经常关注关注下面两种复杂度。

  • 最坏情况复杂度 T w o r s t ( n ) T_{worst}(n) Tworst(n)
  • 平均复杂度 T a v g ( n ) T_{avg}(n) Tavg(n)

显然, T a v g ( n ) ≤ T w o r s t ( n ) T_{avg}(n) \le T_{worst}(n) Tavg(n)Tworst(n)

最坏情况复杂度一般更加容易分析。因为什么叫做“平均”一般没有一个明确的定义。所以我们选择更加简单的最坏时间复杂度来分析。

复杂度的渐进表示法

当我们在分析一个算法复杂度的时候,我们真的很有必要去数程序把每一个操作做了多少次吗?答案是没有这个必要。

我们关心的是随着要处理的数据的规模的增大,复杂度的增长性质是怎样的。

  • T(n) = O(f(n))表示存在常数C>0, n 0 > 0 n_0 > 0 n0>0使得当 n ≥ n 0 n\ge n_0 nn0时,有 T ( n ) ≤ C ⋅ f ( n ) T(n)\le C\cdot f(n) T(n)Cf(n). 简单来讲,当n充分大时,f(n)大概表现得为T(n)的上界。该定义与《Understanding Machine Learning: From Theory to Algorithms》一书中介绍的概念是一致的。
  • T(n) = Ω ( g ( n ) ) \Omega (g(n)) Ω(g(n))表示存在常数 C > 0 , n 0 > 0 C>0, n_0>0 C>0,n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chenglin_Yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值