Я узнаю о времени работы 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, но я не могу понять, как определить функцию с логарифмическим временем.