【问题标题】:What would the big O notation be for this particular code, It seems that a for loop with a worse time notation is nested in one thats O(1)对于这个特定的代码,大 O 符号是什么,似乎一个带有更差时间符号的 for 循环嵌套在一个 O(1) 中
【发布时间】:2022-12-04 02:03:55
【问题描述】:

如前所述,在附图中,时间复杂度较大的for循环嵌套在O(1)的for循环中,那么整体时间复杂度是多少?为什么?

void function(int n) {
    int i;
    int x = 0;
    
    for (i = 0; i<10; i++)
        for (j=0; j<n/2; j++)
            x--;
}

【问题讨论】:

  • 我猜这是你的作业?让我们解决这个问题,并没有教给你任何东西。请接听tour并阅读How to Ask。至于作业题:How do I ask and answer homework questions?Open letter to students with homework problems
  • 您应该更改此问题以使用代码文本而不是屏幕截图
  • 谢谢你的 cmets,我会记住它们。我向你保证,你的假设是错误的,阿德里安,我实际上正在复习考试,我提供的材料不够严格,因此促使我要求进一步澄清。但我确实理解你对家庭作业问题的担忧以及你的反应,因为我的问题确实看起来像家庭作业问题。无论如何,再次感谢您的知识,Adriaan 和 jwezorek!

标签: time-complexity big-o


【解决方案1】:

是 O(n)。

内部循环是最重要的,因为外部循环运行的次数是固定的。外循环的贡献只是一个常量因素,您在计算 Big-O 时会忽略它。

【讨论】:

  • 是的,所以我的直觉如下,这是因为两个循环的时间复杂度都是 1 x N 对吗?所以无论哪种方式它的O(N)?或者这种理解是错误的?
  • 好吧,只要您有嵌套循环,就意味着要乘以它们各自的时间复杂度,例如如果你有一个 O(log n) 的循环嵌套在一个 O(n) 的循环中,那么整个事情的时间复杂度将为 O(n log n),因为 log n 循环将运行大约 n 次。在这种情况下,您有一个 O(n) 循环,它将运行大约 O(1) 次,因此乘法只会产生 O(n) 。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多