О нотация, разбор определения

109
17 сентября 2019, 20:20

Читаю Седживка, до этого момента было все понятно:

Говорят, что функция g(N) имеет порядок O(f(N)), если существуют такие постоянные c0 и N0, что g(N) < c0 * f(N) для всех N > N0.

Набор слов, объясните пожалуйста что к чему в этом определении.

Гуглил, сложилось мнение что просто отбрасывают все коэффициенты кроме такого, который растет больше всех при росте входных данных.

Answer 1

Нотация O(f) часто используется для описания скорости роста функций в виде O(N)(O(N*N), O(log(N)) и т.д. и т.п.). Фактически, это означает, что некоторая g(N) возрастает не быстрее, чем линейная (квадратичная, логарифмическая, ... ) функция от N с некоторыми коэффициентами.

Например, функция g(N) = 4*N имеет порядок O(N), т.к. мы можем записать соотношение g(N) < 10*N и это соотношение будет справедливым для любых N > 1. В этом примере c0 = 10, а N0 = 1.

А вот еще один пример, для более сложной функции g. Пусть g(N) = 2*N*N + N. Эта функция имеет порядок O(N*N), поскольку для любого N > 1 справедливо g(N) < 4*N*N. В этом примере c0 = 4, а N0 = 1.

На самом деле, параметры c0 и N0 могут быть произвольными, но должны быть конечными и не зависеть от N.

Сама нотация, полезна при описании сложности алгоритмов. В этом случае она показывает как растет число действий, выполняемых алгоритмом от количества входных данных. При этом, точное количество итераций, обычно, не столь существенно. Важно лишь некоторое оценочное значение.

Например, если есть две функции (алгоритма) сортировки массивов, одна из которых имеет порядок O(N), а другая O(N*N), то первая функция эффективнее чем вторая.

Answer 2

Ответ верный. Приведу только пример, который, имхо, сделает его чуть понятней. Пусть g(N) = N*N + log(N) Тогда порядок g(N) будет O(N*N) т.к. при N0 = 1 и C0 = 2 для любого N>N0 g(N) < C0 * N*N истинно.

Просто во всех ранее приводимых примерах f(N) == g(N), что, видимо, немного сбивает с толку.

READ ALSO
ConcurrentModificationException

ConcurrentModificationException

Здравствуйте, постоянно получаю ошибку, когда пытаюсь добавить объекты на картуГугл мне не дал ясности, стек оверфлоу я тоже, не понял, что...

174
Как сделать inline-кнопку Telegram Bot API с новой строки в Java?

Как сделать inline-кнопку Telegram Bot API с новой строки в Java?

Как сделать inline-кнопку Telegram API с новой строки в Java?

150
Как сделать Json отображение через Simple JSON

Как сделать Json отображение через Simple JSON

Что сделать, чтобы показывал строку в этом коде?

133
Вывод данных на страницу

Вывод данных на страницу

При выводе данных в консоль все отображается без пробела, а вот если на страницу появляется небольшое расстояние и затем если в окне пытаться...

158