我正在阅读大 O 符号。在我的书中,有一个例子,其中n 2的复杂度属于 O( n 3 ) 类。这对我来说似乎不合逻辑,因为n 3取决于n并且它不仅仅是我们可以“摆脱”的简单常数乘数。
请向我解释为什么这两个具有相同的复杂性。我在这个论坛或其他任何地方都找不到答案。
大 O 确定较大 n 值的上限。O( n 3 )大于O( n 2 ),所以n 2程序仍然是O( n 3 )。它也是 O( n 4 ), O(*n 5 ), ..., O( n infinity )。
然而,反之亦然。n^3 程序不是 O( n 2 )。相反,它将是 Omega( n 2 ),因为 Omega 确定了一个下限(我们至少需要做多少工作)。
Big O 没有说这个上限是“严格的”,它只需要高于实际复杂度。因此,虽然 n*n 复杂度程序的界限为 O( n 3 ),但这并不是一个非常严格的界限。O( n 2 ) 更紧凑,信息更丰富。