有没有用于计算算法复杂度的常用技术?

1 time-complexity

我想知道如果需要找到算法的复杂性,是否有任何常见或最佳实践技术?

Nei*_*eil 6

O(1)表示您执行一系列指令一定次数(简单地说,这意味着您不使用任何循环).

O(n)表示您有一个循环在内部执行O(1)操作(例如,我在列表中搜索特定值).

O(log n)使用智能索引系统(例如二叉树或哈希映射)搜索列表.每次通过,你基本上消除了一半的可能性(不像O(n),它一次消除一个).

O(n ^ 2)表示你有一个用于执行交叉检查的内部和外部循环(如果我想循环遍历网格中的所有项目,我首先循环遍历所有行,然后遍历每行的每个单元格,例如).您可以将其概括为O(n ^ m),其中m表示程序中循环n次的最大循环深度.

O(2 ^ n)意味着你在一组的每个可能的组合中骑自行车.如果我有{A,B}项,那么在每个可能的组合中循环会产生{{},{A},{B},{AB}}.

O(n!)正在竭尽全力.试图通过暴力破解密码就是O(n!)的一个例子.你不能比这更糟糕,并且存在O(n!)的算法,因为没有其他选择(例如P和NP完成).

这是一个相当快速的总结,但这是它的要点.循环恒定次数的技术循环是O(1),除非它包含内循环.重要的是你没有循环未知的次数.