我有一个嵌套的for循环:
for(i = 0; i < n*n; i++)
for(j = 0; j <= i/5; j++)
print("Hello World!");
如何找到这个循环的时间复杂度。
我在考虑外部循环,它从0运行到n^2(独占),所以它运行n^2 1次。
对于内部循环,它取决于i,这就是我迷失的地方。有什么指示吗?
几乎总是你可以插入常识告诉你包含最坏情况的数字。除非所说的最坏情况保证无论N次都只运行固定的次数(即所有循环都接近最佳,除了最多5个循环不是,即使我们循环一千次——非常罕见)——那么就用最坏的情况做数学。
这适用于每个单独的循环:取每个循环的最坏情况。这是正确的,除非循环之间有联系,例如,如果内部循环运行“最坏情况”,只有当某些外部循环保证运行最佳情况时,反之亦然——当有明确的关系时。
那么,让我们在这里应用它:
/5
部分是不相关的,我们可以忽略它)
j循环的最坏情况是i等于n*n
,这使得j从0运行到n*n
。我们就用这个吧。
这实际上是正确的答案;这是一个运行n*n
迭代的循环(这是j
循环),并且这个过程重复n*n
次(i
循环),总复杂度为O(n^4)
(哎哟,随着n的增长,它会很快消失)。
如果你不确定数学是否正确,试着找出线性。这就保证了。在这种情况下,最好的情况是当i
为0时,在这种情况下,j循环只运行一次,而最坏的情况是j循环运行n*n
次。关键的是,j
循环的特性是线性的:只要画出在i循环的“生命周期”内j循环的性能会发生什么,这是一个简单的直线关系。第一个5J循环运行一次,第二个5J循环运行两次,一直到最后一个j循环运行n*n/5次。
所有j循环的“平均值”仅为该行的中间值:
,与(j=0;j)的n*n/5
的一半。这是n*n/10
,常数因子并不重要,所以这仍然是n*n
。因此,为什么这是O(n^4)相同
这是一个正常的嵌套循环,具有复杂性 我很难理解为什么下一个循环也有复杂性,即使它打印的语句更少 有什么想法吗?
以下示例循环的时间复杂度为O(n^2),有人能解释为什么是O(n^2)吗?因为这取决于c的价值。。。 循环1--- 回路2--- 如果c=0;然后它运行无限次,就像增加c值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?
我正在努力找到确切的答案 我知道外环运行了n次。然后,第二个循环每次运行的次数不同,因为它从i开始: n(n-1)(n-2)。。。2 1. 但是,因为我们只关心最坏的情况(当i=n时),所以第二个循环将运行n-n次,因为它将从i=n开始。这当然没有意义,但这就是我被卡住的地方。我已经运行了这段代码,找到了序列的前四个元素:S=0 1 4 10。。。(其余部分不确定)。 抱歉,如果这不合理,但任何帮
有三个嵌套的循环,如果循环增量为1,我可以找到复杂性,但是如果循环增量像这样i=c,我就糊涂了? 第三个for循环的复杂度是m,但第一个for循环的复杂度是n/c,第二个for循环的复杂度是n==
这个问题是为了修改过去的试卷,如果我走上了正确的道路,我需要一些建议。 求出下面一段代码的时间复杂度,表示给定整数n的操作次数: 所以我认为外循环是,第一个内环是,第二个内环是。我只是想知道我是否有一个大致的想法,以及如何从这里继续前进。
对于以下伪代码,我想先计算出作为输入大小函数的操作数,然后再将其放入大O表示法中: 到目前为止,我认为对于外循环的每个迭代,,内循环等于操作。顺从的 简化为O(n^2)。 但是我不确定我是否在正确的轨道上,因为我没有看到任何像这样的问题,即外循环的索引被用于内循环。