Algorithm 嵌套循环的时间复杂度计算
我正在练习算法的时间复杂性,我遇到了下面的代码,这让我很困惑。一般来说,我可以通过观察循环的数量来判断算法的复杂度,但是下面的代码会破坏这个假设,因为有两个循环,我通常会假设复杂度为^2,但在第二个循环中,N是平方。这让我得出这样的结论:复杂性在^2=^3上。我做错什么了吗Algorithm 嵌套循环的时间复杂度计算,algorithm,time-complexity,Algorithm,Time Complexity,我正在练习算法的时间复杂性,我遇到了下面的代码,这让我很困惑。一般来说,我可以通过观察循环的数量来判断算法的复杂度,但是下面的代码会破坏这个假设,因为有两个循环,我通常会假设复杂度为^2,但在第二个循环中,N是平方。这让我得出这样的结论:复杂性在^2=^3上。我做错什么了吗 for (int i = 0; i*i < N; i++) for (int j = 0; j*j < N*N; j++) 外部循环将在i^2
for (int i = 0; i*i < N; i++)
for (int j = 0; j*j < N*N; j++)
外部循环将在i^2
因此,总迭代次数为N^0.5*N=N^3/2。外部循环将在i^2
例如,考虑n=100;i^2接受值1、4、9、16、…、100,这是sqrtN不同的值。这就是Osqrtn
内循环需要时间-在每一步都取j和N的平方根,这应该清楚地表明这是一个线性循环。例如,考虑n=10;j^2采用值1、4、9、16、…、100,这是N个不同的值。这是开着的。
这在sqrtn=On^3/2上有时间复杂度 外部循环需要Osqrtn时间。它在~sqrtn次迭代后结束,因为i按其平方增长,而N仅线性增长。例如,考虑n=100;i^2接受值1、4、9、16、…、100,这是sqrtN不同的值。这就是Osqrtn
内循环需要时间-在每一步都取j和N的平方根,这应该清楚地表明这是一个线性循环。例如,考虑n=10;j^2采用值1、4、9、16、…、100,这是N个不同的值。所以这是开着的。
也被称为On sqrt,我认为这是另一种方式。外部循环打开,内部循环打开^2。你能证明你的答案吗?我想理解它。@sasha你能解释一下为什么内部循环会在OsqrtN中运行吗?@PRCube有一些奇怪的格式错误,也就是所谓的On-sqrt-nI认为是另一种情况。外部循环打开,内部循环打开^2。你能证明你的回答正确吗?我想理解它。@sasha你能解释一下为什么内部循环会在OsqrtN中运行吗?@PRCube在