时间复杂度 - 比较不同的算法

时间:2016-06-19 19:42:12

标签: algorithm time big-o complexity-theory

我试图了解计算复杂性以及计算机根据所使用的算法执行指令的速度。我在http://www.cs.cmu.edu/~pattis/15-1XX/15-200/lectures/aa/上找到了一个教程,其中显示了不同的复杂性类别以及运行每个复制程序所需的时间,具体取决于它运行的项目数。

例如,如果计算机每10 ^ -9秒可以计算1条指令,那么如何获得这些指令呢?我一直试图理解这个表格,因为它没有深入计算。

例如,O(1) - 为什么它是10 ^ -7秒 - 它不应该只是10 ^ -9? 另外,对于其他运行时间,我不确定如何获得这些值。

2 个答案:

答案 0 :(得分:0)

当你说10 ^ -9时,它意味着给定程序只有一条指令。通常不是。

此外,该表提供了一些大致的信息供比较。

初始段落中给出的另一个信息是正在评估的实际计划,以实际计算执行的指令数。

答案 1 :(得分:0)

实际上,如果表假设O(1)操作正好是1次操作,那就不那么容易混淆了。但是,在表格上面说“然后下表让我们直观地了解不同复杂度类别中算法的运行时间如何随问题大小而变化。”因此,当N增长时,条目的焦点在于 更改 的运行时间。

所以,我可以解释表格中的数据如下。它假设在每个复杂度类中,如果N = 10需要一定的时间,那么如果N变为100,1000,......,改变多少。

例如,在O(1)的情况下,如果假设N = 10需要10 ^ -7,则对于较大的N,它将花费相同的量,因为复杂性与N无关。

可能令人困惑的另一行是O(N ^ 3):你可以说如果N = 10需要10 ^ -5,那么对于N = 100,这个值乘以10 ^ 3,依此类推。事实上,对于N = 10,它并不完全计算10 ^ 3 x 10 ^ -9,而是假定一些运行时间而 仅关注运行时的变化 N变得更大。