我对固定,线性和二次时间复杂度的简单时间复杂度非常熟悉。在简单的代码段中,例如:
int i = 0;
i + 1;
这是恒定的。所以O(1)在:
for (i = 0; i < N; i++)
这是线性的,因为它迭代n + 1次,但是对于大O时间复杂度,我们删除常数,所以只删除O(N)。在嵌套的for循环中:
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
我知道如何将n + 1乘以n并达到O(N ^ 2)的时间复杂度。我的问题是与此有关的版本稍微复杂一些。因此,例如:
S = 0;
for (i = 0; i < N; i++)
for (j = 0; j < N*N; j++)
S++;
在这种情况下,我是否要将n + 1乘以内部的for循环时间复杂度,我假设其中为n ^ 2?那么时间复杂度将是O(n ^ 3)?
另一个示例是:
S = 0;
for (i = 0; i < N; i++)
for (j = 0; j < i*i; j++)
for (k = 0; k < j; k++)
S++;
在这种情况下,我对其进行了扩展并将其写出,并意识到内部,中间的for循环似乎以n * n的时间复杂度运行,而最内部的for循环以j的步速运行,也为nxn。因此,在那种情况下,我是否将n + 1 xn ^ 2 xn ^ 2相乘,从而得到O(n ^ 5)?
另外,我仍在努力了解哪种代码具有对数时间复杂性。如果有人可以给我一个算法或一段代码,执行时间为log(n)或n log(n)的时间复杂度并进行解释,那将不胜感激。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句