Какова цель хеширования информации? - PullRequest
15 голосов
/ 03 февраля 2009

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

Мой вопрос таков: каковы некоторые примеры, когда хеширование информации полезно? Как данные извлекаются любым организованным способом? Кажется, он помещен в произвольные позиции, где его будет трудно найти.

Ответы [ 5 ]

21 голосов
/ 03 февраля 2009

Хеширование может использоваться для многих целей:

  1. Может использоваться для сравнения больших объемов данных. Вы создаете хэши для данных, сохраняете хэши, а затем, если хотите сравнить данные, вы просто сравниваете хэши.

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

  3. Они могут использоваться в криптографических приложениях, таких как цифровые подписи.

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

Вот приложения хеш-функций, которые перечислены в Википедии:

  1. Поиск дубликатов записей
  2. Поиск похожих записей
  3. Поиск похожих подстрок
  4. Геометрическое хеширование

Теперь относительно хеш-таблицы , вот несколько моментов, на которые следует обратить внимание:

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

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

11 голосов
/ 03 февраля 2009

alt text

Одним из основных применений хеш-таблиц, созданных вами в классе, является необходимость быстрого поиска O (1). У вас будет два компонента, ключи и значения.

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

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

Для справки: страница Википедии Хеш-таблицы довольно хороша.

0 голосов
/ 01 марта 2009

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

{
'WA': 'Washington',
'WV': 'West Virginia',
'WY': 'Wyoming'
}
0 голосов
/ 03 февраля 2009

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

0 голосов
/ 03 февраля 2009

Есть несколько типичных причин для хэширования данных. В примере, на который вы ссылаетесь, вы бы хэшировали данные и использовали их в качестве ключа для извлечения фактического значения хэшированного элемента. Хешированные данные часто называют ключом, и они ссылаются на сегмент, в котором можно найти фактическое, не хэшированное значение.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...