Если у нас есть вложенный цикл for, как показано ниже:

for (int i=0; i < n; i++){
    for (int j=1; j < n; j++){
        // do something       
     }
}

Будет ли сложность в худшем случае O(n^2), хотя j (в худшем случае) всегда будет искать n-1 в массиве / списке?

1
Joseph 28 Май 2017 в 00:59

2 ответа

Лучший ответ

Вы только вычитаете константу, поэтому сложность внутреннего цикла все еще увеличивается с n, так что цикл равен O (n). Оба вложенных вместе O (n ^ 2).

2
Bill the Lizard 27 Май 2017 в 22:03

Ответ зависит от того, как определены итерации. Чтобы взять ваш пример,

n*(n-1) = n^2 - n

Но анализ сложности откладывается до наибольшего показателя, поскольку меньшие становятся незначительными, поскольку n стремится к бесконечности.

Однако, если вы определите вторую итерацию как:

for i = 0 to n:
  for j = (n-1000000) to n:

У нас была бы сложность O(n * constant) или O(n).

0
גלעד ברקן 27 Май 2017 в 22:14