「大O符号」用于描述算法或函数在输入规模(通常记为 n)逐渐增大时的增长趋势。它主要关注的是上界,也就是在最坏情况下算法复杂度随 n 扩增的速度。 举个例子,如果某个算法的运行时间 $T(n)$ 与 $n^2$ 成正比,我们会说这个算法的时间复杂度是 $O(n^2)$。这种表示法不在意常数系数,也不在意低次项的影响,比如 $T(n) = 3n^2 + 10n + 100$,依然可以用 $O(n^2)$ 来进行描述。 大O符号的核心思想是: 1. 忽略常数:只关注随着 n 增加时主导复杂度的最高阶项; 2. 描述上界:确保用一个简单的函数形式覆盖了算法可能的最糟糕增长率。 常用的复杂度等级大致从小到大包括:$O(1)$(常数复杂度)、$O(\log n)$(对数复杂度)、$O(n)$(线性复杂度)、$O(n \log n)$、$O(n^2)$、$O(2^n)$、$O(n!)$ 等。每个阶层都反映了算法随输入规模增长而需要的时间或空间需求在数量级上的差异。