Сегодня мы провели упражнение в классе, посвященном нотации Big-O. Вот одна из проблем:
void modifyArray(int a[], int size)
{
int max = a[0];
for (int i = 1; i < size / 2; ++i)
{
if (max < a[i])
max = a[i];
}
for (int j = 1; j <= size * size; ++j)
{
++max;
cout << max;
}
}
Моя интуиция говорит мне, что f (n) = n/2 + n 2= O (n 2), но, по словам моего профессора, ответ просто O ( п). Может ли кто-нибудь объяснить мне, почему и когда мы просто меняем то, что мы считаем размером ввода?
Я понимаю, что это не вложенный цикл - это не то, что меня смущает. Я не понимаю, почему для данного входа size
второй цикл рассматривается только как O (n). Единственный способ, которым я могу это понять, - это изолировать второй цикл, а затем переопределить размер ввода, просто используя n = размер ^ 2. Я на правильном пути?