(翻译文)
算法的效率取决于执行算法所需的时间、存储和其他资源。效率是用渐近符号来衡量的。
对于不同类型的输入,算法可能没有相同的性能。随着输入大小的增加,性能将发生变化。
研究算法性能随输入大小顺序的变化被定义为渐近分析。
渐进符号
渐近符号是一种数学符号,用于描述当输入趋于某个特定值或某个极限值时算法的运行时间。
例如:在冒泡排序中,当输入数组已经排序时,算法所花费的时间是线性的,即最佳情况。但是,当输入数组处于反向状态时,算法需要最大时间(二次方)对元素进行排序,即最坏情况。
当输入数组既不排序也不按相反顺序排序时,则需要平均时间。这个持续阶段用渐近符号表示。
渐近符号主要有三种:Theta表示法、Omega表示法和Big-O表示法。
Theta表示法(Θ表示法)
Theta表示法从上方和下方将函数括起来。由于它代表算法运行时间的上限和下限,所以用来分析算法的平均情况复杂度。
上图表示Theta将函数限制在常数因子之内
对于一个函数g(n),Θ(g(n))由以下关系给出:
Θ(g(n)) = { f(n): 存在正常数c1, c2 和 n0
0 ≤ c1g(n) ≤ f(n) ≤ c2g(n) 其中所有的 n ≥ n0 }
如果存在正常数c1和c2,使得它可以夹在c1g(n)和c2g(n)之间,对于足够大的n,上述表达式可以描述为属于集合Θ(g(n))的函数f(n)。
如果一个函数f(n)位于c1g(n)和c2>g(n)之间的任意一个n,且n ≥ n0,则f(n)被称为渐近紧界。
大O表示法(O表示法)
Big-O表示代表算法运行时间的上限。因此,它给出了算法的最坏情况的复杂性。
上图表示Big-O给出函数的上限
O(g(n)) = { f(n): 存在正常数c和n0
使得 0 ≤ f(n) ≤ cg(n),n ≥ n0 }
如果存在一个正常数c,使得它位于0和cg(n)之间,对于足够大的n,则上述表达式可以描述为属于集合O(g(n))的函数f(n)。
对于n的任何一个值,算法的运行时间不超过O(g(n))提供的时间。
由于它给出了算法最坏情况下的运行时间,因此它被广泛用于分析算法,因为我们总是对最坏情况感兴趣。
Ω表示法(Ω表示法)
Ω表示法表示算法运行时间的下限。因此,它提供了算法的最佳情况复杂度。
上图表示Omega给出功能的下限
Ω(g(n)) = { f(n): 存在正常数c和n0
使得 0 ≤ cg(n) ≤ f(n),n ≥ n0 }
如果存在一个正常数c,使得它位于cg(n)之上,对于足够大的n,上述表达式可以描述为属于集合Ω(g(n))的函数f(n)。
对于任何n值,算法所需的最小时间由Ω(g(n))给出。
参考文献
https://www.programiz.com/dsa/asymptotic-notations