大O符号与时间复杂度

大O符号


1. 定义

大O符号(Big O notation)是用于描述函数渐进行为的数学符号。

也可以这么说:

用一个大O,在其括号()中,用另一个函数来描述原来的函数的数量级渐进上界

计算机科学中,用于分析算法复杂性非常有用

2. 使用

这个符号有两种形式上很接近但迥然不同的使用方法:无穷大渐近与无穷小渐近。然而这个区别只是在运用中的而不是原则上的——除了对函数自变量的一些不同的限定, “大O”的形式定义在两种情况下都是相同的

分析算法复杂度时,用的O都代表无穷大渐进,表示n趋近于无穷大的情况

2.1 无穷大渐进

举例如下:

假设,解决一个规模为n的问题所花费的时间(或者所需步骤)可以表示为:

T(n) = 4n2 - 2n + 2

当n越来越增大时,n2项将开始占主导地位,而其它各项可以被忽略(自然包括2)

例如:当n=500时,4n2 项是2n项的1000倍大,因此在大多数非精确场合下,省略2n项对表达式值得影响是可以忽略不计的

其实进一步看,与n2的指数相比其系数4(与指数增大相比系数是很小的)也是无关紧要的

这样,大O符号就记下剩余的部分,写作:
T(n)∈O(n2)

或者更常见的

T(n)=O(n2)

此时,我们就说该算法具有n2阶(平方阶)的时间复杂度

2.2 无穷小渐进

暂不描述

3. 常用函数阶

下表是在分析算法时常见的函数。这些函数都处于n趋近于无穷大的情况下,在这种情况下函数结果值增长的慢的在表上方。c是一个任意常数,重点是n

符号名称(后面都要+个“阶”)
O(1)常数
O(log n)对数,情况最多的底数为2(但也可能为其它),但是底数无关紧要,所以不明确说底数
O[(long n)c]多对数
O(n)线性
O(n log* n)log* n为迭代对数
O(n log n) 线性对数
O(n2)平方
O(nc),Interger(c>1)多项式,有时叫“代数”
O(cn)指数,有时叫“几何”
O(n!)阶乘,有时叫“组合”

时间复杂度


同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行时,效率都肯定不同。这表明使用绝对的时间单位衡量算法的效率是不合适的。撇开这些与计算机软硬件有关的因素,可以认为一个特定的算法“运行工作量”的大小,只依赖于问题的规模(通常用n来表示),或者说它是问题规模n的函数。

算法由 + 构成,则算法时间取决于两者的综合效果。通常会选取一种对于所研究的问题来说是基本操作的原操作,以该原操作重复执行的次数作为算法的时间量度

一般情况下,算法中的基本操作重复执行次数是问题规模n的某个函数f(n),算法的时间量度记作:
T(n)=O(f(n))
称作算法的渐近时间复杂度(asymptotic time complexity),简称为时间复杂度

  1. 通常情况下:原操作就是程序中最深层循环内的语句中的原操作;通常在一个算法内只需要选择一种基本操作来讨论即可,但不排除有时候需要同时考虑几种基本操作。

  2. 由于算法的时间复杂度考虑的只是对于问题规模n的增长率,则在难以精确计算基本操作执行次数的情况下,只需求出它关于n的增长率或阶即可。

  3. 有的情况下,算法中基本操作重复执行的次数还随着问题的输入数据集不同而不同,例如冒泡算法。对这类问题的分析:

    1. 一种办法是计算平均时间复杂度,不过由于各种输入集出现的概率难以确定,算法的平均时间复杂度也很难确定;
    2. 更可行也更常用的方式是,讨论算法在最坏情况下的时间复杂度,通常讨论时间复杂度,如果没有特别说明则均指的是最坏时间复杂度;
    3. 最好时间复杂度,一般不讨论,没有意义。
  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
时间复杂度和空间复杂度是衡量算法效率的两个重要指标,它们分别表示算法执行时间和占用内存空间的大小。通常情况下,在设计和选择算法时,时间复杂度和空间复杂度需要同时考虑,因为它们之间往往存在一定程度的权衡关系。 1. 时间复杂度的计算与比较 时间复杂度是指算法执行所需的时间量级,通常用大O符号表示。在计算时间复杂度时,需要考虑算法中基本操作的执行次数和输入数据规模之间的关系。例如,对于一个长度为n的数组进行排序,如果算法中最多执行了3n²+2n+1次基本操作,则该算法时间复杂度为O(n²)。 在比较不同算法时间复杂度时,需要注意以下几点: - 在相同的输入规模下,时间复杂度低的算法一般更快。 - 在实际应用中,时间复杂度虽然能够反映算法效率,但是不一定能够真实地反映出算法的执行时间,因为具体执行时间还受到硬件设备、编译器等因素的影响。 - 在一些特殊情况下,时间复杂度相同的算法也可能产生不同的执行效率,因此需要综合考虑算法的具体实现方式。 2. 空间复杂度的计算与比较 空间复杂度是指算法执行所需的内存空间量级,通常也用大O符号表示。在计算空间复杂度时,需要考虑算法中所使用的额外空间和输入数据规模之间的关系。例如,对于一个长度为n的数组进行排序,如果算法中需要额外使用n个元素大小的辅助空间,则该算法的空间复杂度为O(n)。 在比较不同算法的空间复杂度时,需要注意以下几点: - 在相同的输入规模下,空间复杂度低的算法一般更优。 - 空间复杂度高的算法可能会导致程序运行时内存不足的问题,因此需要考虑算法所能使用的最大内存空间。 - 在实际应用中,空间复杂度和时间复杂度往往存在一定的权衡关系,需要根据具体问题综合考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值