Algorithm 算法复杂性(渐近)

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) 在每次执行

有人能证实这个算法的复杂度是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)
在每次执行外循环主体时,将差异
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²)
是的。