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