Все мы знаем, что отличимость элементов в модели, основанной на сравнении, не может быть выполнена за времени. Тем не менее, одним словом RAM можно добиться большего.
Конечно, если предположить существование совершенной хеш-функции, которая может быть вычислена за линейное время, мы получим алгоритм линейного времени для различения элементов: просто продолжайте хешировать числа одно за другим и возвращать 1, если есть столкновение.
Однако есть две проблемы: 1) большинство конструкций совершенных хеш-функций, которые я мог бы найти, использовали случайность и 2) я нигде не могу найти обсуждение времени предварительной обработки, т. Е. Времени, необходимого, чтобы решить, какую хеш-функцию использовать. использовать на основе входного набора чисел.
Фредман и др. « Хранение разреженной таблицы с наихудшим временем доступа » действительно решает первую проблему, предоставляя хэш-функцию с временем доступа в наихудшем случае, но ничего не говорит о второй проблеме ,
Подводя итог, вот что я хочу:
Разработать алгоритм, который дает набор из чисел (каждое число имеет длину бит) в слове RAM с длиной слова , находит хеш-функцию в время, где . Функция должна обладать тем свойством, что для любого число элементов которые отображаются в является константой, а вычисление должно приниматьвремя в «разумной» модели слова-RAM, т. е. модель не должна позволять «экзотическим» функциям слов оцениваться за времени.
Я также хотел бы знать, существуют ли алгоритмы для определения отличимости элементов в слове RAM, которые вообще не используют хеш-функции.