#include <stdio.h>
int main() {
int N = 32; /* for example */
int sum = 0;
for (int i = 1; i <= N*N; i = i*3)
for (int j = 1; j <= i; j++)
sum++;
printf("Sum = %d\n", sum);
return 0;
}
Внешняя петля нечетная.Какова сложность этой двойной петли
Если бы проверка была только с N (а не N * N), то i, увеличивая умножение на 3 каждый раз, означало бы n/3 итерации N для внешнего цикла?
Но проверка с N * N или N^2, так что подразумевает будет расти
N^2/3 ??? (n squared divided by 3) Is that correct?
Если я поиграться с различными значениями N, скажем, в два раза каждый раз, цикл I (сам по себе) не растет много. как логарифмический рост). Как я могу выразить это математически?
Тогда как вы думаете о внутренней петле? Если он каждый раз увеличивается до i, как я могу выразить это математически? Как я могу связать внутренний цикл с N?
Я хотел бы: a) выразить математическое выражение «сложность» в терминах N. Затем, следующий шаг, б) состоит в использовании обозначения большого О.
Смутно этим. Любая помощь приветствуется.
Вы не всегда можете приблизиться к общей стоимости внутреннего цикла, предполагая наихудший случай (здесь N * N) каждый раз, когда он запускается. Обычно это логически некорректно, но создает правильную сложность, но здесь она дает завышенную оценку. –