如何从执行时间验证算法的时间复杂度?

时间:2018-09-11 02:58:05

标签: algorithm big-o

如果在两个不同的n上运行我计算得出的算法O(n^2),而其他所有常数都不变,我是否可以通过比较执行时间来验证它是否为O(n^2)?例如,n1 = 50n2 = 100。由于n2n1,所以time2应该是(n2 - n1)^2的{​​{1}}倍,对吗?还是只能通过图形进行验证?

2 个答案:

答案 0 :(得分:3)

这取决于“验证”的含义。

如果您的意思是正式验证(即证明),那么:

不是,但是绘制或仅比较数字都可以使您确信它是O(n ^ 2)-如果您已经确定结果应该是什么,通常更容易证明某件事是正确的,并且这是真的。

您无法证明这一点的原因例如:

  • 对于某些输入,该算法可能会比较慢,并且您不会触发它。请注意,“随机”输入不适用于此类测试。
  • 复杂度可能为100 * n + n * log(n)-如果将其绘制为n的“小”值,则可能会看到O(n)。
  • 对于理想的计算机,通常会说明其复杂性,而在实际的计算机上运行时,则是​​复杂的。因此,在计时时,您会发现由于内存缓存不足而导致速度变慢,这不应该成为理想复杂性的一部分。

如果您使用“验证”来表示“实验性测试”,例如一个O(n ^ 2)算法实际上就是O(n ^ 2),那么,是的,您可以同时使用这两种方法。

答案 1 :(得分:0)

  

我可以通过比较执行时间来验证它是O(n ^ 2)吗?

否。

Time complexity是纯粹的理论概念。您无法直接建立执行时间与时间复杂度之间的关系。

要验证算法是否为O(n ^ 2),应仅依赖于算法本身。