当前位置: 首页 > 知识库问答 >
问题:

嵌套循环和流的时间复杂性

贾俊艾
2023-03-14

我希望以下假设得到证实。以下嵌套for循环的时间复杂度相同:

List<Integer> smallList = List.of(1, 2, 3, 4, 5);
List<Integer> bigList = IntStream.range(1, 1_000_000).boxed().collect(Collectors.toList());

for (int i : smallList) {
    for (int j : bigList) {
        doSomething(i, j);
    }
}

for (int j : bigList) {
    for (int i : smallList) {
        doSomething(i, j);
    }
}

我的假设是,时间复杂度是相同的,因为5 x 1_000_000调用doSomething与1_000_000 x 5调用doSomething是相同的。是这样吗?如果是,如果涉及到流,这也是真的吗?

smallList.stream().forEach(i -> bigList.stream().forEach(j -> doSomething(i,j)));
bigList.stream().forEach(j -> smallList.stream().forEach(i -> doSomething(i,j)));

上述两种说法的时间复杂度相同吗?

共有1个答案

毋澄邈
2023-03-14

关于时间复杂性,是的——这些操作在执行的“doSomethings”方面是相同的。5乘以100万自然等于100万乘以5。

问题在于细节——我当然不能保证这些操作在现实世界中的性能是相同的,因为你会遇到现实世界的限制,比如内存使用、内核#、缓存/内存对齐问题等。当然,如果这些问题没有以某种意想不到的方式严重影响你的性能,然后,您将看到两个操作的执行时间大致相当。

 类似资料:
  • 这段代码的时间复杂度是多少?外循环运行n次,但我不确定内循环。如果内环对于i的每个值一直运行到n,它能是O(n^2)吗?

  • 我很难理解算法分析,尤其是下面的例子: 所以我的理解是,外循环是,当我乘以一个常量时,我不确定是否有任何区别。 不过,最让我困惑的是内部循环。我认为它是,因为j被常数递减,但我不确定和

  • 我的困惑是- 如果我把n+(n^2-1)*O(1)写成n+O(1)+O(1)+........+O(1),那么我可以忽略低阶项,复杂性将是O(n),但是另一个推理可以是一个常数的工作量正在做n^2次,所以时间复杂性应该是O(n^2) 在这个问题中也发生了类似的事情-带有if语句的嵌套循环的时间复杂度O(N):O(N^4)?

  • 以下示例循环的时间复杂度为O(n^2),有人能解释为什么是O(n^2)吗?因为这取决于c的价值。。。 循环1--- 回路2--- 如果c=0;然后它运行无限次,就像增加c值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?

  • 以下代码的时间复杂度是多少? 在嵌套循环中,如果外循环1需要O(1)时间,内循环2需要O(logn)时间,内循环3需要O(n)。那么总的tc是O(1)O(logn)O(n)=O(nlogn)。这是真的吗? 请解释一下。

  • 关于嵌套for循环的时间复杂性,,我遇到过几篇帖子。它是否仍然适用于我在下面提到的两种情况? 案例1:Second for循环的增量不是1,而是每次迭代都乘以2 案例2:第二个循环以开始,每次迭代递增1。 在这两种情况下,都是一个整数。我认为这两种情况下的时间复杂度都是。这就是实际的时间复杂性吗?