Розглянемо наступну проблему:
Введення : списки цілих чисел
Мета : визначити, чи існує ціле число яке є в обох списках.
Припустимо, обидва списки мають розмір . Чи існує детермінований алгоритм лінійного часу для цієї проблеми? Іншими словами, чи можете ви вирішити цю проблему за час детерміновано, не використовуючи випадковості?
На жаль, ви не можете припустити, що всі елементи списку невеликі.
Я бачу, як вирішити це в очікуваний час використовуючи рандомізований алгоритм: випадковим чином вибирати 2-універсальну хеш-функцію , зберігати елементи у хешблет (використовуючи як хеш-функцію), а потім шукати вгору кожен елемент щоб побачити, чи є він у хештилі. Очікуваний час роботи буде . Однак я не можу зрозуміти, як знайти детермінований алгоритм із часом виконання . Якщо ви спробуєте дерандомізовувати це та виправити одну конкретну хеш-функцію, існуватиме найгірший вхід, який спричиняє запуск цієї процедури вчас. Найкращий детермінований алгоритм, який я можу знайти, включає сортування значень, але це не буде лінійним часом. Чи можемо ми досягти лінійного часу роботи?
Крім того, я бачу, як вирішити це в лінійний час, якщо припустити, що всі елементи списку є цілими числами в діапазоні (в основному, підрахунок сортування) - але мене цікавить, що відбувається в цілому випадок, коли ми цього не можемо припустити.
Якщо відповідь залежить від моделі обчислення, модель оперативної пам’яті стрибає на розум, але мені будуть цікаві результати для будь-якої розумної моделі обчислення. Мені відомі нижчі межі для алгоритмів дерева рішень для унікальності елементів , але це не є остаточним, оскільки іноді ми можемо знайти алгоритми лінійного часу, навіть коли є пов'язані в моделі дерева рішень.