一、定义
对于任何函数f(n)都可以用O,Ω,Φ来表示当n→∞时的阶的情况,可以把O,Ω,Φ分别看成是≥,≤,=,分别估计了函数的渐进上界,渐进下届和准确界。定义表示如下:
1.第一种定义:
设函数f(n)代表某一算法在输入大小为n的情况下的工作量(效率),假设
f(n) 、g(n)非负单调,且极限存在,则当n趋于无穷的时候,我们将
f(n) 与另一行为已知的函数g(n)进行比较:
1)如果,则称f(n)在数量级上严格小于g(n),记为f(n)=o(g(n))。
2)如果,则称f(n)在数量级上严格大于g(n),记为f(n)=ω(g(n))。
3)如果,这里c为非零常数,则称f(n)在数量级上等于g(n),记为f(n)=Θ(g(n))。
4)如果f(n)在数量级上小于或等于g(n),则记为f(n)=O(g(n))。
5)如果f(n)在数量级上大于或等于g(n),则记为f(n)=Ω(g(n))。
2.O表示法第二种定义
对于非负函数T(n),存在两个正常数c和n0,并且对于所有的n>n0,有T(n)≤cf(n),则称T(n)在集合O(f(n))里(即前一个集合可以被后一个集合覆盖),记为T(n)=O(f(n)),直观意义是,对于足够大的数据集合,本算法执行的步骤数总是少于cf(n)。我们在进行算法分析时希望获得的是尽可能紧凑的上界。
上述算法计算时间的渐进表示是由D.Knuth提出的,但是在数学家眼中f(n)=O(g(n))这种等于号是不严格,但这没关系,不影响计算机算法的分析。
二、O,Ω,Θ的性质
利用这些性质可以大大简化对算法的分析。
1)性质1 O,Ω,Θ是自反的、传递的。例如:
· 自反性,f(n)=O(f(n))
·传递性,若f(n)=O(g(n)),g(n)=O(h(n)),则f(n)=O(h(n))。
2)性质2 Θ还有对称性:f(n)=Θ(g(n))⟺g(n)=Θ(f(n))。
3)性质3 对于任意的f(n),g(n),我们有f(n)+g(n)=Θ(max{f(n),g(n)}),即对于一个由若干部分组成的串行程序,其总的渐进复杂度等于其复杂度最高的部分,这是个十分有用的性质。
4)性质4 如果f(n)=O(kg(n)),这里k是一个常数,则f(n)=O(g(n)),这条规则告诉我们系数是无关紧要的。因为我们关心的是数量级的比较,而不是同一数量级里面的细小差异。当然当关注点不同时,系数可能会变得重要。
5)性质5 如果f1(n)=O(g1(n),并且f2(n)=O(g2(n),则(f1+f2)(n)=O(max{g1(n),g2(n)}).
6)性质6 如果f1(n)在O(g1(n)里,并且f2(n)在O(g2(n)里,则f1(n)f2(n)在O(g1(n)O(g2(n)里。
参考书:《算法之道》邹横明著。
本文详细解释了算法分析中常见的O, Ω, Θ符号的定义及其在算法复杂度分析中的应用。通过这些符号,我们可以更准确地评估算法的性能,并介绍了这些符号的一些重要性质。

被折叠的 条评论
为什么被折叠?



