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