Performance 确定算法&x27;s运行时使用大O表示法
假设有一个运行如下的算法/函数:Performance 确定算法&x27;s运行时使用大O表示法,performance,function,big-o,complexity-theory,time-complexity,Performance,Function,Big O,Complexity Theory,Time Complexity,假设有一个运行如下的算法/函数: function(n) int x = 1 int y = 1 while( y <= n) { x++ y = y + x print("something") } 函数(n) int x=1 int y=1 而(y正如我在评论中提到的,y在函数中呈二次增长,因此运行时间是O(sqrt(n)),而不是O(logn) 对于简单算法,
function(n)
int x = 1
int y = 1
while( y <= n) {
x++
y = y + x
print("something")
}
函数(n)
int x=1
int y=1
而(y正如我在评论中提到的,y
在函数中呈二次增长,因此运行时间是O(sqrt(n)),而不是O(logn)
对于简单算法,您可以在while循环中输入一个计数,以计算它在不同的n值下运行的次数。这将为您提供一个很好的起点,以确定您想要证明什么
为了证明这一点,只需找出一个y
的公式。你可以通过计算小值的y
来得到一个句柄。你会看到一个模式。正如我在评论中提到的,y
在你的函数中以二次方式增长,所以运行时间是O(sqrt(n)),而不是O(logn)
对于简单算法,您可以在while循环中输入一个计数,以计算它在不同的n值下运行的次数。这将为您提供一个很好的起点,以确定您想要证明什么
要真正证明它,只需找出一个y
的公式。你可以通过计算y
的小值来得到它的句柄。你会看到一个模式。我试图证明这一点,下面是我想到的
x(1) = 1
y(1) = 3
x(n) = x(n-1) + 1
y(n) = y(n-1) + x(n)
y(n-1)= y(n-2) + x(n-1)
y(n) = y(n-2) + x(n) + x(n-1)
...
y(n) = y(1) + x(n) +x(n-1) + ...+ x(2)
因为x(n)是方差为1的算术序列,所以
y(n) = n(n+1)/2 (Approximate)
然后我们回到@mbroshi提到的结论:y在你的函数中是二次增长的,所以运行时间是O(sqrt(n)),我试图证明这一点,这就是我想到的
x(1) = 1
y(1) = 3
x(n) = x(n-1) + 1
y(n) = y(n-1) + x(n)
y(n-1)= y(n-2) + x(n-1)
y(n) = y(n-2) + x(n) + x(n-1)
...
y(n) = y(1) + x(n) +x(n-1) + ...+ x(2)
因为x(n)是方差为1的算术序列,所以
y(n) = n(n+1)/2 (Approximate)
然后我们回到@mbroshi提到的结论:y在函数中是二次增长的,所以运行时间是O(sqrt(n)),你想证明的形式有多正式?这是为了学业还是为了让你确信?事实上,如果你以经验测试它,你会看到它是O(sqrt(n)).你想要一个多正式的证明?这是学校作业的证明还是你确定的证明?事实上,如果你用经验测试,你会看到它是O(sqrt(n))。啊,灯亮了。谢谢。啊,灯亮了。谢谢。