Предположим, у нас есть следующий блок кода:
sum = 0;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(i == j)
for(k = 0; k < n; k++)
sum++;
В книге, которую я читаю, указано, что сложность O (n ^ 2), то есть (n ^ 2), если быть точным , но я не уверен почему. При попытке вычислить его сам я получаю O (n ^ 3):
- Наружный l oop сложность O (n)
- На втором l oop сложность добирается до O (nˆ2), следуя правилу вложенных циклов
- Оператор if будет истинным n раз, поэтому к третьему l oop сложность будет O (n * nˆ2)
- Оператор sum ++ занимает постоянное время, поэтому сложность остается на уровне O (nˆ3)
Это моя логика c, но, похоже, она ошибочна. В чем причина сложности O (n ^ 2) здесь?