Время O(n)
истинно, даже если есть повторяющиеся элементы. Вы должны ознакомиться с big-oh нотацией .
В худшем случае рассмотрим этот массив: 1, 1, 1, 1, ..., 1, 1, 2
. Поиск по 2
займет ровно n
сравнений, если вы начнете с первого элемента, поэтому наличие дубликатов вообще не помогло. Если бы вы искали 1
, вы бы нашли его в одном сравнении, но есть входы различных элементов, для которых вы также можете найти элемент в одном сравнении, если вам повезет, поэтому наличие дубликатов действительно ничего не значит, за исключением того, что вам больше повезет, и вы найдете целевой элемент за меньшее количество шагов. Это все равно будет O(n)
однако.
Почти всегда бывают лучшие и худшие случаи. Практическая производительность большинства алгоритмов всегда зависит от заданных входных данных, а большие обозначения просто дают вам смутное представление о том, как будет работать алгоритм. Это не значит, что асимптотическая запись бесполезна, просто она не всегда точна, потому что в нее входят основные константы, которые на практике имеют значение.
Если вы сомневаетесь в производительности, запустите собственные тесты.