Вот доказательство того, что это невозможно. Предположим, вы можете построить такую структуру данных. Построить это. Затем выберите элементов случайным образом из списка, добавьте ϵ к каждому из них, где ϵ меньше разницы между любыми двумя элементами в списке, и выполните запросы, чтобы проверить, присутствует ли какой-либо из полученных элементов в списке. список. Вы уже выполнили O ( n ) запросов.n/lognϵϵO(n)
Я хотел бы заявить, что проведенных вами сравнений достаточно, чтобы определить, является ли элемент в исходном списке меньше или больше любого нового элемента b . Предположим, вы не могли сказать. Тогда, поскольку это модель, основанная на сравнении, вы не знаете, было ли а равно b или нет, что противоречит предположению о том, что ваша структура данных работает.abab
Теперь, поскольку элементов, которые вы выбрали, были случайными, ваши сравнения с высокой вероятностью дали достаточно информации, чтобы разделить исходный список на n / log n списков, каждый из которых имеет размер O ( log n ) . Сортируя каждый из этих списков, вы получаете рандомизированный алгоритм O ( n log log n ) -времени, основанный исключительно на сравнениях, противоречие.n/lognn/lognO ( журналн )O ( n logжурналн )