Будь-які дані можна нанести на лінію, якщо вісь обрано правильно :-)
У Вікіпедії сказано, що 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. Ось так швидко збільшується журнал (x) із збільшенням x. Він не є лінійним, хоча може виглядати як пряма, тому що так повільно згинається. Думаючи про O (log (n)), я думаю про це як O (N ^ 0 +), тобто найменша потужність N, яка не є константою, оскільки будь-яка позитивна постійна потужність N з часом її наздожене. Це не на 100% точно, тому професори будуть злитися на вас, якщо ви пояснюєте це так.
Різниця між журналами двох різних баз є постійним множником. Шукайте формулу для перетворення журналів між двома базами: (у розділі "зміна бази" тут: https://en.wikipedia.org/wiki/Logarithm ) Фокус полягає в тому, щоб розглядати k та b як константи.
На практиці, як правило, в будь-яких даних, які ви складаєте, виникає деяка гикавка. Будуть розбіжності в речах поза вашою програмою (щось, що міняється на процесорі перед вашою програмою, пропуски кешу тощо). Щоб отримати надійні дані, потрібно багато прогонів. Константи є найбільшим ворогом спроби застосувати позначення Big O до фактичного часу виконання. Алгоритм O (N) з високою константою може бути повільнішим, ніж алгоритм O (N ^ 2) для досить малого N.