在数学中,渐近分析,也称为渐近学,是一种描述函数极限行为的函数。在计算中,算法的渐近分析是指根据输入大小定义其运行时性能的数学界限。例如,一个操作的运行时间计算为 f (n) ,也许对于另一个操作,它被计算为g (n 2 ) 。这意味着第一个操作的运行时间会随着n的增加而线性增加,而第二个操作的运行时间会随着n 的增加呈指数增长。同样,如果n 的值很小,两个操作的运行时间将几乎相同。
通常,对算法的分析是基于三种情况进行的:
- 最佳情况(欧米茄符号 (Ω) )
- 平均情况(T heta 表示法 (Ω) )
- 最坏情况(O 符号(O))
下面将详细讨论所有这些符号:
欧米茄 (Ω)符号:
欧米茄 (Ω) 符号指定函数f(n) 的渐近下界。对于给定的函数g(n),Ω(g(n)) 表示为:
Ω (g(n)) = {f(n): there exist positive constants c and n0 such that 0 ≤ c*g(n) ≤ f(n) for all n ≥ n0}.
This means that, f(n) = Ω(g(n)), If there are positive constants n0 and c such that, to the right of n0 the f(n) always lies on or above c*g(n).
按照以下步骤计算程序的Ω:
- 将程序分成更小的部分。
- 假设给定的输入使得程序花费的时间最少,求出为每个段执行的操作数(就输入大小而言)。
- 将所有操作加起来并简化它,假设它是 f(n)。
- 删除所有常数并选择具有最小阶数的项或任何其他函数,当 n 趋于无穷大时,它总是小于 f(n),假设它是 g(n),那么 f(n) 的 Omega (Ω)是Ω(g(n))。
Omega 符号并不能真正帮助分析算法,因为针对输入的最佳情况评估算法是虚假的。
T heta ( Θ ) 符号:
Big-Theta(Θ) 表示法指定函数f(n) 的界限。对于给定的函数g(n),Θ(g(n)) 表示为:
Θ (g(n)) = {f(n): there exist positive constants c1, c2 and n0 such that 0 ≤ c1*g(n) ≤ f(n) ≤ c2*g(n) for all n ≥ n0}.
This means that, f(n) = Θ(g(n)), If there are positive constants n0 and c such that, to the right of n0 the f(n) always lies on or above c1*g(n) and below c2*g(n).
按照以下步骤计算程序的 Θ:
- 将程序分成更小的部分。
- 查找所有类型的输入并计算它们需要执行的操作数量。确保输入案例均匀分布。
- 找到所有计算值的总和并将总和除以输入的总数假设在去除所有常数后获得的 n 的函数是 g(n),然后在 Θ 表示法中,它表示为 Θ(g(n) )。
示例:在线性搜索问题中,假设所有情况均匀分布(包括数组中不存在键的情况)。因此,当键出现在位置 1、2、3、……、n 且不存在时,将所有情况相加,然后将总和除以 n + 1。
Average case time complexity =
⇒
⇒
⇒
由于在计算平均时间复杂度时考虑了所有类型的输入,因此它是算法的最佳分析方法之一。
大 – O 符号:
Big – O (O) 表示法指定函数f(n) 的渐近上限。对于给定的函数g(n),O(g(n)) 表示为:
Ω (g(n)) = {f(n): there exist positive constants c and n0 such that f(n) ≤ c*g(n) for all n ≥ n0}.
This means that, f(n) = Ω(g(n)), If there are positive constants n0 and c such that, to the right of n0 the f(n) always lies on or below c*g(n).
按照以下步骤计算程序的 O:
- 将程序分成更小的部分。
- 假设给定的输入使得程序花费最大时间,即最坏的情况,找到为每个段执行的操作数(根据输入大小)。
- 将所有操作加起来并简化它,假设它是f(n)。
- 删除所有常数并选择具有最高阶的项,因为对于n趋于无穷大的常数和f(n) 中的低阶项将是微不足道的,假设函数是g(n)那么,大 O 表示法是O(g(n))。
它是最广泛使用的符号,因为它更容易计算,因为不需要像在 theta 符号的情况下检查每种类型的输入,而且由于考虑了输入的最坏情况,它几乎给出程序执行时间的上限。
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。