Обозначение Big O: различия между O (n ^ 2) и O (n.log (n))? - PullRequest
3 голосов
/ 04 декабря 2009

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

Ответы [ 6 ]

15 голосов
/ 04 декабря 2009

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

2 голосов
/ 04 декабря 2009

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

O(n*log(n)) не всегда быстрее алгоритма O(n^2), но при рассмотрении наихудшего случая , вероятно, . Алгоритм O(n^2) занимает ~ 4 раза больше времени при дублировании рабочего набора (наихудший случай), для алгоритма O(n*log(n)) он меньше. Чем больше ваш набор данных, тем больше он обычно работает быстрее, используя 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 является произвольным, но постоянным . Если вы увеличите набор данных достаточно большим, он будет доминировать при каждом выборе константы c, а при обсуждении двух алгоритмов c s для обоих констант!

1 голос
/ 04 декабря 2009

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

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

1 голос
/ 04 декабря 2009

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

1 голос
/ 04 декабря 2009

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

0 голосов
/ 04 декабря 2009

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

Надеюсь, это поможет.

...