Для начала, эта линия
if (ar[i] == ar[j])
всегда занимает много времени Θ (1) для выполнения. Он выполняет только постоянную работу (сравнение плюс ветвь), поэтому работа, проделанная здесь, не будет асимптотически способствовать общей продолжительности выполнения.
Учитывая это, мы можем проанализировать поведение наихудшего случая, рассмотрев, что произойдет, если это утверждение всегда ложно. Это означает, что цикл работает как можно дольше. Как вы заметили, поскольку каждый цикл работает O (n) раз, общая работа выполнена в Θ (n) в наихудшем случае.
В лучшем случае, однако, время работы значительно ниже. Представьте себе любой массив, где первые два элемента одинаковы. В этом случае функция прекращается почти мгновенно, когда условие встречается впервые. В этом случае время выполнения составляет Θ (1), поскольку будет выполнено постоянное число операторов.
Среднее значение, однако, здесь не определено. Среднее значение обычно определяется относительно некоторого распределения - среднее по сравнению с чем? - и неясно, что здесь.Если вы предполагаете, что массив состоит из действительно случайных значений int
и что int
s может принимать любое целочисленное значение (не разумное предположение, но пока оно прекрасное), то вероятность того, что случайно выбранный массив имеет дубликат, равна 0 и мы вернулись в худшем случае (время выполнения Θ (n)). Однако, если значения более ограничены, среда выполнения изменяется. Предположим, что в массиве есть n чисел, а целые числа - от 0 до k - 1 включительно. Учитывая случайный массив, среда выполнения зависит от
- ли есть какие-либо дубликаты или нет, и
- Если есть дубликат, где первое дублируется значение отображается в массиве.
Я достаточно уверен, что эта математика будет очень трудной для разработки, и если у меня будет время позже, я вернусь и попытаюсь получить точное значение (или, по крайней мере, что-то асимптотически соответствующее) , Я серьезно сомневаюсь, что это то, что ожидалось, так как это похоже на вводное задание большой O, но это интересный вопрос, и я хотел бы изучить его больше.
Надеюсь, это поможет!
Целые сравнения всегда O (1) – StormeHawke