Хеш-таблицы (Словарь и т.д.) с целочисленными ключами

Используйте эти svn move команда для перемещения файла/папки.

7
задан spender 7 September 2009 в 08:54
поделиться

3 ответа

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

Я считаю, что способ работы словаря .NET не зависит от равномерного распределения хеш-значений. Требуется hash% bucketCount , где bucketCount всегда является простым. (Хотя это из памяти - я могу ошибаться.)

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

7
ответ дан 7 December 2019 в 07:48
поделиться

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

Итак, хотя ваша логика относительно распределения хэшей верна, ваше первоначальное предположение, что целочисленные ключи означало бы, что hashes = keys, вероятно, нет.

Если я ошибаюсь, re: .NET, тогда да ладно; это более обобщенный ответ. :)

0
ответ дан 7 December 2019 в 07:48
поделиться

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

0
ответ дан 7 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: