Я вижу, что для структур данных типа двоичного дерева поиска нотация Big O обычно обозначается как O (logn). Имеет ли в журнале строчную букву l, подразумевает ли это основание журнала e (n), описываемое натуральным логарифмом? Извините за простой вопрос, но у меня всегда были проблемы с различением различных подразумеваемых логарифмов.
math
binary-tree
complexity-theory
big-o
БакНаполненныйПлатип
источник
источник
log n
он имеет в виду натуральный логарифм. 2. Когда компьютерный ученый пишет,log n
он имеет в виду основание два. 3. Когда инженер пишет,log n
он имеет в виду десятичную систему. Обычно это правда.Ответы:
После выражения в нотации big-O () оба значения верны. Однако при выводе полинома O () в случае двоичного поиска верным будет только log 2 . Я предполагаю, что это различие было интуитивным вдохновением для начала вашего вопроса.
Кроме того, на мой взгляд, запись O (log 2 N) лучше для вашего примера, потому что она лучше передает вывод времени выполнения алгоритма.
В нотации big-O () постоянные множители удаляются. Преобразование из одного логарифма в другой включает умножение на постоянный коэффициент.
Таким образом, O (log N) эквивалентно O (log 2 N) из-за постоянного множителя.
Однако, если вы можете легко набрать log 2 N в своем ответе, это будет более педагогическим занятием. В случае поиска по двоичному дереву вы правы, что log 2 N вводится во время вывода среды выполнения big-O ().
Прежде чем выразить результат в виде нотации big-O (), разница очень важна. При выводе полинома, который будет передаваться через нотацию большого O, для этого примера было бы неправильно использовать логарифм, отличный от log 2 N, до применения нотации O (). Как только полином используется для передачи среды выполнения в наихудшем случае через нотацию big-O (), не имеет значения, какой логарифм используется.
источник
log_2 n
это применимоΘ(log_a n)
к любой базеa
, поэтому я не уверен, что понимаю, что использование базы 2 «правильнее».Нотация Big O не зависит от логарифмического основания, потому что все логарифмы в разных основаниях связаны постоянным множителем ,
O(ln n)
что эквивалентноO(log n)
.источник
log_2 x
Отличается отlog_b x
постоянного множителемc(b)
для любой базыb
независимо отx
.log_2 n
, я могу просто пойти и заменитьlog_2 n
везде,log_pi 2 * log_2 n / log_pi 2
а затем просто закончить анализом, который естьlog_pi 2 * log_pi n
везде. Теперь мой анализ с точки зренияlog_pi n
.На самом деле не имеет значения, какая это база, так как нотация большого О обычно пишется с указанием только асимптотически наивысшего порядка
n
, поэтому постоянные коэффициенты исчезнут. Поскольку другое основание логарифма эквивалентно постоянному коэффициенту, оно излишне.Тем не менее, я, вероятно, предположил бы базу журнала 2.
источник
Оба верны. Думать об этом
источник
Да, когда мы говорим о нотации большого О, основание не имеет значения. Однако с вычислительной точки зрения, когда вы сталкиваетесь с реальной проблемой поиска, это имеет значение.
При развитии интуиции о древовидных структурах полезно понимать, что в двоичном дереве поиска можно искать за O (n log n) время, потому что это высота дерева, то есть в двоичном дереве с n узлами дерево глубина равна O (n log n) (основание 2). Если у каждого узла есть три дочерних узла, поиск в дереве все еще может выполняться за время O (n log n), но с логарифмом по основанию 3. С вычислительной точки зрения количество дочерних узлов у каждого узла может иметь большое влияние на производительность (см., Например, текст ссылки )
Наслаждайтесь!
Павел
источник
Технически база не имеет значения, но обычно ее можно рассматривать как базу-2.
источник
Сначала вы должны понять, что значит для функции f (n) быть O (g (n)).
Формальное определение: * Функция f (n) называется O (g (n)) тогда и только тогда, когда | f (n) | <= C * | g (n) | всякий раз, когда n> k, где C и k - константы. *
поэтому пусть f (n) = log base a of n, где a> 1 и g (n) = log base b of n, где b> 1
ПРИМЕЧАНИЕ. Это означает, что значения a и b могут быть любым значением больше 1, например a = 100 и b = 3.
Теперь мы получаем следующее: логарифмическая база a для n называется O (логарифмическая база b для n), если | log base a of n | <= C * | логарифмическая база b из n | всякий раз, когда n> k
Выберите k = 0 и C = log base a of b.
Теперь наше уравнение выглядит следующим образом: | log base a of n | <= логарифмическая база a из b * | логарифмическая база b из n | всякий раз, когда n> 0
Обратите внимание на правую часть, мы можем манипулировать уравнением: = log base a of b * | log base b of n | = | логарифмическая база b числа n | * логарифмическая база a из b = | логарифмическая база a из b ^ (логарифмическая база b из n) | = | логарифмическая база a из n |
Теперь наше уравнение выглядит следующим образом: | log base a of n | <= | логарифмическая база a из n | всякий раз, когда n> 0
Уравнение всегда верно вне зависимости от значений n, b или a, кроме их ограничений a, b> 1 и n> 0. Таким образом, логарифмическая база a для n равна O (логарифмическая база b для n), и поскольку a, b не имеют значения, мы можем просто опустить их.
Вы можете посмотреть видео на YouTube здесь: https://www.youtube.com/watch?v=MY-VCrQCaVw
Вы можете прочитать статью об этом здесь: https://medium.com/@randerson112358/omitting-bases-in-logs-in-big-o-a619a46740ca
источник