Любые данные могут быть нанесены на линию, если оси выбраны правильно: -)
Википедия говорит, что Big-O - наихудший случай (т. Е. F (x) - это O (N) означает, что f (x) «ограничен сверху» на N) https://en.wikipedia.org/wiki/Big_O_notation
Вот хороший набор графиков, показывающих различия между различными общими функциями:
http://science.slc.edu/~jmarshall/courses/2002/spring/cs50/BigO/
Производная log (x) равна 1 / x. Вот как быстро log (x) увеличивается с увеличением x. Он не линейный, хотя может выглядеть как прямая линия, потому что он изгибается очень медленно. Когда я думаю о O (log (n)), я думаю о нем как о (N ^ 0 +), то есть о наименьшей степени N, которая не является константой, поскольку любая положительная постоянная степень N в конце концов обгонит ее. Это не на 100% точно, поэтому профессора будут злиться на вас, если вы объясните это так.
Разница между бревнами двух разных базисов является постоянным множителем. Посмотрите формулу для преобразования журналов между двумя базами:
(в разделе «смена базы» здесь: https://en.wikipedia.org/wiki/Logarithm)
Хитрость заключается в том, чтобы рассматривать k и b как постоянные.
На практике, как правило, в любых данных, которые вы наносите, возникают некоторые ошибки. Будут различия между вещами вне вашей программы (что-то, что загружается в процессор перед вашей программой, отсутствует кеш и т. Д.). Требуется много прогонов, чтобы получить надежные данные. Константы являются самым большим врагом попытки применить обозначение Big O к фактическому времени выполнения. Алгоритм O (N) с высокой константой может быть медленнее, чем алгоритм O (N ^ 2) для достаточно малых N.