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

时间:2010-11-02 13:08:45

标签: time-complexity

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

2 个答案:

答案 0 :(得分: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),除非它包含内循环。重要的是你没有循环未知的次数。

答案 1 :(得分:4)

Big O是标准的。

  

虽然作为纯数学的一部分而开发,但这种符号现在经常用于分析算法以描述算法对计算资源的使用:通常表达算法的最坏情况或平均情况运行时间或内存使用情况作为使用大O表示法输入长度的函数。

相关问题