我使用仿射间隙成本编码了全局对齐算法。 big-O表示法的算法运行时间为O(n ^ 2)。然而,我班上的老师说,为了验证运行时间,必须将运行时间除以n ^ 2,其中n是序列的长度(使用不同长度的序列)。如果(n,R(n)/ n ^ 2)低于水平线,则验证运行时间。我无法理解这意味着什么。我使用不同长度的序列绘制了R(n)/ n ^ 2。它奏效了。我在开始时有波动但随后波动消失了(你也可以在图像中看到这一点)。我使用的序列长1000个碱基至10,000个碱基。 某人R(n)/ n ^ 2如何验证运行时间?我试过在互联网上寻找但却找不到可能的答案。请原谅我,如果我的问题太简单了。我没有计算机科学背景。
答案 0 :(得分:2)
如果我们说算法在O(n²)中,我们实际上是指运行算法所需的步骤数,因为输入大小n 的函数是O(n²)。
当我们说函数在O(n²)中时,我们实际上意味着存在一个正常数j > 0
,因此c
表示大输入大小n。
这相当于说:有一个正常数f(n) < c * n²
,因此对于大输入大小n c
。
您已经注意到上面的图表会收敛到一个恒定值。这是您的c > f(n) / n²
。
当然,运行您使用的算法depend on the machine所需的步骤数。
答案 1 :(得分:2)
一些数学。 (对不起,但你需要一些数学才能真正理解这一点。)
符号f(n)
为O(n^2)
表示:
1)定义g(n)= f(n)/ n 2
2)N趋于无穷大的极限g(n)为C,其中C为常数
直观地说,随着g(n)
变得越来越大,C
函数越来越接近n
。一位数学家会说它会收敛&#34;到C
。
(实际上,数学比这复杂一点,但我非常生疏。而且我试图保持这一点。)
你的图表正在做什么来演示 g(n)确实收敛了。并且C值是Y轴上的值,它对应于图形接近的直线...因为X轴上的值变为无穷大。
答案 2 :(得分:1)
O ( n 2 )被定义为函数集 R ( n < / em>)这样,对于某些常量 c , R ( n )≤ cn 2 所有足够大的 n 。
该不平等等同于 R ( n ) / n 2 < / SUP> 子>≤ C
因此,您的老师建议您绘制 R ( n ) / n 2 看到,对于足够大的 n ,你得到(大致)一个常数 c 。
请注意,此图不是正式证据。这只是一个有用的可视化。
答案 3 :(得分:1)
更简单地解释一下:O(n²)中的算法就像二次函数。您总是可以通过a *b²形式的函数对二次函数进行除法,以获得常数函数。
答案 4 :(得分:1)
运行时间为O(n ^ 2)意味着总会存在2个实数正数 b 和 n0 ,这样,对于每个 n&gt; = n0 ,
R(n)&lt; = b *(n ^ 2),其中R(n)是运行时间函数。
换句话说,运行时间保持低于b *(n ^ 2)形式的函数。
如果你采用不等式并将所有东西除以(n ^ 2),你得到:
R(n)/(n ^ 2)&lt; = b
并且Big O定义仍然适用。
因此只要R(n)/(n ^ 2) n> = n0 低于 b ,则R(n)为O(n ^ 2)。换句话说,这意味着保持低于常数函数 b (水平线)。
你正在做的是绘制R(n)/ n ^ 2并检查图表是否水平稳定,足够高 n 。
这比绘制R(n)更容易,并试图确定图形是否近似为二次函数(二次函数非常类似于立方和高阶多项式,你不同意吗?)。如果R(n)实际上是O(n ^ 3),R(n)/(n ^ 2)会给你一个新月函数,你可以在你的图中验证。