Узкое горлышко для хеш таблиц с
идеальным хешиваронием (2-х уровневым) - количество чтений из памяти: contains(k): вычисление h1(k),
чтение из памяти параметров для h2(k), вычисление h2(k),
чтение из памяти k. Итого
2 обращение к памяти (если реализация со статически заданным размером бакета).
Есть ли подходы, как можно сократить количество чтений из памяти до 1-го ? Например, вычислив h1(k) = x, как-то по x вычислить (восстановить) (а не прочитать из памяти) параметры для h2 ?
P.S.: Вот примерный алгоритм построения моей реализации 2-х уровневой хэш таблицы с идеальным хешированием (если потребуется):
1. Зафиксируем размер бакета = (m/n)^2 * k, где k некоторый коэффициент
2. Используя хеш функцию для внешней таблицы h1, заполнить все бакеты, если какой-то бакет переполнился, повторить шаг 2 с другой h1
3. Для каждого бакета заполнять бакет, пока есть коллизии, меняя h2
P.S.: Вариант с хеш таблицей размером m = n^2 (где в среднем за 2 раза произойдёт её построение без коллизий) тоже не годится из-за больших затрат памяти