#java #algorithm #time-complexity #big-o
#java #алгоритм #временная сложность #big-o
Вопрос:
Какова сложность следующего кода?
public static int foo(int[] a){
int[] b = new int[a.length];
for(int i = 0; i < a.length; i){
for(int j = 0; j < b.length / 100; j ){
b[i] = a[i] a[j];
}
}
int result = 0;
for(int i = 0; i < b.length; i ){
result = b[i];
}
return resu<
}
Комментарии:
1. Почему бы вам не рассказать нам , что вы думаете об этом (и почему), и тогда мы сможем исправить вас, если вы ошибаетесь?
2.
O(a.length x b.length) O(b.length)
обычно вы можете просто сказать, что этоO(n^2)
ifa
имеет размерn
Ответ №1:
public static int foo(int[] a){
// O(1)
int[] b = new int[a.length];
// O(a.length x a .length)
for(int i = 0; i < a.length; i){
// O(a.length)
for(int j = 0; j < b.length / 100; j ){
b[i] = a[i] a[j];
}
}
// O(1)
int result = 0;
// O(a.length)
for(int i = 0; i < b.length; i ){
result = b[i];
}
return resu<
}
Допустим a
, имеет размер n
, всего: O(n^2)
O(n)
= O(n^2)
Ответ №2:
Я думаю, что это будет:
O(1) O(n)*O(n/100) O(n) = O(1) O(n^2/100) O(n)
Таким образом, общая сложность ~O(n^2)