Java 如何验证算法的运行时间?

Java 如何验证算法的运行时间?,java,algorithm,performance,Java,Algorithm,Performance,我使用仿射间隙代价对全局对齐算法进行编码。以大O表示法表示的算法运行时间为^2。然而,我的老师在课堂上说,为了验证运行时间,必须将运行时间除以n^2,其中n是使用不同长度序列的序列长度。如果n,Rn/n^2低于水平线,则验证运行时间。我真的不明白那是什么意思。我用不同长度的序列绘制了Rn/n^2。它成功了。我一开始有波动,但后来波动消失了,你也可以在图片中看到这一点。我使用的序列长度从1000个碱基到10000个碱基。 有人知道Rn/n^2如何验证运行时间吗?我试着在网上查找,但找不到可能的答案

我使用仿射间隙代价对全局对齐算法进行编码。以大O表示法表示的算法运行时间为^2。然而,我的老师在课堂上说,为了验证运行时间,必须将运行时间除以n^2,其中n是使用不同长度序列的序列长度。如果n,Rn/n^2低于水平线,则验证运行时间。我真的不明白那是什么意思。我用不同长度的序列绘制了Rn/n^2。它成功了。我一开始有波动,但后来波动消失了,你也可以在图片中看到这一点。我使用的序列长度从1000个碱基到10000个碱基。
有人知道Rn/n^2如何验证运行时间吗?我试着在网上查找,但找不到可能的答案。如果我的问题太简单,请原谅。我没有计算机科学背景。

如果我们说一个算法在On²中,我们实际上是指运行该算法所需的步骤数,作为输入大小n的函数在On²中

当我们说一个函数在On²中时,实际上是指存在一个正常数c,因此对于大的输入大小n,fn 这相当于说:存在一个正常数c,因此对于大输入尺寸n,c>fn/n²

您已经注意到上面的图收敛到一个常量值。这是你的c

当然,运行您使用的算法所需的步骤数

On2被定义为函数Rn的集合,对于某些常数c,Rn≤对于所有足够大的n

这个不等式等价于Rn/n2≤c

所以你们的老师建议你们画出Rn/n2,这样,对于足够大的n,你们可以得到一个常数c


请注意,此图不是正式的证明。这只是一个有用的可视化。

更简单地解释它:On²中的算法就像一个二次函数。你总是可以将二次函数除以a*b²形式的函数,得到一个常数函数。

一些数学知识。对不起,但你确实需要一点数学知识才能真正理解这一点

符号fn位于^2上表示:

1定义gn=fn/n2

当N趋于无穷大时,gn的极限为C,其中C是常数

直观地说,随着n越来越大,gn函数越来越接近C。数学家会说它收敛于C

事实上,数学比那复杂一点,但我很生疏。我尽量保持简单


你的图表所做的是证明gn确实收敛。C值是Y轴上的值,对应于图形接近的直线。。。随着X轴上的值变为无穷大。

运行时间在^2上意味着将始终存在2个实数正数b和n0,因此,对于每n>=n0


Rn您所做的是规范化数据,因此如果数据确实在^2上,那么输出应该是常量。同样,如果你打开了,那么你做Rn/n,看看它是否真的是线性的。谢谢。谢谢你这么好的解释谢谢你的回答对我帮助很大