Skip to content

渐进符号

算法分析离不开渐进符号,它能帮助我们去除常量、低阶量对分析的影响,同时在大规模输入时帮助分析比较两种算法的优劣。

这些记号并不是计算机科学家发明的,而是二十世纪初用于数论领域。高德纳(Donald E. Knuth)提议用于算法分析。

下面先分析最常见的符号是大 记号,然后介绍大 、大 和小 记号。

记号

记号(Big-O Notation

等价于存在常量 使得对所有 都有

注意,这里 是常量的意思是不依赖于

定义了上界,“小于等于”的语义。

记号

记号(Big-Omega Notation

等价于存在常量 使得对所有 都有

定义了下界,“大于等于”的语义。

记号

记号(Big-Theta Notation

等价于存在常量 使得对所有 都有

同时定义了上下界,“等于”的语义。

记号

记号(Little-O Notation

等价于对所有常量 ,都存在 使得对所有 都有

与大 记号不同,这里要求对所有 都要成立,而不是找到一个即可。如果大 记号表示“小于等于”的语义,那么小 表示的就是“严格小于”的语义。

示例

多项式

下面给出一个具体的例子,分析 次多项式 但是不是 。前者也说明大 记号会忽略低阶项。

其中 的整数, 是实数,那么 证明:利用之前的定义证明,关键点在于找到 使得 。这里我们选择 定义开始,每一项系数 取绝对值,那么得到 由于 并且 ,那么 ,因此 证毕。

如果 的整数,,那么 不是 。 证明:这里使用反证法。假设 ,那么存在 使得所有 都有 那么 上式表明常数 大于任意大的整数,这明显是错误的。证毕。

指数上加一个常量

如果 其中 是常量,那么 证明: 因此我们选 ,那么有

指数上乘一个常量

如果 那么 不是 。 证明:这里仍旧使用反证法。假设 ,那么存在 使得 那么 无穷大,也就是说常量 能够大于无穷,矛盾。

最大值

是从正整数到非负实数的函数,且对 那么 证明:我们需要找到 使得 由于 是非负函数,那么 变换得到 根据定义,