Algorithm 算法复杂性(渐近)
有人能证实这个算法的复杂度是O(n^2)吗Algorithm 算法复杂性(渐近),algorithm,complexity-theory,big-o,Algorithm,Complexity Theory,Big O,有人能证实这个算法的复杂度是O(n^2)吗 a=0 b=0 c=n 而(b内部循环执行c-b+1次。内部循环体a=j*j-2*j+3的每次执行需要恒定(有界)的时间(假设我们处理的是固定宽度的整数类型,否则将取决于所使用的乘法算法)[和加法,但这很难以乘法更快的方式实现]),因此外部循环体的执行是O(d)(Θ(d)偶数),其中d=c-b+1 控制外部循环的变量的更新 b = b + 3 c = c + 2 b = b + 3 c = c + 2 while(b <= c) 在每次执行
a=0
b=0
c=n
而(b内部循环执行c-b+1
次。内部循环体a=j*j-2*j+3
的每次执行需要恒定(有界)的时间(假设我们处理的是固定宽度的整数类型,否则将取决于所使用的乘法算法)[和加法,但这很难以乘法更快的方式实现]),因此外部循环体的执行是O(d)
(Θ(d)
偶数),其中d=c-b+1
控制外部循环的变量的更新
b = b + 3
c = c + 2
b = b + 3
c = c + 2
while(b <= c)
在每次执行外循环主体时,将差异c-b
减少1,因此外循环执行n+1次
,并且您总共有O(n²)
,因为
n n+1
∑ (n+2k - (3k) +1) = ∑ j = (n+1)(n+2)/2
k=0 j=1
它甚至是Θ(n²)
,除非编译器直接优化所有变量并将其设置为最终值
用打字错误回答原始问题:
内环
for (j = b; j==c; j++)
将在b==c
时执行一次,或者根本不执行,因此外部循环的主体是O(1)
。外部循环中的更新
b = b + 3
c = c + 2
b = b + 3
c = c + 2
while(b <= c)
意味着每次执行循环体时,差异c-b
减少1,因此
b = 0
c = n
while (b <= c)
b=0
c=n
而(b内部循环执行c-b+1
次。内部循环体a=j*j-2*j+3
的每次执行需要恒定(有界)的时间(假设我们处理的是固定宽度的整数类型,否则将取决于所使用的乘法算法)[和加法,但这很难以乘法更快的方式实现]),因此外部循环体的执行是O(d)
(Θ(d)
偶数),其中d=c-b+1
控制外部循环的变量的更新
b = b + 3
c = c + 2
b = b + 3
c = c + 2
while(b <= c)
在每次执行外循环主体时,将差异c-b
减少1,因此外循环执行n+1次
,并且您总共有O(n²)
,因为
n n+1
∑ (n+2k - (3k) +1) = ∑ j = (n+1)(n+2)/2
k=0 j=1
它甚至是Θ(n²)
,除非编译器直接优化所有变量并将其设置为最终值
用打字错误回答原始问题:
内环
for (j = b; j==c; j++)
将在b==c
时执行一次,或者根本不执行,因此外部循环的主体是O(1)
。外部循环中的更新
b = b + 3
c = c + 2
b = b + 3
c = c + 2
while(b <= c)
意味着每次执行循环体时,差异c-b
减少1,因此
b = 0
c = n
while (b <= c)
b=0
c=n
而(b)
使b在外循环的每次迭代中赶上c一次。这意味着外循环运行n+1=O(n)次,因为它们最初彼此相差n次
内部循环执行(c-b+1)次。我们知道它们最初相隔n次,并且在外部循环的每次迭代中都会更接近1次
看看内部循环运行的次数,它看起来像:(n,n-1,n-2,…,1)和总计
1 + 2 + ... + n = (n)(n+1)/2 = O(n^2)
使b在外循环的每次迭代中赶上c一次。这意味着外循环运行n+1=O(n)次,因为它们最初彼此相差n次
内部循环执行(c-b+1)次。我们知道它们最初相隔n次,并且在外部循环的每次迭代中都会更接近1次
看看内部循环运行的次数,它看起来像:(n,n-1,n-2,…,1)和总计
1 + 2 + ... + n = (n)(n+1)/2 = O(n^2)
每次你的外环
b = b + 3
c = c + 2
b = b + 3
c = c + 2
while(b <= c)
while(b每次你的外循环
b = b + 3
c = c + 2
b = b + 3
c = c + 2
while(b <= c)
while(b谢谢你的快速帮助!但是我打错了,是啊,好吧,那样的话,我会更新我的答案,但是我已经可以确认你是对的,O(n²)
是的。谢谢你的快速帮助!但是我打错了,是啊,好吧,那样的话,我会更新我的答案,但是我已经可以确认你是对的,O(n²)
是的。