Различение элементов за O (n) время?

21

Все мы знаем, что отличимость элементов в модели, основанной на сравнении, не может быть выполнена за времени. Тем не менее, одним словом RAM можно добиться большего.o(nlogn)

Конечно, если предположить существование совершенной хеш-функции, которая может быть вычислена за линейное время, мы получим алгоритм линейного времени для различения элементов: просто продолжайте хешировать числа одно за другим и возвращать 1, если есть столкновение.

Однако есть две проблемы: 1) большинство конструкций совершенных хеш-функций, которые я мог бы найти, использовали случайность и 2) я нигде не могу найти обсуждение времени предварительной обработки, т. Е. Времени, необходимого, чтобы решить, какую хеш-функцию использовать. использовать на основе входного набора чисел.

Фредман и др. « Хранение разреженной таблицы с наихудшим временем доступаO(1) » действительно решает первую проблему, предоставляя хэш-функцию с временем доступа в наихудшем случае, но ничего не говорит о второй проблеме ,O(1)

Подводя итог, вот что я хочу:

Разработать алгоритм, который дает набор из чисел (каждое число имеет длину бит) в слове RAM с длиной слова , находит хеш-функцию в время, где . Функция должна обладать тем свойством, что для любого число элементов которые отображаются в является константой, а вычисление должно приниматьSnwwh:S{1,,m}O(n)m=O(n)hj{1,,m}Sjh(i)O(1)время в «разумной» модели слова-RAM, т. е. модель не должна позволять «экзотическим» функциям слов оцениваться за времени.O(1)

Я также хотел бы знать, существуют ли алгоритмы для определения отличимости элементов в слове RAM, которые вообще не используют хеш-функции.

Винаяк Патхак
источник
8
Re: «Я также хотел бы знать, существуют ли алгоритмы для определения отличимости элементов в слове-RAM, которые вообще не используют хэш-функции». - до тех пор, пока вы хотите только а не линейный, есть много работы по сортировке по слову RAM (см. En.wikipedia.org/wiki/Integer_sorting ). Некоторые из этих алгоритмов используют хеширование, а другие нет. o(nlogn)
Дэвид Эппштейн
Допустимы ли приблизительные решения?
AT
(Я думаю, что) Ваш мыслительный процесс пропускает один шаг: 1. Вы постулируете, что лучшая сложность в модели сравнения - 2. Вы спрашиваете, как это можно улучшить в модели RAM 3. Вы напрямую спросите решение за время в модели RAM. Скорее, вы должны изучить решения в в модели RAM и посмотреть, можете ли вы улучшить их? Θ(nlogn)O(n)o(nlogn)
Джереми
Radix сортирует вас слишком медленно?
Томас Мюллер

Ответы:

8

Различение элементов может быть решено детерминистически в модели RAM за время в течение времени:O(nloglogn)o(nlogn)

Сортируйте по времени в пределах ваши чисел по битам, используя алгоритм сортировки, описанный Ханом в STOC 2002 («Детерминированная сортировка по времени и линейному пространству»), затем сканируйте за линейное время на наличие столкновений.O(nloglogn)nwO(nloglogn)

Насколько я знаю, это лучший результат, известный на сегодняшний день.

Джереми
источник