Если время выполнения (или количество шагов выполнения, или количество вызовов println
, или то, что вы оцениваете с помощью своей записи Big O) равно O (AB), это означает, что время выполнения приближается к линейно пропорционально AB при росте AB без ограничения (приближается к бесконечности). Это буквально предел бесконечности, с точки зрения исчисления.
Большой О не имеет отношения к тому, что происходит для любого конечного числа итераций. Речь идет о предельном поведении функции, когда ее свободные переменные приближаются к бесконечности. Конечно, для небольших значений A вполне может существовать постоянный член, который доминирует во времени выполнения. Но когда A приближается к бесконечности, все эти другие факторы становятся незначительными.
Рассмотрим полином, подобный Ax^3 + Bx^2 + Cn + D
. Он будет пропорционален x^3
при увеличении x до бесконечности - независимо от величины A, B, C или D. B может быть числом Грэм для всех забот Big O;бесконечность все еще намного больше, чем любое большое конечное число, которое вы выбираете, и поэтому доминирует член x ^ 3.
Итак, во-первых, учитывая , что если бы A было 2 , на самом деле не в духе AB приближается к бесконечности . Любое число, которое вы можете разместить на доске, в основном округляется до нуля. .
И, во-вторых, помните, что пропорционально AB означает равное AB умноженное на некоторую константу;и не имеет значения, что это за константа. Хорошо, если константа окажется равной 10000. Сказать, что что-то пропорционально 2N, то же самое, что сказать, что оно пропорционально N или любому другому числу, умноженному на N. Поэтому O (2N) такое же, как O (N). По соглашению мы всегда упрощаем использование нотации Big-O для отбрасывания любых постоянных факторов. Таким образом, мы всегда будем писать O (N), а не O (2N). И по этой же причине мы будем писать O (AB), а не O (10000AB).
И, наконец, мы не говорим O (ABC) только потому, что «C» (количество итераций вашего внутреннегоцикл в вашем вопросе) бывает константой;который также равен 10000. Вот почему мы говорим, что это O (AB), а не O (ABC), потому что C не является свободной переменной;он жестко запрограммирован на 10000. Если не предполагалось, что размер B не изменится (должен был быть постоянным по любой причине), то вы можете сказать, что это просто O (A). Но если вы позволите B расти без ограничений, то предел будет O (AB), а если вы также позволите C расти без границ, то предел будет O (ABC). Вы сами решаете, какие числа являются константами, а какие - свободными, в зависимости от контекста вашего анализа.
Подробнее о Big O нотации вы можете прочитать в Википедии.