Это зависит от того, как метод вызывается.
См. Приведенный ниже пример:
// O(n)
void iterate(int[] array) {
for(int i = 0; i < array.length; i ++) {
// ...
}
}
// O(n^2)
void doubleIterate(int[] array) {
for(int i = 0 ; i < array.length ; i ++){
for(int j = 0 ; j < array.length ; j ++) {
// ...
}
}
}
Если вы вызываете iterate
извне цикла for для doubleIterate
, сложность всего метода равна O(n^2)
.
// O(n^2) + O(n) = O(n^2 + n) = O(n^2)
void doubleIterate(int[] array) {
for(int i = 0 ; i < array.length ; i ++){
for(int j = 0 ; j < array.length ; j ++) {
// ...
}
}
iterate(array);
}
Если вы вызываете iterate
из первого цикла doubleIterate
, сложность все равно O(n^2)
.
// O(n*(n+n)) = O(2*n^2) = O(n^2)
void doubleIterate(int[] array) {
for(int i = 0 ; i < array.length ; i ++){
for(int j = 0 ; j < array.length ; j ++) {
// ...
}
iterate(array);
}
}
Если вы вызываете iterate
из внутреннего цикла doubleIterate
сложность всего метода составляет O(n^3)
.
// O(n^2*n) = O(n^3)
void doubleIterate(int[] array) {
for(int i = 0 ; i < array.length ; i ++){
for(int j = 0 ; j < array.length ; j ++) {
// ...
iterate(array);
}
}
}