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

当两个嵌套循环被重新写入一个循环时,时间复杂度会改变吗?

麹鸿煊
2023-03-14

嵌套for、while和if语句的时间复杂度相同吗?假设a作为长度n的数组给出。

for _ in range(len(a)):
    for _ in range(len(a)):
        do_something

上述声明的适用范围为O(n²)。

i = 0
while i < len(a) * len(a):
    do_something
    i += 1

乍一看,上面的循环可以被认为是O(n),但最终我认为它也是O(n²)。

我没说错吧?

共有3个答案

茅鸿宝
2023-03-14

我们需要根据IMHO执行的操作数量来确定时间复杂度。笼统地说某些循环具有特定的时间复杂性是不正确的。

嵌套for循环的时间复杂度通常为o(n平方)-并不总是如此。一些涉及嵌套for循环的操作也可能只有O(n)复杂度。单个if语句通常是O(1),因为您只进行基本的比较。而循环可以是任何东西,这取决于你的退出条件。

虽然记住这些概括可能是有用的,但我们应该始终检查所执行的操作的数量以确定复杂性。

陆浩博
2023-03-14

它确实仍然是O(n^2)。当您查看具有len(a)*len(a)迭代的循环时,这一点尤其清楚。

你“展平”了循环,但没有改变工作量,因此这只是一个“风格”变化,对复杂性没有影响。

程枫
2023-03-14

我没说错吧?

是的!

双循环:

for _ in range(len(a)):
    for _ in range(len(a)):
        do_something

时间复杂度为O(n)*O(n)=O(n²),因为每个循环一直运行到n

单回路:

i = 0
while i < len(a) * len(a):
    do_something
    i += 1

时间复杂度为O(n*n)=O(n²),因为循环一直运行到i=n*n=n²

 类似资料:
  • 这个问题是为了修改过去的试卷,如果我走上了正确的道路,我需要一些建议。 求出下面一段代码的时间复杂度,表示给定整数n的操作次数: 所以我认为外循环是,第一个内环是,第二个内环是。我只是想知道我是否有一个大致的想法,以及如何从这里继续前进。

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

  • 如果我通过两个嵌套的For循环进行输入 外环的复杂度是O(X),但是我对内环的时间复杂度感到困惑,因为Y是可变的。

  • 有三个嵌套的循环,如果循环增量为1,我可以找到复杂性,但是如果循环增量像这样i=c,我就糊涂了? 第三个for循环的复杂度是m,但第一个for循环的复杂度是n/c,第二个for循环的复杂度是n==

  • 我遇到了这个代码。它只扫描数组元素一次。但我对有两个嵌套的while循环将复杂性增加到O(n^2)感到困惑。代码如下: 我正在学习算法,所以如果我哪里出了问题,请纠正我。非常感谢。

  • 我的困惑是- 如果我把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)?