我们通常会用函数来表示算法的时间及空间复杂度,而渐进符号其实就只是要表达这个函数简化后的形式,或者也可以说,让我们知道这个函数的“等级”。
有了算法复杂度等级之后,我们可以更简单的与其他算法进行比较,从中找出最有效率的算法。
1-3 这三个是最常使用的渐进符号,尤其是第一个 Big-Oh, 4-5 则几乎不会用到。下面我会介绍这五个渐进符号的定义及例子。
Big-oh
在 n=5 之后,6n 的值将超越 5n+5 并且越拉越远。
在渐进符号这个主题里 $\in$ 也可以记作 $=$,很多算法书籍也都会直接用$=$,并不是写错了!
看到这里,不知道你有没有发现到,其实 $O(g(n))$ 就是要搜集那些成长速率比自己小或者与自己相差常数倍的函数,也是我们常常用来表示一个算法复杂度上界(upper bound)的符号。
当讨论一个算法复杂度时,我们对它在最坏情况(worst case)的表现最有兴趣,这也是为什么 $O(\cdot)$ 比其它渐进符号更常被使用到。
在真正讨论算法的复杂度时,我们最常用的就是 Big-Oh,若对其他复杂度严谨的定义有兴趣的读者,可以参考算法的书籍或维基百科。
