Big O Notation: различия между O (n ^ 2) и O (n.log(n))?

В чем разница между O(n^2) и O(n.log(n))?

Ответ 1

n ^ 2 усложняется быстрее.

Ответ 2

Big O вычисляет верхний предел времени выполнения относительно размера набора данных (n).

An O(n*log(n)) не всегда быстрее, чем a O(n^2), но при рассмотрении наихудшего случая это, вероятно, есть. Алгоритм O(n^2) принимает ~ 4 раза дольше, когда вы дублируете рабочий набор (худший случай), для O(n*log(n)) -algorithm it less. Чем больше ваш набор данных, тем чаще он становится быстрее с помощью алгоритма O(n*log(n)).

РЕДАКТИРОВАТЬ: благодаря "вреду" я исправлю неправильное утверждение в своем первом ответе: я сказал, что при рассмотрении наихудшего случая O(n^2) всегда будет медленнее, чем O(n*log(n)), это неверно, поскольку оба они за исключением постоянного фактора!

Пример: скажем, у нас самый худший случай, и наш набор данных имеет размер 100.

  • O(n^2) → 100 * 100 = 10000
  • O(n*log(n)) → 100 * 2 = 200 (с использованием log_10)

Проблема заключается в том, что их можно умножить на постоянный множитель, скажем, умножим c на последний. Результатом будет:

  • O(n^2) → 100 * 100 = 10000
  • O(n*log(n)) → 100 * 2 * c = 200 * c (с использованием log_10)

Итак, для c > 50 получаем O(n*log(n)) > O(n^2), for n=100.

Мне нужно обновить свой оператор: для каждой проблемы при рассмотрении наихудшего случая алгоритм O(n*log(n)) будет быстрее, чем алгоритм O(n^2) для произвольно больших наборов данных.

Причина такова: выбор c произволен, но константа. Если вы увеличите набор данных достаточно большим, он будет доминировать над каждым выбором константы2 > c, а при обсуждении двух алгоритмов c для обоих постоянных!

Ответ 3

Вам нужно быть более конкретным о том, что вы просите, но в этом случае O(n log(n)) быстрее

Ответ 4

n log(n) растет значительно медленнее

Ответ 5

Алгоритмы, выполняющиеся в O (nlog (n)) времени, обычно быстрее, чем те, которые работают в O (n ^ 2).

Big-O определяет верхнюю границу производительности. Поскольку размер набора данных растет (n), требуется время, затрачиваемое на выполнение задачи. Вы можете быть заинтересованы в курсе iTunes U из MIT.

Ответ 6

Обозначение "Big Oh" дает оценку верхней границы роста времени работы алгоритма. Если алгоритм должен быть O (n ^ 2) наивным образом, он говорит, что при n = 1 он принимает max. 1 единица, при n = 2 - макс. время 4 единицы и так далее. Аналогично для O (n log (n)), он говорит, что выращенный будет таким, чтобы он подчинялся верхней границе O (n log (n)). (Если я более чем наивный, пожалуйста, исправьте меня в комментарии).

Я надеюсь, что это поможет.