Фразы минимальное время и максимальное время немного вводят в заблуждение. Когда мы говорим о больших O-нотациях, это не фактическое время, которое нас интересует, а то, как увеличивается время, когда размер нашего ввода увеличивается. Обычно речь идет о среднем или худшем случае, а не о лучшем случае , что обычно не имеет смысла в решении наших проблем.
Использование в качестве примера поиска по массиву в принятом ответе на другой вопрос. Время, которое требуется для нахождения определенного числа в списке размера n, составляет в среднем n / 2 * some_constant. Если вы рассматриваете это как функцию f(n) = n/2*some_constant
, она увеличивается не быстрее, чем g(n) = n
, в смысле, заданном Чарли. Кроме того, оно увеличивается не медленнее, чем g(n)
. Следовательно, g(n)
на самом деле является одновременно верхней и нижней границами f(n)
в обозначениях Big-O, поэтому сложность линейного поиска равна точно n , что означает, что это тэта (н).
В этом отношении объяснение в принятом ответе на другой вопрос не совсем корректно, в котором утверждается, что O (n) является верхней границей, поскольку алгоритм может работать в постоянном времени для некоторых входных данных (это лучший случай Я упоминал выше, что не совсем то, что мы хотим знать о времени выполнения).