Что такое хэш-карта в программировании и где ее можно использовать

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

4 ответов


сначала вы должны прочитать это статьи.

когда вы используете списки и ищете специальный элемент, вам обычно приходится перебирать весь список. Это очень дорого, когда у вас большие списки.
Hashtable может быть намного быстрее, при лучших обстоятельствах, вы получите элемент, который вы ищете только с одним выходом.
Как это работает? Как словарь ... когда вы ищете слово "hashtable" в словаре, вы не начиная с первого слова "а". Но лучше сразу перейти к букве "Н". Затем "ха", "имеет" и так далее, пока вы не найдете свое слово. Вы используете индекс в своем словаре, чтобы ускорить поиск.
Хеш-таблица делает в основном то же самое. Каждый элемент получает уникальный индекс (так называемый hash). Вы используете этот хэш для поиска. Хэш может быть индексом в обычном связанном списке. Например, ваш хэш может быть числом типа 2130, что означает, что вы должны посмотреть позиция 2130 в вашем списке. Поиск по известному индексу в обычном списке очень прост и быстр.
Проблема всего подхода заключается в так называемом hash function, который присваивает этот индекс для каждого элемента. Когда вы ищете элемент, вы должны быть в состоянии рассчитать индекс заранее. Так же, как в реальном словаре, где вы видите, что слово "hashtable" начинается с буквы "h", и поэтому вы знаете приблизительную позицию.
Хорошая хэш-функция предоставляет хэш-коды, которые равномерно распределены по пространству всех возможных хэш-кодов. И конечно, он пытается избежать collisions. Столкновение происходит, когда два разных элемента получают один и тот же хэш-код.
В C# например, каждый объект имеет GetHashcode() метод, который предоставляет хэш-значение для него (не обязательно уникальный). Это можно использовать для поиска и сортировки в вашем словаре.

когда вы начинаете использовать хэш-таблицы, вы всегда должны иметь в виду, что вы правильно обрабатываете столкновения. Оно может случается довольно легко в больших хэш-таблицах, что два объекта получили один и тот же хэш (возможно, ваша перегрузка GetHashcode() неисправна, возможно, что-то еще произошло).


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

обычно они более эффективны для извлечения элементов, чем деревья поиска и т. д.

вы можете найти это полезным: http://www.relisoft.com/book/lang/pointer/8hash.html

надеюсь, это поможет,

Крис


хэширование (в некриптографическом смысле) - это общий термин для ввода, а затем создания вывода для его идентификации. Тривиальным примером хэша является добавление суммы букв строки i.e:

f(abc) = 6

обратите внимание, что эта тривиальная хэш-схема создаст столкновение между строками abc, bca, ae, etc. Эффективная хэш-схема, естественно, будет производить разные значения для каждой строки.

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

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

Hashmaps похожи на hashtables, но в нем хранится только один пример каждого объекта (следовательно, ключ не должен быть предоставлен, сам объект является ключом).

это, конечно, очень простое объяснение, поэтому я предлагаю вам прочитать подробно с этого момента на. Надеюсь, я не наделал глупостей. =)


Hashmap используется для хранения данных в парах ключевых значений. Мы можем использовать hashmap для хранения объектов в приложении и использовать его далее в том же приложении для хранения, обновления, удаления значений. Ключ и значения Hashmap хранятся в ведре для определенной записи, это местоположение записи определяется с помощью функции Hashcode. Эта функция hashcode определяет хэш, в котором хранится значение. Подробные explanantion, как HashMap ведет описано в этом видео: https://youtu.be/iqYC1odZSNo