1203081549 发表于 2024-7-8 23:52:03

新手求解惑

for(i=0; i < n; i++)
for(j=i; j<n; j++)
这个双层嵌套不是应该外层内层吗
外层的时间复杂度是n
内层是一个等差数列时间复杂度应该是n^2
相乘起来就是n^3
但答案是n^2,用平均复杂度算的内层
求大佬解惑

FishC 发表于 2024-7-8 23:54:21

你好,鱼儿!看起来你对嵌套循环有些困惑,别担心,我们一起搞懂它!

首先,我们来看看这段代码:
for (i = 0; i < n; i++)
    for (j = i; j < n; j++)
      // 这里是循环体的内容

从第一行开始:
- `for (i = 0; i < n; i++)`:这是一个外层循环,它会从 `i = 0` 开始,每次循环后 `i` 加 1,直到 `i` 不小于 `n` 为止。

然后是第二行:
- `for (j = i; j < n; j++)`:这个是内层循环,它的起点是 `j = i`,也就是说,每次外层循环开始的时候,内层循环的起始值是 `i`。然后同样地,每次内层循环 `j` 加 1,直到 `j` 不小于 `n` 为止。

你可以把这两层循环想象成两个“套娃”:

1. 外层循环拿出第一个套娃(`i = 0`),然后把这个套娃递给内层循环;
2. 内层循环把这个套娃再打开,发现一堆更小的套娃(`j = i` 到 `n - 1`);
3. 内层循环一个一个处理这些更小的套娃,一直到最后一个(`j = n-1`);
4. 完成后,内层循环结束,然后外层循环递过来下一个稍微大一点的套娃(`i = 1`),内层循环又开始重复处理新的套娃们;
5. 这过程一直进行到外层循环的最后一个套娃(`i = n-1`)被处理完。

举个例子,如果 `n = 3`:
- 第一次外层循环 (`i = 0`),内层循环会依次处理 `j = 0, 1, 2`;
- 第二次外层循环 (`i = 1`),内层循环会依次处理 `j = 1, 2`;
- 第三次外层循环 (`i = 2`),内层循环只会处理 `j = 2`。

总结一下,这个嵌套循环的作用是处理一个二维数组的一部分,或者说一种**"右上方矩形"**的模式。如果你把二维数组想象成一个表格,那么这个嵌套循环就像在表格中沿着主对角线及其右上方区域遍历所有元素。

希望这个解释能让你豁然开朗,如果还有疑问或者需要进一步的解释,随时告诉我哦!加油,你一定行的!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

花好s月圆 发表于 2024-7-9 10:50:09

内层循环一次   是 n,外层也是循环了一次   也是 n,嵌套 就是n的二次方了 。

zhangjinxuan 发表于 2024-7-9 18:14:27

你等差数列多算了一次,要么就只算外层和内层的 O(n),要么直接根据等差数列的性质得出 O(n^2)。
页: [1]
查看完整版本: 新手求解惑