Сложность времени вложенного l oop, где второй l oop повторяется только для последней итерации вышеуказанного цикла - PullRequest
1 голос
/ 08 мая 2020

Представьте себе сценарий, в котором второй l oop повторяется один раз для каждой итерации 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) или что-то еще?

1 Ответ

1 голос
/ 08 мая 2020

РЕДАКТИРОВАТЬ: исходный ответ был неправильным из-за неправильного прочтения.

Это O (n + m), потому что для n - 1 итераций самого внешнего l oop выполняется постоянный объем работы: он запускает внутренний l oop и прерывается на первой итерации. Для последней итерации самого внешнего l oop, самый внутренний l oop повторяется m раз, выполняя постоянный объем работы на каждой итерации. Итак, у нас есть (n - 1) * x + 1 * (m * y) общих шагов, где x и y - некоторые константы. И мы знаем, что (n - 1) * x + 1 * (m * y) = O (n + m), поскольку мы можем опустить постоянные множители в наших независимых переменных n и m.

...