Динамическое совершенное хеширование и универсальные хеш-функции - объясните, пожалуйста? - PullRequest
5 голосов
/ 15 июля 2009

Итак, я читаю о хеш-таблицах, хеш-функциях и т. Д. Я был заинтригован, чтобы прочитать в википедии о том, как «динамическое идеальное хеширование» предполагает использование второй хеш-таблицы в качестве структуры данных для хранения нескольких значений в конкретном сегменте.

Однако, где я теряюсь, это когда выбирается универсальная хеш-функция для выполнения хэширования для этой второй хеш-таблицы. Кто-нибудь может объяснить, как эта универсальная хеш-функция определяется из значений, хранящихся в корзине? Я смутно следую рассуждениям и логике на странице "универсальной хэш-функции" в Википедии, но изо всех сил пытаюсь получить хоть какую-то интуицию. В частности, как эти функции гарантируют отсутствие конфликтов? Или, по крайней мере, если они удаляются и генерируется новый, если обнаруживается конфликт, как мы узнаем, что это можно сделать за реалистичное время, если оно вообще есть?

Объяснение книги "Божья коровка", пожалуйста?

Ответы [ 2 ]

4 голосов
/ 15 июля 2009

Идеальное хеширование означает, что доступ для чтения занимает постоянное время даже в худшем случае.

Для вставки ключей нет гарантий наихудшего случая, временные рамки действительны только в среднем (или могут быть амортизированы).

Чтобы сделать вставку достаточно быстрой, хеш-таблица второго уровня выбрана очень большой для количества ключей (k 2 ), достаточно большой, чтобы коллизии стали достаточно маловероятными. Это не проблема w.r.t. размер, потому что хэш первого уровня распределяет ключи равномерно, так что в среднем хэш-таблицы второго уровня все еще малы.

Хеш-функция для таблиц второго уровня выбирается случайным образом из набора параметризованных хеш-функций.

3 голосов
/ 15 июля 2009

Как насчет просмотра лекций MIT? :)
Введение MIT в алгоритмы, лекции 7 и 8: хеширование

...