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

Algorithm 如何从执行时间验证算法的时间复杂度?,algorithm,big-o,Algorithm,Big O,如果在两个不同的n,所有其他常数上运行我计算的算法为O(n^2),我可以通过比较执行时间来验证它是否为O(n^2)?例如,n1=50和n2=100。既然n2是n1,time2应该是(n2-n1)^2倍于time1,对吗?还是只能通过图表进行验证 我可以通过比较执行时间来验证它是O(n^2)吗 没有 时间复杂性是一个纯粹的理论概念。不能直接建立执行时间和时间复杂度之间的关系 要验证某个算法是否为O(n^2),应仅依赖于该算法本身 我可以通过比较执行时间来验证它是O(n^2)吗 没有 时间复杂性是一

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

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

没有

时间复杂性是一个纯粹的理论概念。不能直接建立执行时间和时间复杂度之间的关系

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

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

没有

时间复杂性是一个纯粹的理论概念。不能直接建立执行时间和时间复杂度之间的关系

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

这取决于“验证”的含义

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

不,但无论是绘图还是仅仅比较数字都可以让你确信它是O(n^2)——如果你已经确信结果应该是什么,并且它是真的,那么证明某事是真的通常会更容易

您无法以这种方式证明的原因如下:

  • 对于某些输入,算法可能会很慢,并且您不会触发它。请注意,“随机”输入对于此类测试并不理想
  • 复杂度可能是100*n+n*log(n)-如果您将其绘制为n的“小”值,您可能会将其视为O(n)
  • 复杂度通常是为理想的计算机而设定的,而您是在实际的计算机上运行的。因此,当计时时,您将看到由于内存缓存不足而导致的速度减慢,这不应该是理想复杂性的一部分
如果您使用“验证”来表示“实验测试”,例如,一个O(n^2)算法实际上是O(n^2),那么,您可以使用这两种方法进行验证。

这取决于“验证”的含义

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

不,但无论是绘图还是仅仅比较数字都可以让你确信它是O(n^2)——如果你已经确信结果应该是什么,并且它是真的,那么证明某事是真的通常会更容易

您无法以这种方式证明的原因如下:

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

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

time2比time1大
(n2/n1)^2
,而不是
(n2-n1)^2
使用两个以上的n值可能更好;e、 g.如果执行时间从2变为4,则可能是2+2、2*2或2^2。第三点将为您提供更多信息。谢谢!最后,我绘制了运行时与n的对比图,这是我需要验证的,但我注意到它是(n2/n1)^2time2比time1大
(n2/n1)^2
,而不是
(n2-n1)^2
使用两个以上的n值可能更好;e、 g.如果执行时间从2变为4,则可能是2+2、2*2或2^2。第三点将为您提供更多信息。谢谢!我最终绘制了运行时与n的对比图,以确定我需要验证的原因,但我注意到它是(n2/n1)^2,这有点争议。时间复杂性的整体思想是算法需要更多的时间来执行。用一组数据运行一次是没有意义的,但是如果用不同的数据运行多次,在绘制时间图时就会清楚地看到差异。我同意不应该依赖它,但对于一个项目,我必须这样做。如果你想比较两种不同的算法,你可以比较它们的时间复杂度等级。但要验证算法是否为O(n^2),您不能依赖于执行时间。换句话说,如果你想问某人一个算法的时间复杂度,只需向他们解释算法。您不需要编写代码,而是多次运行代码,以绘制执行时间与输入大小的关系。绘制图形可能会给你一些想法,但这不能作为验证算法时间复杂度的一种方法,这是有争议的。时间复杂性的整体思想是算法需要更多的时间来执行。用一组数据运行一次是没有意义的,但是如果用不同的数据运行多次,在绘制时间图时就会清楚地看到差异。我同意不应该依赖它,但对于一个项目,我必须这样做。如果你想比较两种不同的算法,你可以比较它们的时间复杂度等级。但要验证算法是否为O(n^2),您不能依赖于执行时间。换句话说,如果你想问某人一个算法的时间复杂度,只需向他们解释算法。您不需要编写代码,而是多次运行代码,以绘制执行时间与输入大小的关系。绘制图形可能会给你一些想法,但这不能被接受为验证算法的时间复杂性。谢谢,我的意思是“验证”是指实验测试。我已经正式证明了复杂性,但也被要求提供定量的“证明”。谢谢,我的意思是“验证”是指实验测试。我已经正式证明了它的复杂性,但被要求出示qua