Считается ли O (n) более быстрым по сравнению с O (n log n)?
Нет, не напрямую. Нотация Big-O - это ограничивающий фактор в алгоритме, который больше связан с масштабируемостью алгоритмов, чем со скоростью. У вас может быть подпрограмма O (1), которая занимает больше времени, чем подпрограмма O (n ^ 2) для определенного набора данных, но первая будет масштабироваться намного лучше.
При этом, как правило, O (n), конечно, будет масштабироваться лучше, чем O (n log n), и, вероятно, будет считаться "быстрее" или "лучше".
Если у меня есть функция, которая выполняет цикл, то есть O (n) a O (n log n), тогда время выполнения будет O (n log n), я полагаю?
Непонятно, что именно вы здесь говорите -
Если вы имеете в виду, что у вас есть цикл с 2 функциями, то есть:
Loop over N elements
- Call O(n) function
- Call O(n log n) function
Тогда общий ограничивающий фактор будет O (n ^ 2 log n).
(из комментария)
Я имею в виду сортировку слиянием (n log n) вне цикла, поэтому все равно это будет O (n log n)
Если вместо этого вы говорите, что собираетесь сделать что-то вроде:
- Call O(n log n) function
- Loop over N elements
- Process each element using O(1) algorithm
Тогда общая сложность по-прежнему составляет O (n log n), поскольку это является ограничивающим фактором. Это потому, что «O (n + n)» по-прежнему равно O (n).