Я пытаюсь найти время выполнения следующего цикла Запуск:время следующего цикла
int m=1;
for(i=1;i<=k;i++)
{
for(j=1;j<=A[i];j++)
{
B[m]=i;
m++;
}
}
Здесь A представляет собой массив целых чисел, сохраняя в нем, и сумма этих чисел равна п. Например, если длина A равна 2, а A [1] = 2 и a [2] = 4, то внутренний цикл будет работать 6 раз.
Итак, в моих лекционных заметках говорится, что время работы этой части кода равно O (n + k). Но предположим, например, что k равно 5, а длина массива A равна 4, а A [1] = 3, A [2] = 0, A [3] = 0, A [4] = 9, A [ 5] = 0. Итак, n = 12. Затем для k = 1 внутренний цикл будет повторяться 2 раза, при k = 2 внешний цикл будет повторяться 1 раз, при k = 3 внешний цикл будет работать 1 раз, при k = 4 внутренний цикл будет выполняться 9 раз и при k = 5 внешний цикл будет работать 1 раз, поэтому общее число итераций равно 14. Это больше, чем k и n, а время работы не равно O (n), ни O (k). Что я здесь делаю неправильно?
Спасибо
Помните, что O (п + К) не означает, что он работает для _exactly_ п + к раз. Кроме того, O (n + k) больше O (n) или O (k). Наконец, в вашем примере длина массива A кажется 5, а не 4. –
Да, я знаю. Но я не уверен в следующем: O (n + k) совпадает с O (n) + O (k)? Оба означают, что он будет работать не более n или k раз? – 2013-03-22 19:28:07
Не более, «порядок». – pamphlet