Всі ми знаємо, що розрізнення елементів у моделі порівняння не може бути зроблено в час. Однак, на словах RAM, можна досягти кращого.
Звичайно, якщо припустити існування досконалої хеш-функції, яку можна обчислити в лінійний час, ми отримаємо алгоритм лінійного часу для розрізнення елементів: просто продовжуйте хешировать числа по одному і повертати 1, якщо відбувається зіткнення.
Однак є два питання: 1) більшість конструкцій досконалих хеш-функцій, які я міг би знайти використані випадковості, і 2) я не можу знайти дискусію про час попередньої обробки в будь-якому місці, тобто час, необхідний для вирішення того, яка функція хешу йде використовувати на основі вхідного набору чисел.
" Зберігання розрідженої таблиці з найгіршим часом доступу O ( 1 ) Фредмена та ін. Вирішує першу проблему, надаючи хеш-функцію з часом доступу в гіршому випадку, але нічого не говорить про другу проблему .
Отже, підводячи підсумок, ось що я хочу:
Створіть алгоритм, який задає набір з чисел (кожне число має біт довжиною) на слові RAM з довжиною слова , знаходить хеш-функцію в час, де . Функція повинна мати властивість, що для будь-якого кількість елементів що відображається на є постійною, а обчислення повинно прийматиn w w h : S → { 1 , … , m } O ( n ) m = O ( n ) h j ∈ { 1 , … , m } S jO ( 1 )час у "розумній" формі слова RAM, тобто модель не повинна дозволяти "екзотичним" функціям на словах оцінюватися в час.
Мені також хотілося б знати, чи є алгоритми для вирішення відмінності елементів у слові RAM, які взагалі не використовують хеш-функції.