Я когда-то это понимал, но не больше. Допустим, у меня есть алгоритм, который вернет число в середине массива.Сложность времени работы O (n/2)
for (int i = 0; i < nums.length; i++) {
if (i == nums.length/2) return nums[i];
}
Худший случай от этого всегда будет O (n/2) вправо? Здесь нет худшего случая. Но почему мы просто заключаем, что это O (n)?
Для целей 'O (...)' константы не имеют значения. Это все о том, как увеличивается время *, поскольку количество элементов увеличивается, а не абсолютное значение времени. –
'2' - некоторый постоянный коэффициент, поэтому' O (n/2) 'можно уменьшить до' O (n) '. Другими словами, сложность рассмотрения половины элементов не хуже, чем просмотр всех элементов. –
Меня беспокоит то, что O (n/2) сводится к O (n). Что делать, если код написан вместо 'if (i == nums.length/2) return nums [i];' we have 'if (i == nums.length/999999999) return nums [i];' then it всегда будет первым элементом. Итак, (O (n/99999999) технически O (1)? – Zanko