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))。啊,灯亮了。谢谢。啊,灯亮了。谢谢。