Подборка рутины с обманщиками?

Недавно я написал программу после анализа алгоритма k-го наименьшего элемента, сначала без случая дубликатов.

Теперь, однако, я хотел бы проанализировать ожидаемую асимптотическую среду выполнения для нахождения, скажем, медианы массива, когда точно j дубликаты. Я не модифицировал свой код для такого, и поэтому производительность немного замедляется из-за j дубликаты.

Я не уверен, как начать? Кто-нибудь может указать мне на такое возвращение отношения?

Я вывел следующее, где n - размер входного массива

T(n) <= 1/2*T(3/4*n) + 1/2*T(n)

но совершенно неясно, как поступить с дублирующимися ключами.

Спасибо

1 ответ

Решение

Рандомизированное решение, как показано здесь

 T(n) <= T(3/4*n) + n-1  =>  T(n) <= 4n

Сложность алгоритма может зависеть от j но не ожидайте, что оно будет чудесным образом меньше линейного времени. Зачем? возьмите случайный массив размером n/2, полностью продублируйте его и запустите идеальный алгоритм для задачи с дубликатами. Вы будете иметь

T(n) <= 4(n/2) => T(n) <= 2n

когда каждый элемент дублируется дважды (точно n/2 дубликаты)

Другие вопросы по тегам