定理
① 如果存在正参数c和n0使得当N≥n0时T(N)≤cf(N),则记为T(N)=O(f(N))。
② 如果存在正参数c和n0使得当N≥n0时T(N)≥cg(N),则记为T(N)=Ω(g(N))。
③ 当且仅当T(N)=O(h(N))和T(N)=Ω(h(N))时,T(N)=θ(h(N))。
这些定义的的目的是在函数间建立一种相对的级别,这种相对的级别比较的是函数间的相对增长率。
典型的增长率
函数 | 增长率 |
---|---|
c | 常数 |
logN | 对数 |
log2N | 对数平方的 |
N | 线性的 |
NlogN | |
N2 | 二次的 |
N3 | 三次的 |
2N | 指数的 |
一般法则
①for循环:至多是循环内部语句运行时间×迭代次数
例如,下列程序片段为O(N2)
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
k++;
②if/else语句:至多是判断的运行时间加上S1和S2中运行时间长着的总的运行时间
for(condition)
S1
else
S2