Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

非紧渐近符号

算法的时间复杂度

在了解接下来的非紧渐近符号之前, 我们先来思考如何用一般(紧)渐近符号描述一个算法的时间复杂度.

的充要条件定理

我们以一个定理来引入, 即渐近符号的夹逼定理, 或者更正式的称为:

Theta 的充要条件定理 (Theorem on the equivalence of and the combination of and )

如下: 对于两个正函数 , 有:

这个定理说明了 Big-Theta 符号是 Big-O 和 Big-Omega 的“交集”. 其证明也非常的简单, 可以通过分别证明充分性和必要性解决. 通过前面的学习, 完成它应该不是什么大问题, 故本书不再赘述.

通过这个定义, 我们可以更好的了解算法的时间复杂度是怎么表示的. 在之前我们已经聊过这个问题了, 现在再深入地解决一下:

  • 所有的符号都并非只是描述算法的一种情况, 我们一般给出三种情况: 最坏, 最优(好)和一般1, 在无特定规定下, 符号描述可以参照脚注22.
  • 表示在对应情况下, 算法的时间复杂度不超过 的常数倍.
  • 表示在对应情况下, 算法的时间复杂度至少为 的常数倍.
  • 表示在对应情况下, 算法的时间复杂度总在 的两个常数倍之间.
  • 以上三个表达都只是简单描述, 任何需要专业化的表达, 最好参照前面的定义进行.

符号

接下来, 我们来看今天的主题——非紧渐近符号: 非紧渐近符号们提供了 非紧界(Non-tight bounds). 它们有时也被称为 严格渐近符号(Strict asymptotic notation)小记号(Little notations)3.

我们来看 符号的定义:

主要区别在于: 在 中, 界 对某个常量 成立, 在 中, 界 对所有常量 成立. 这也就是说, 在 记号中, 当 趋向于无穷大时, 对于 就微不足道了, 即:

关于非紧界这个描述, 是因为 包含同阶函数而 反之. 如, . 同理, 可以推出 . 在本章节的练习与回答中, 也可以通过这种方法判断正误.

符号

不严谨地说, 它与 符号相反. 我们可以利用 来定义它, 下面这个定义同样是它的一个性质:

形式化的定义是:

同样地, 我们有 . 例如, 不过 .

同时还要注意, 我们使用的是 , 这意味着关于 Big-O 和 little-o, Big-Omega 和 little-omega 上面这两个结论都不可逆.

另外我们同样有个极限表达:

相关比较性质

就像这样, 可以把渐近符号之间的比较与实数之间的比较形象类比在一起. 上面在遵照本书之前定义的同时, 默认函数在足够大时取非负值:

在深入定义之前, 我们可以将渐近记号与实数的大小关系对应起来, 这有助于记忆:

渐近记号含义对应实数关系直观理解
同阶 增长速度相同
上界 的增长速度不快于
下界 的增长速度不慢于
非紧上界 的增长速度严格慢于
非紧下界 的增长速度严格快于

我们主要关注五个性质:自反性对称性传递性转置对称性三分性(三歧性).

如果关系 满足: 对任意函数 , 都有 4, 则称该关系具有自反性.

  • (Theta): 自反
  • 恒成立. 就像 .
  • (Big-O): 自反
  • 恒成立. 就像 .
  • (Big-Omega): 自反
  • 恒成立. 就像 .
  • (Little-o): 非自反
  • . 因为 不能严格小于它自己. 就像 不成立.
  • (Little-omega): 非自反
  • . 因为 不能严格大于它自己. 就像 不成立.

如果关系 满足: 推导出 , 则称该关系具有对称性.

  • (Theta): 对称
  • , 则 . 就像 推导 .
  • (Big-O): 非对称
  • 成立, 但 . 就像 不能推导 .
  • (Big-Omega): 非对称
  • 成立, 但 .
  • (Little-o): 非对称
  • , 则 .
  • (Little-omega): 非对称
  • , 则 .

如果关系 满足: 推导出 , 则称该关系具有传递性.

  • 所有记号 () 均具有传递性
  • 例如: 若 , 则 .
  • 这与实数性质一致: 若 , 则 .

下面是渐近记号特有的性质, 指两个关系互为“逆”关系.

定义: 若 推导出 (其中 的对应逆关系), 则称它们具有转置对称性.

  • 互为转置对称
  • 类比:
  • 互为转置对称
  • 类比:
  • 是自身的转置对称
  • 这也解释了为什么 具有对称性.

对于任意两个函数 , 必须且只能满足以下三种关系之一:

  1. (小于)
  2. (等于)
  3. (大于)
  • 结论: 渐近记号满足三分性 (针对 的组合).
  • 注意: 这里的三分性是指 这三个关系构成了完整的划分. 对于任意两个渐近非负函数 , 它们必然处于这三种关系中的一种.
  • 这类似于实数的三分律: 对于任意 , 必有 .
  • 陷阱提示: 不满足三分性.
  • 例如: , .
  • 我们有 成立, 但 不成立.
  • 同时, 成立, 但 不成立.
  • 但是, 如果我们考虑 的组合, 情况会变得复杂 (因为 可以同时成立, 即 ). 真正的“互斥且穷尽”的三分关系是由 构成的.

根据上述性质, 我们可以将这些记号分类:

  1. 等价关系:
  • 只有 是等价关系.
  • 因为它满足自反性、对称性和传递性.
  • 这意味着 将函数集合划分成了若干个等价类 (例如所有的多项式函数 都属于同一个等价类 ).
  1. 偏序关系:
  • 是偏序关系.
  • 因为它们满足自反性、反对称性 (注意: 这里的反对称性指如果 , 则 ) 和传递性.
  • 它们描述了一种“大小”顺序, 但不要求任意两个元素都可比 (虽然在算法分析中常遇到的函数通常可比, 但数学上存在不可比的函数, 如震荡函数).
  1. 严格偏序关系:
  • 是严格偏序关系.
  • 因为它们满足传递性和非自反性(irreflexive).
  • 它们描述了严格的“大小”关系, 不允许相等.

练习与回答

  1. 判断下列关于 Big-Olittle-o 的陈述是否正确.

错误, 正确的应该是 . 其余四个均正确.

  1. 根据已知内容, 判断下列关于 Big-Omega 和 little-omega 陈述是否正确.

已知:

  • , 则
  • , 则 , 但不是

则判断:

  • , 是否满足
  • , 是否满足
  • , 是否满足 又满足

对于上面已知内容, 可以在下一节具体学习. 以上除第2题以外都正确, 通过极限法证明即可.

  1. 假设 都是渐近非负函数. 使用 记号的基本定义来证明 .

证明:

根据 记号的定义, 需要证明存在正常数 , 使得对所有 , 有:

(1)证明上界:

显然,

因为 要么等于 , 要么等于 , 无论哪种情况都不超过两者之和.

.

(2)证明下界:

不失一般性, 假设 (另一种情况对称)

因此:

即:

.

结论: 存在 , 使得对充分大的 :

因此 .


  1. 事实上为: 最坏情况(Worst-case)、最好情况(Best-case)、平均情况(Average-case)、摊还情况(Amortized).

  2. 对于算法的最坏情况, 一般使用;对于算法的平均情况, 一般使用;对于算法的最好情况, 一般使用.

  3. (little-o) 是 (Big-O) 的小记号. (little-omega) 是 (Big-Omega) 的小记号.

  4. 这里省略了匿名函数.