Большая путаница O: log2 (N) против log3 (N)

Почему O(log2N) = O(log3N)?

Я этого не понимаю. Разве большой O не означает верхнюю границу чего-то?

Разве log2N не больше, чем log3N? Когда я рисую их, log2N выше log3N .


person Daver Muzaffar    schedule 11.12.2013    source источник
comment
Подсказка: попробуйте преобразовать в основание 3 и помните, что константы не имеют значения.   -  person msgambel    schedule 11.12.2013
comment
Вы также можете использовать ограничения, чтобы помочь найти ответ. lim_{x-›infty}(log_2n/log_3n) = ln3/ln2 = приблизительно 1,58   -  person J'e    schedule 01.09.2020


Ответы (4)


Большой O не имеет дело с постоянными факторами, и разница между Logx(n) и Logy(n) является постоянным фактором.

Другими словами, основание логарифма просто изменяет наклон линии/кривой на графике. Big-O не имеет отношения к наклону кривой на графике, а только к форме кривой. Если вы можете заставить одну кривую совпадать с другой, сдвигая ее наклон вверх или вниз, то, насколько это важно для нотации Big-O, это одна и та же функция и одна и та же кривая.

Чтобы попытаться представить это в перспективе, возможно, было бы полезно нарисовать некоторые из наиболее распространенных форм кривых:

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

Как отмечалось выше, имеет значение только форма линии, а не ее наклон. На следующем рисунке:

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

... все линии прямые, поэтому, несмотря на то, что их наклоны радикально различаются, они по-прежнему все идентичны, насколько это важно для большого-O - все они просто O (N), независимо от наклона. С логарифмами мы получаем примерно тот же эффект — каждая линия будет искривлена, как линия O(log N) на предыдущем рисунке, но изменение основания логарифма повернет эту кривую вокруг начала координат, так что вы (снова) имеют одинаковую форму линии, но с разным наклоном (так что, опять же, насколько это важно, они все идентичны). Итак, переходя к первоначальному вопросу, если мы изменим основание логарифмов, мы получим кривые, которые выглядят примерно так:

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

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

person Jerry Coffin    schedule 11.12.2013
comment
Я также хотел бы отметить, что не только сдвиг не имеет значения, поскольку мы также не учитываем умножение на константы. f равно O(n), независимо от того, f = n или f = 2n, даже если 2n не является сдвигом вверх на n. На самом деле, я бы сказал, что игнорирование постоянных факторов является более важной особенностью большого O. - person Sean; 11.12.2013

Это потому, что изменение основания логарифма равносильно его умножению на константу. А большой O не заботится о константах.

log_a(b) = log_c(b) / log_c(a)

Таким образом, чтобы получить от log2(n) до log3(n), вам нужно умножить его на 1 / log(3) 2.

Другими словами log2(n) = log3(n) / log3(2).

log3(2) является константой, а O(cn) = O(n), таким образом, O (log2(n)) = O (log3(n))

person luk32    schedule 11.12.2013

Здесь уже есть несколько хороших ответов, поэтому, пожалуйста, прочитайте их тоже. Чтобы понять, почему Log2(n) равен O(log3(n)) вам нужно понять две вещи.

1) Что подразумевается под обозначением BigO. Я предлагаю прочитать это: http://en.wikipedia.org/wiki/Big_O_notation Если вы понимаете, это, вы будете знать, что 2n и 16n+5 оба O(N)

2) как работают логарифмы. разница между log2 (N) и log10(N) будет простым соотношением, которое легко вычислить, если вы хотите, согласно ответу luk32.

Поскольку журналы с разными основаниями отличаются только постоянным отношением а, а Большой О безразличен к второстепенным вещам, таким как постоянные коэффициенты умножения, вы часто обнаружите, что O(logN) на самом деле опускает основание, потому что выбор любого постоянного основания (например, 2, 3,10,e) в этом контексте не имеет значения.

person RichardPlunkett    schedule 11.12.2013

Это зависит от контекста, в котором используется нотация O. Когда вы используете его в рассуждениях об алгоритмической сложности, вас интересует асимптотическое поведение функции, т. е. как она растет/убывает при стремлении (плюс-минус) к бесконечности (или к другой точке накопления).

Следовательно, хотя f(n) = 3n всегда меньше g(n) = 1000n, они оба появляются в O(n), поскольку они растут linearly (согласно их выражениям) асимптотически.

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

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

person rano    schedule 11.12.2013