Как хеши работают в программировании? - PullRequest
12 голосов
/ 09 января 2011

Как хеши работают в программировании?То, как я думаю о хэше, позволяет мне использовать какое-то уникальное значение для извлечения некоторых данных.Например, если у нас есть массив, и я начинаю помещать вещи в массив, если у меня есть другая переменная, которая отслеживает, какой элемент находится в слоте 0,1,2 ... тогда у меня есть такая мгновенная возможность найти элемент.Это хеширование?

Какова цель хеширования?

Когда должен быть реализован хеш?На что похож хеш с точки зрения структуры данных?

То, что я знаю о хешах, я думаю, это то, что это позволяет нам получить элемент в пределах O (1).Это правильно?

Ответы [ 3 ]

11 голосов
/ 09 января 2011

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

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

Теперь, в этом примере, если вы ищете кого-то в телефонной книге по имени, вы, вероятно, найдете его за O (log n), потому что имена отсортированы в алфавитном порядке, и потому что вам нужно сделать бинарный поиск. Однако если вместо этого вы «хэшируете» 100 человек, родившихся в 1900-х годах, по годам их рождения, то вам понадобится не более 4 сравнений в хэш-таблице / телефонной книге (по одному на цифру), чтобы найти любой год по хешу, постоянное время Затем, если два человека родились в одном году, вы можете использовать другую информацию, чтобы найти нужного вам человека, и в среднем, если ваша таблица не слишком полная (скажем, если у вас не более 50 человек на 100 разных лет) рождения), ваши поиски будут постоянными.

(Если ваша таблица заполнена, скажем, более чем на 50%, вы всегда можете удвоить ее размер, чтобы уменьшить количество столкновений и, следовательно, ускорить поиск.)


Дополнительная информация:

Если вы когда-либо слышали о MD5 или SHA-1 SHA-2 хэши для файлов, они похожи на "отпечатки пальцев" файла. Хотя возможно иметь два файла с одинаковым хешем, это сделано настолько маловероятно, что для практических целей это невозможно; следовательно, если у вас есть хэш двух файлов, вы можете сравнивать файлы по их отпечаткам, а не по данным, что намного быстрее.

8 голосов
/ 09 января 2011

Хеш-карта / словарь - это структура данных ключ / значение, которая хранит объекты в сегментах на основе значения хеш-функции. Эти ключи должны быть уникальными, но значения хеш-функций (иногда называемые хеш-кодами) не обязательно являются уникальными.

Например, если у нас есть массив, и я начинаю помещать htings в массив, если у меня есть другая переменная, которая отслеживает, какой элемент находится в слоте 0,1,2 ... тогда у меня есть эта мгновенная способность найти вещь. Это хеширование?

Нет. Хеш-функция - это детерминированная функция, которая всегда дает одно и то же значение для объекта. Хеш-код не изменяется в зависимости от того, где хранится объект.

То, что я знаю о хешах, я думаю, это то, что это дает нам возможность получить элемент в пределах O (1). Это правильно?

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

1 голос
/ 09 января 2011

A hash позволяет быстро выполнять поиск, а не выполнять итерации по массиву или дереву.Это позволяет искать O(1) время с небольшим использованием памяти.

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