[英]How do I find the time complexity (Big O) of this block of code?
我正在尝试了解这种O表示法是如何工作的,下面有一段代码,在每条LINE旁边,我都会有一个注释,说明时间复杂度。 如果我错了,请纠正我,并解释为什么我的逻辑不正确。
代码#1
for (int i = 0; i < n; i++) <<<<<<<<<<<<<<<<<<< O(1)*O(N)
{
for (int j = 0; j < 3; j++) <<<<<<<<<<<<<<< O(1)*O(1)
{
for (int k = 0; k < 3; k++) <<<<<<<<<<<<<<O(1)*O(1)
{
printf("%d", arr[i]); <<<<<<<<<<<<<<O(1)
}
printf("\n"); <<<<<<<<<<<<<<<<<<O(1)
}
}
将所有内容相加后,运行时间= O(N)。
代码#2
for (int i = 2; i <= n; i++) <<<<<<<<<<<<O(1)*O(N)
{
int j;<<<<<<<<<<<<<<<<<<<<<<<O(1)
printf("\n%d:", i);<<<<<<<<<<<<<<O(1)
for(j = 2; j <= i; j = j * 2) <<<<<<<<<<<O(n-2)??????????
{
printf("%d ", j);<<<<<<<<<<<<<<O(1)
}
printf("\n%d:", i);<<<<<<<<<<<<<<<<<<<<O(1)
for(int k = j/2; k >= 2; k = k / 2)<<<<<<<<<<<<<I am not sure of this one
{
printf("%d ", k);
}
}
运行时间:不确定
总的来说,我很了解它,但是仍然不确定在某些情况下如何使用它。 是否还有其他人提供了有关for循环和while循环的时间复杂度的示例和说明的指南或某种指南?
k的块是O(lg j)
,其中j是O(n)
,所以k是O(lg n)
。 但是如果考虑整个程序,则为O(n lg n)
。
规则如下:
j
循环与j = j * 2
和k
带环k = k / 2
)具有复杂O(log n)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.