Мне нужно реализовать «постоянный» набор. То есть структура данных, которая поддерживает только тест на членство. Кроме того (конечно), мне нужна фабричная процедура, которая, учитывая список элементов, строит постоянный набор.Эффективная реализация «постоянного» набора ADT
Обратите внимание, что не только мутация не разрешена для константного набора, но дополнительно мне не нужна операция «добавить», которая возвращает новый набор констант (то есть, когда инициализация происходит, меня интересует только проверка наличия элемента в наборе или нет).
Гольд-хэш-таблицы являются очевидным выбором здесь, но мне интересно, можем ли мы как-то воспользоваться тем фактом, что нам нужно поддерживать только одну операцию (и, при построении множества, мы знаем, что все его элементы будут быть)? Есть ли структура данных (специализированный тип хеш-таблицы, возможно), которая будет особенно хорошо работать здесь?
[Идеальное хэширование] (возможно, http://en.wikipedia.org/wiki/Perfect_hash_function)? –
Что вы ищете? Постоянное время? – Justin
@ Justin: Да, постоянное время. Но это выходит за рамки этого: мы можем уже получить O (1) с «регулярными» хеш-таблицами? Можем ли мы работать лучше, а не асимптотически, но на практике (имея более низкую константу, лучшую локальность кэша и т. Д.)? – abeln