Hashtable- Перемывание - PullRequest
       31

Hashtable- Перемывание

8 голосов
/ 28 сентября 2011

Мне сказали, что Hashtable в .NET использует перефразирование, чтобы уменьшить / избежать столкновения.

Т.е.. «Реазинг работает следующим образом: предположим, что у нас есть набор различных хеш-функций, H1 ... Hn, и при вставке или извлечении элемента из хеш-таблицы изначально используется хеш-функция H1. Если это приводит к столкновению, вместо этого пробуется H2 и далее до Hn, чтобы избежать столкновения в Hashtable. ”

Предположение: у нас есть хеш-таблица с n (где n 1).

Вопрос: Может кто-нибудь объяснить мне, как CLR отображает ключ к хеш-коду, когда мы ищем (извлекаем) какой-либо элемент (если используются разные хеш-функции)? Как CLR отслеживает (если это) хеш-функцию любого живого объекта (хеш-таблицы)?

Заранее спасибо

1 Ответ

5 голосов
/ 28 сентября 2011

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

РЕДАКТИРОВАТЬ: Подробнее

Только что вернувшись домой, открыл книгу «Введение в алгоритмы» Т. Кормена и нашел следующее в разделе 11.3.3 Универсальное хеширование :

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

Чтобы узнать больше, просмотрите книгу на сайте Google Книг здесь

enter image description here

...