渐近成本混乱

Asymptotic costs confusion

所以我试图了解不同的渐近成本,我可以大致判断哪些更快但无法真正掌握它们何时发生/为什么,任何人都可以向我解释一些什么时候下面的例子会发生吗?甚至任何其他复杂性

了解复杂性如何发生在很大程度上是了解因素出现的位置并将它们以某种方式组合在一起的问题。如果正在执行的操作是以与其他操作相关的方式完成的,那么复杂性就会成倍增加;如果它们是串联执行的,则会增加复杂性。

列表遍历,例如,每n次;所以你可能马上就知道 O(n²) 复杂性来自双重嵌套循环算法,O(n³) 来自三重嵌套算法。

根据我的经验,现在用多个术语编写复杂性并不是一种常见的做法 - 例如 O(n² + 2n + 1)。这是因为我们通常关心大 n 的复杂性,在这种情况下,低阶项最终变得可以忽略不计。但是,您可以通过嵌套循环算法来想象这样的事情,其中​​两个单独的步骤在 O(1) 的外循环中执行(可能向集合中添加一些东西),加上循环外的单个 O(1) 操作.

同样,树结构通常会产生对数复杂度。一棵完全平衡的二叉树的高度与log2(n)成正比,其中n是树中的节点数。因此,使用递归算法在该树中找到某些东西——可以被认为是遍历树的层次——是 log2(n)。

请注意,在二叉树不完整且不平衡的最坏情况下(即每个节点只有一个 child 填充),树在拓扑上与列表相同,因此搜索通过它是 O(n)。这就是为什么许多算法列出一系列复杂性的原因。