Как вы визуализируете разницу между O (log n) и O (n log n)?

Двоичный поиск имеет среднюю производительность в случае O(log n), а функция быстрого сортировки с O(n log n) равна O(n log n) такая же, как O (n) + O (log n)

Ответы

Ответ 1

Представьте себе базу данных с каждым человеком в мире. Это 6,7 млрд. Записей. O (log n) - это поиск в индексированном столбце (например, первичный ключ). O (n log n) возвращает целую совокупность в отсортированном порядке на неиндексированном столбце.

  • O (log n) был закончен, прежде чем вы закончите читать первое слово этого предложения.
  • O (n log n) все еще вычисляет...

Другой способ представить это:

log n пропорционально числу цифр в n.

n log n в n раз больше.

Попробуйте записать номер 1000 один раз и записать его тысячу раз. Первое занимает время O (log n), второе - время O (n log n).

Теперь попробуйте снова с помощью 6700000000. Написание его один раз по-прежнему тривиально. Теперь попробуйте написать его 6,7 миллиарда раз. Даже если вы можете писать его один раз в секунду, вы были бы мертвы, прежде чем закончите.

Ответ 2

Вы можете визуализировать его в сюжете, см. здесь, например:

введите описание изображения здесь

Ответ 3

Нет, O(n log n)= O(n) * O(log n)

В математике, когда у вас есть выражение (т.е. e = mc ^ 2), если нет оператора, то вы умножаетесь.

Обычно способ визуализации O (n log n) - "делать что-то, что занимает log n вычисления n раз".

Если у вас был алгоритм, который сначала повторялся над списком, затем выполнил бинарный поиск этого списка (который был бы N + log N), который вы можете выразить просто как O(n), потому что n затмевает log n при больших значениях n

Ответ 4

A (log n) график увеличивается, но вогнутый вниз, что означает:

  • Он увеличивается, когда n становится больше
  • Скорость увеличения когда n становится больше

A (n log n) график увеличивается и (слегка) вогнутым вверх, что означает:

  • Он увеличивается, когда n становится больше
  • Скорость увеличения (слегка) увеличивается при увеличении n

Ответ 5

Зависит от того, хотите ли вы визуализировать n как имеющее конкретное значение.

Если вы склонны визуализировать n как имеющие конкретное значение, а единицами f(n) являются время или инструкции, то O(log n) меньше n раз, чем O(n log n) для заданной задачи размера n. Для блоков памяти или пространства, тогда O(log n) меньше n для заданной задачи размером n. В этом случае вы фокусируетесь на codomain f(n) для некоторых известных n. Вы визуализируете ответы на вопросы о том, сколько времени займет что-то или сколько памяти будет потреблять эта операция.

Если вы склонны визуализировать n как параметр, имеющий любое значение, тогда O(log n) будет n раз более масштабируемым. O(log n) может завершить n раз столько задач размером n. В этом случае вы ориентируетесь на домен f(n). Вы визуализируете ответы на вопросы о том, как большой n может получить, или сколько экземпляров f(n) можно запускать параллельно.

Ни одна перспектива не лучше другой. Первый может использоваться для сравнения подходов к решению конкретной проблемы. Последнее можно использовать для сравнения практических ограничений данных подходов.