Т.е. если у меня будет одна итерация цикла, но в ней 100 команд и 1 команда, это будет одна скорость?
Нажмите, чтобы раскрыть...
f лежит в классе O(g) в точке x_0 (или как это записывают f = O(g), x -> x_0)
если существует константа C, такая что существует окрестность вокруг x_0, такая что все x в этой окрестности удовлетворяют f(x) < C g(x)
в computer science практически всегда речь идёт о x -> +∞, поэтому это опускают
окрестностью становятся лучи вида [ t; +∞ )
то есть начиная с некоторого t для всех x должно выполнятся соотношение с константой
дальше возникает арифметика своеобразная (включение классов)
например ты всегда можешь повысить класс
O(n) = O(n^2) = O(n^3) ... = O(2^n) = O(3^n) ... = O(n ^ n) ...
но обратное неверно:
O(n^2) != O(n)
их можно умножать
O(f) * O(g) = O(f * g)
нельзя делить
O(f) / O(g) != O(f / g)
можно складывать, но смысла в этом мало
потому что всё равно оно эквивалентно максимуму из двух
O(f) + O(g) = O(max f g)
вычитание работает как сложение
O(f) - O(g) = O(max f g)
можно делить на конкретные функции
например this is perfectly legal
O(n) / n = O(1)
можно брать функции
sin(O(f)) = O(1)
можно брать от этой ерунды суммы
sum O(i^2) for i in 1 ... n] = O(n^3)
в общем всё что пожелаешь
главное руководствоваться здравым смыслом и определением