Эта нотация называется Big O нотация и используется как сокращение для выражения сложности алгоритма (в основном, сколько времени займет выполнение данного алгоритма при увеличении размера ввода (n))
Вообще говоря, вы столкнетесь со следующими основными типами алгоритмов:
- O (1) - Константа - Продолжительность выполнения этого алгоритма не зависит от количества элементов, которые алгоритм должен обработать.
- O (log n) - Логарифмический - Продолжительность выполнения этого алгоритма зависит от количества элементов, которые алгоритм должен обработать. По мере того как размер ввода увеличивается, для каждого нового ввода требуется меньше времени.
- O (n) - Линейный - время, которое занимает этот алгоритм, напрямую зависит от количества элементов, которые алгоритм должен обработать. По мере увеличения размера ввода время, которое требуется, увеличивается в равных количествах.
- O (n ^ 2) - Полиноминальный - По мере увеличения размера ввода время, затрачиваемое на обработку ввода, увеличивается все больше и больше - это означает, что большие размеры ввода становятся непомерно трудными для решения.
- O (2 ^ n) - Экспоненциальный - Наиболее сложные типы задач. Время обработки увеличивается до предела в зависимости от размера ввода.
Как правило, вы можете получить приблизительную оценку сложности алгоритма, посмотрев, как он используется. Например, глядя на следующий метод:
function sum(int[] x) {
int sum = 0;
for (int i = 0; i < x.length; i++) {
sum += x[i];
}
return sum;
}
Здесь нужно сделать несколько вещей:
- Инициализировать переменную с именем sum
- Инициализировать переменную с именем i
- Для каждой итерации i: добавьте x [i] к сумме, добавьте 1 к i, проверьте, меньше ли i x.length
- Возвращаемая сумма
Здесь есть несколько операций, которые выполняются в постоянное время (первые две и последние), так как размер x не влияет на продолжительность их выполнения. Также есть некоторые операции, которые выполняются за линейное время (так как они запускаются один раз для каждой записи в x). При обозначении Big O алгоритм упрощается до самого сложного, поэтому этот алгоритм суммы будет работать в O (n)