算法(二)时间复杂度

1.三种分析方式

最坏情况分析 Worst-Case Analysis

  • 算法解决规模为n的问题所需的最长时间。
  • 这给了一个算法的时间复杂度的上界,一般都使用最坏情况分析。

最好情况分析 Best-Case Analysis

  • 算法解决规模为n的问题所需的最短时间。

平均情况分析 Average-Case Analysis

  • 算法解决规模为n的问题所需的平均时间。
  • 有时,很难找到算法的平均情况行为。

2.基本分析方法

赋值:O(1)
循环:O(n)
在这里插入图片描述

3.函数的种类

常数Constant5
对数Logarithmic5 log n
多对数Poly Logarithmic(log n)^5
多项式Polynomialn^5
指数Exponential2^5n
阶乘Factorialn!

函数增长速率
在这里插入图片描述

4.增长的渐近阶

4.1 渐进上界:big-oh

如果存在常数c>0和n0>=0,使对于所有n>n0,我们有T(n)<=c·f(n),则T(n) =O(f(n))
O(f(n)): 一种增长速度小于等于f(n)的T(n)函数

T ( n ) = 32 n 2 + 17 n + 32. T(n) = 32n^2 + 17n + 32. T(n)=32n2+17n+32.

  • T(n) is O(n^2) and O(n^3).
  • T(n) is not O(n).

4.2 渐进下界:big-omege

如果存在常数c>0和n0>=0,使对于所有n>n0,我们有T(n)>=c·f(n),则T(n)=W(f(n))
W(f(n)): 一种增长速度大于等于f(n)的T(n)函数

T ( n ) = 32 n 2 + 17 n + 32. T(n) = 32n^2 + 17n + 32. T(n)=32n2+17n+32.

  • T(n) is Ω(n^2) and Ω(n).
  • T(n) is not Ω(n^3)

4.3 渐进紧确界:big-theta

T(n) is Θ(f(n)) if T(n) is both O(f(n)) and Ω(f(n)).
Q(f(n)): 一种增长速度等于f(n)的T(n)函数

T ( n ) = 32 n 2 + 17 n + 32. T(n) = 32n^2 + 17n + 32. T(n)=32n2+17n+32.

  • T(n) is O(n^2) and Ω(n^2), so it is Θ(n^2) .
  • T(n) is not Θ(n) or Θ(n^3).

4.4 性质

传递性Transitivity

  • 若f = O(g) 且 g = O(h) 则 f = O(h).
  • 若f = W(g) 且 g = W(h) 则 f = W(h).
  • 若f = Q(g) 且 g = Q(h) 则 f = Q(h).

可加性Additivity

  • 若 f = O(h) 且 g = O(h) 则 f + g = O(h).
  • 若 f = W(h) 且 g = W(h) 则 f + g = W(h).
  • 若 f = Q(h) 且 g = O(h) 则 f + g = Q(h).

5.一些常见函数的渐进界

在这里插入图片描述

5.1 常数时间 Constant time: O(1)

运行时间并不依赖于输入的大小。

  • 赋值;
  • 比较(=,<,>)
  • 布尔运算(and,or)
  • 数学基本运算(+、-、*、/)

5.2 线性时间 Linear time: O(n)

运行时间最多是一个常数乘以输入的大小。
›计算最大值。计算n个数a1,…,an的最大值。

5.3 对数时间 O(nlogn) time

对每个b>1和每个x>0,我们都有logbn=O(n^x)
出现在分治算法中。
;排序。归并排序和堆排序是执行O(n log n)比较的排序算法。
›最大空白区间。给定文件副本到达服务器的n个时间戳x1,…,xn,当没有文件副本到达服务器的最大时间间隔是什么?
›O(nlogn)解决方案。按顺序扫描排序列表,确定最大差距连续时间邮票。

5.4 二次时间 Quadratic time:O(n2)

枚举所有对元素。
›最近点对。给定平面上n个点的列表(x1, y1),…,(xn, yn),找出最接近的一对。
; O (n2)解决方案。尝试所有的点对。

5.5 立方时间 Cubic time:O(n^3)

枚举所有元素的三元组。
剥离。给定n个集合S1,…,Sn每个集合都是1,2,…,n的子集,它们中是否有不相交的对?
O (n3)解决方案。对于每对集合,确定它们是否不相交。

5.6 多项式时间 Polynomial time :O(n^k)

令f是一个d阶多项式,其中系数ad是正数,那么f=O(n^d)
大小为k的独立集。给定一个图,是否有k个节点,使得没有两条边连接在一起?
O (n^k)的解决方案。枚举k个节点的所有子集。

5.7 指数时间Exponential time

对每个r>1和每个d>0,有nd=O(rn)
独立集。给定一个图,独立集的最大大小是多少?
›O(n^2 2^n)溶液。列举所有子集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值