Я понимаю, что быстрее, чем и медленнее, чем . Мне трудно понять, как на самом деле сравнить и с где .Θ ( n log n ) Θ ( n / log n ) Θ ( n log n ) Θ ( n / log n ) Θ ( n f ) 0 < f < 1
Например, как мы решаем против илиΘ ( п 2 / 3 ) Θ ( п 1 / 3 )
Я хотел бы иметь некоторые направления в таких случаях. Спасибо.
2 n 2 n n k k log n n k klogn является обратным к . Так же, как растет быстрее, чем любой многочлен независимо от того, насколько велика конечная , будет расти медленнее, чем любые функции многочлена независимо от того, насколько мал ненулевой положительный .2n 2n nk k logn nk k
n k k < 1 n / log n n / n 1 - kn/logn против , поскольку совпадает с:
противnk k<1 n/logn n/n1−k
как для больших , для и больших .n n / log n > n k k < 1 nn1−k>logn n n/logn>nk k<1 n
источник
Для многих алгоритмов иногда случается, что константы разные, в результате чего те или иные быстрее или медленнее для меньших размеров данных и не так хорошо упорядочены по алгоритмической сложности.
Сказав это, если мы только рассмотрим супер-большие размеры данных, т.е. который в конечном итоге выигрывает, то
O(n^f)
быстрее, чемO(n/log n)
для0 < f < 1
.Большая часть алгоритмической сложности состоит в том, чтобы определить, какой алгоритм в конечном итоге быстрее, поэтому достаточно знать, что
O(n^f)
он быстрее, чемO(n/log n)
для0 < f < 1
.Общее правило заключается в том, что умножение (или деление) на в
log n
конечном итоге будет незначительным по сравнению с умножением (или делением)n^f
на любоеf > 0
.Чтобы показать это более наглядно, давайте рассмотрим, что происходит при увеличении n.
Обратите внимание, что уменьшается быстрее? Это
n^f
колонна.Даже если значение
f
было ближе к 1,n^f
столбец будет начинаться медленнее, но при увеличении n вдвое скорость изменения знаменателя возрастает, тогда как знаменательn/log n
столбца изменяется с постоянной скоростью.Давайте нарисуем частный случай на графике
Источник: Вольфрам Альфа
Я выбрал
O(n^k)
такой, которыйk
довольно близко к 1 (в0.9
). Я также выбрал константы, чтобы изначальноO(n^k)
медленнее. Тем не менее, обратите внимание, что в конечном итоге он "выигрывает" в конце и занимает меньше времени, чемO(n/log n)
.источник
n^k
конечном итоге он быстрее, даже если константы выбраны так, что он изначально медленнее.Просто подумайте о как о . Так что для вашего примера . Тогда легко сравнить ростнnf nn1−f n2/3=n/n1/3
Помните, что растет асимптотически медленнее, чем любой , для каждого .n ε ε > 0logn nε ε>0
источник
При сравнении времени выполнения всегда полезно сравнивать их, используя большие значения n. Для меня это помогает построить интуицию о том, какая функция медленнее
В вашем случае подумайте о n = 10 ^ 10 и a = .5
Следовательно, O (n ^ a) быстрее, чем O (n / logn), когда 0 <a <1, я использовал только одно значение, однако вы можете использовать несколько значений для построения интуиции о функции
источник
O(10^9)
, но главное в попытках использовать числа для построения интуиции - это правильно.Пусть обозначает «f растет асимптотически медленнее, чем g», тогда вы можете использовать следующее простое правило для полилогарифмического? функции:f≺g
Порядок отношений между кортежами лексикографический. Т.е. и(2,10)<(3,5) (2,10)>(2,5)
Применительно к вашему примеру:
Вы могли бы сказать: полномочия n доминируют над полномочиями журнала, которые доминируют над полномочиями журнала.
Источник: Конкретная математика, с. 441
источник