В настоящее время я узнаю о времени работы Big O Notation и времени амортизации. Я понимаю понятие O (n) линейного времени, означающее, что размер входных данных пропорционально влияет на рост алгоритма ... и то же самое относится, например, к квадратичному времени O (n 2 ) и т. д. Даже алгоритмы, такие как генераторы перестановок, увеличивают в O (n!) раз на факториалы.
Например, следующая функция: O (n) , поскольку алгоритм растет пропорционально его вводу n :
f(int n) {
int i;
for (i = 0; i < n; ++i)
printf("%d", i);
}
Аналогично, если бы был вложенный цикл, время было бы равно O (n 2 ).
Но что именно это O (log n) ? Например, что значит сказать, что высота полного двоичного дерева равна O (log n) ?
Я знаю (возможно, не очень подробно), что такое логарифм, в том смысле, что: log 10 100 = 2, но я не могу понять, как определить функцию с логарифмическим временем.