【问题标题】:Time complexity of nested loop where the second loop iterates only for the last iteration of the above loop嵌套循环的时间复杂度,其中第二个循环仅针对上述循环的最后一次迭代进行迭代
【发布时间】:2020-05-08 11:42:36
【问题描述】:

想象一个场景,第二个循环每次迭代 n 次迭代一次,除了最后一个迭代 m 次:

// n and m are two different variables.
for(int i=0; i<n; i++) {
  for(int j=0; j<m; j++) {
    if(i!=(n-1)) break;

    // O(1) code here.
  }
}

这个的时间复杂度是多少?是 O(n*m)、O(n+m) 还是别的什么?

【问题讨论】:

    标签: time big-o complexity-theory


    【解决方案1】:

    编辑:由于误读,原始答案是错误的。

    这是 O(n + m),因为对于最外层循环的 n - 1 次迭代,完成的工作量是恒定的:它启动内层循环并在第一次迭代时中止。对于最外层循环的最后一次迭代,最内层循环迭代 m 次,每次迭代做的工作量是恒定的。所以,我们有 (n - 1) * x + 1 * (m * y) 总步数,其中 x 和 y 是一些常数。我们知道 (n - 1) * x + 1 * (m * y) = O(n + m),因为我们可以去掉自变量 n 和 m 的常数因子。

    【讨论】:

    • 如果我错了,请纠正我,第二个循环中的“中断”不应该是“继续”,以便为每个 n 值将 j 增加 m 吗?由于中断,第二个循环应该迭代一次然后退出(i=n-1 除外)。
    • @ErenKara 你是对的,我读错了;无论出于何种原因,我将if 条件视为基于j,而不是i。我会更新答案。
    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2020-06-30
    • 2020-07-19
    • 2016-06-19
    • 2014-10-22
    • 2018-07-07
    相关资源
    最近更新 更多