Algorithm 计算时间复杂度(2个简单算法)

Algorithm 计算时间复杂度(2个简单算法),algorithm,time-complexity,pseudocode,Algorithm,Time Complexity,Pseudocode,以下是两种算法(伪代码): 差异在第3.2行 时间复杂性: Alg1:c+c+n*n*2c=2c+2cn²=2c(n²+1)=O(n²) Alg2:c+c+n*n*2c=2c+2cn²=2c(n²+1)=O(n²) 我想知道计算是否正确 谢谢 算法1: 您将x的值减少了5,因此您将n+n-5+n-10+..即O(n^2) 算法2: 您将x的值减少了n/5,因此您执行了n+n/5+n/25+..,即O(n logN) 请参阅大的oh{O()}符号不,恐怕你不正确 在第一个算法中,行: x =

以下是两种算法(伪代码):

差异在第3.2行

时间复杂性:

  • Alg1:c+c+n*n*2c=2c+2cn²=2c(n²+1)=O(n²)
  • Alg2:c+c+n*n*2c=2c+2cn²=2c(n²+1)=O(n²)
我想知道计算是否正确


谢谢

算法1
您将x的值减少了
5
,因此您将
n+n-5+n-10+..
O(n^2)

算法2
您将x的值减少了
n/5
,因此您执行了
n+n/5+n/25+..
,即
O(n logN)


请参阅大的oh{O()}符号

不,恐怕你不正确

在第一个算法中,行:

x = x - n/5
使
循环
O(1)
-无论
n
多大,它都将运行五次。
循环的
O(N)
,因此总体上是
O(N)

相比之下,在算法2中,
x
随着

x = x/5

作为
x=n
开始,这个
循环在
O(logN)
中运行。但是,内部
for
循环也会随着
logN
每次减少。因此,您正在为
O(n)
再次执行
n+n/5+n/25+…
操作。

下面是一个正式的方法,用于推断两种算法的增长顺序(我希望您熟悉Sigma符号):


你没有将
x
减少5,而是将其减少
n/5
@jornsharpe:我不认为错误可能是否决投票的原因?非常感谢,现在我终于理解了我的错误。我认为Alg2中的操作数应该是
n+n/5+n/25+…=O(n)
。你能澄清一下这一点吗,因为你的答案已经被接受了?@trogdor是的,你是对的-Alg2中的内循环不是
O(n)
,因为迭代的长度也会减少
logN
@jornsharpe所以总的O(NlogN)?@Erez你也可以使用主定理证明Alg2中的
O(n)
:循环是一个递归
t(n) =T(n/5)+n
。在
x = x/5