作用:
渐进最优是用以评价算法的效率
定义:
如果已经证实一个问题需要使用Ω(f(n))的资源来解决,而某个算法用O(f(n))的资源来解决这个问题,则该算法就是渐进最优的。
解释:
(1) O符号表示函数在增长到一定程度时总小于一个特定函数的常数倍,大Ω符号则表示总大于。
(2) 用数学语言描述即是:
f ( ν ) = Ω [ g ( ν ) ] {\displaystyle f(\nu )=\Omega [g(\nu )]} f(ν)=Ω[g(ν)]的含义为:
若存在 x 1 , κ {\displaystyle x_{1},\kappa } x1,κ 使得:对于所有 ∀ x > x 1 , f ( x ) > κ g ( x ) {\displaystyle \forall x>x_{1},f(x)>\kappa g(x)} ∀x>x1,f(x)>κg(x).
(3) 大Ω符号与大O符号正好相反,即:
{ f ( ν ) = O [ g ( ν ) ] g ( ν ) = Ω [ f ( ν ) ] {\displaystyle {\begin{cases}f(\nu )=\mathrm {O} [g(\nu )]\\g(\nu )=\Omega [f(\nu )]\end{cases}}} {f(ν)=O[g(ν)]g(ν)=Ω[f(ν)]
渐进最优的例子包括数据结构动态数组[1],能够在常数时间内索引,但性能在多数机器上不如普通数组的索引。另外,在所有基于比较的排序算法中,归并排序和堆排序是渐进最优的,说到渐进这些算法是依赖于n的,并且忽略常数因子,这些算法随n的递增趋于最优。所以在基于比较的排序算法中,它们都是渐进最优的,它们只比较较少的次数,它们的运行时间主要受比较次数的影响,都是O(nlgn)。