Когда циклы вложены, временная сложность увеличивается. Например, -
loop(1 to n1):
loop(1 to n2):
loop(1 to n3):
# Some code here
. В приведенном выше случае временная сложность будет O( n1*n2*n3 )
. Когда циклы выполняются параллельно, увеличивается временная сложность. Например, -
loop(1 to n1):
# Some code here
loop(1 to n2):
# Some code here
loop(1 to n3):
# Some code here
В приведенном выше случае временная сложность будет O( n1 + n2 + n3 )
.
Что, если моя программа представляет собой комбинацию нескольких таких циклов по отдельности?
1. Первый пример -
method1: statement;
method2: statement;
В приведенном выше коде ваш метод1 имеет временную сложность O (N), а метод2 имеет временную сложность O (N ^ 2). Итак, у нас есть общая временная сложность -
O( N ) + O( N^2 ) = O( N + N^2 ) = O( N^2 )
В верхней границе временной сложности мы обычно игнорируем младшие члены и упрощаем окончательную временную сложность, которая мы получили. Таким образом, в приведенном выше примере ответ будет O(N^2)
.
2. Второй пример -
method1: statement;
method1: statement;
method1: statement;
Мы можем вычислить временную сложность аналогичным образом. У нас будет временная сложность -
O( N ) + O( N ) + O( N ) = O ( 3*N ) = O ( N )
Еще одно правило при вычислении верхней границы временной сложности состоит в том, что мы игнорируем постоянные члены , которые мы получаем в нашей временной сложности.
Эти правила можно легко распространить на аналогичные примеры. Независимо от того, сколько циклов параллельно, мы возьмем суммирование каждого l oop и применим два вышеуказанных правила, и это будет наша окончательная временная сложность. Точно так же для вложенных циклов мы умножим временную сложность каждого l oop, и это будет нашим окончательным результатом.
Надеюсь, это поможет!