当前位置: 首页 > 面试题库 >

3个嵌套循环的大O

冯鸿光
2023-03-14
问题内容

另一个Big O符号问题…以下代码的Big O是什么:

     for (int i = n; i > 0; i = i / 2){
        for (int j = 0; j < n; j++){
           for (int k = 0; k < n; k++){
              count++;
           }
        }
     }

我的想法:所以分解一下,我认为外部循环是O(log2(n)),那么每个内部循环是什么O(n),这将导致O(n^2 * log2(n))
问题1是否正确?

问题2:在组合嵌套循环时,它总是和每个循环的Big O一样简单吗?


问题答案:

当循环计数器不相互依赖时,总是可以从内部向外进行工作。

最里面的循环始终花费时间O(n),因为无论j和i的值是多少,它都会循环n次。

当第二个循环运行时,它将运行O(n)次迭代,每次循环执行O(n)都会运行最里面的循环。这需要时间O(n 2)。

最终,当外循环运行时,它每次迭代都会执行O(n 2)工作。它也运行O(log
n)次迭代,因为它的运行次数等于达到1之前必须将n除以2的次数。因此,总功为O(n 2 log n)。

通常,您不能仅将多个循环相乘,因为它们的界限可能相互依赖。但是,在这种情况下,由于没有依赖性,因此可以将运行时间乘以。希望上面的推理能说明为什么会这样-
这是因为,如果您从内而外地思考每个循环能完成多少工作以及执行了多少次,运行时最终会成倍增加。

希望这可以帮助!



 类似资料:
  • 我对确定上述代码的BigO有点困惑。如果在最外层的循环中,则为(int x=1;x 然而,考虑到最外层循环迭代n 2次,这会改变bigO还是加法常数无关紧要的规则?最后,如果最内层循环迭代n 2次而不是n,会改变什么吗? 非常感谢。

  • 我有一个这样的数组 我想做的是前面的模型,为其数量绘制徽标,因此三星=3,索尼=7,以此类推,将绘制3个索尼徽标和7个三星徽标。 我想出了这样的办法 但是当然,所有这些都是为了每个数组条目,呼应出名称,所以我最终打印了5个三星,打印了5个索尼,等等。 如何使其使用 qty 数组的值而不是条目数?

  • Python 不仅支持 if 语句相互嵌套,while 和 for 循环结构也支持嵌套。所谓嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,甚至 while 中有 for 或者 for 中有 while 也都是允许的。 当 2 个(甚至多个)循环结构相互嵌套时,位于外层的循环结构常简称为 外层循环或 外循环,位于内层的循环结构常简

  • 这是我的代码。我遇到的问题是,我希望将HP在我的PHP代码中的数字转换为我的HP HTML代码,以及与Cylinder相同的内容。我已经想好了其他的东西,但说到这一部分我就卡住了

  • 本文向大家介绍MATLAB嵌套循环,包括了MATLAB嵌套循环的使用技巧和注意事项,需要的朋友参考一下 示例 可以嵌套循环,以在另一个迭代任务中执行迭代任务。考虑以下循环: 我们使用2个迭代器来显示abc和中元素的所有组合1:m,从而得出: 我们还可以使用嵌套循环来组合每次要完成的任务和几次迭代中要完成的任务: 这里我们要计算所有的斐波那契数列,但是n每次只显示第一个元素,所以我们得到 我们可以做