Ответы до сих пор помогли определить хеш-таблицы и объяснить некоторые теории, но я думаю, что пример может помочь вам лучше их понять.
В чем разница между хеш-таблицей и обычным массивом?
Хеш-таблица и массив - это структуры, которые позволяют хранить и извлекать данные. Оба позволяют указать index и получить значение, связанное с ним. Разница, как отметил Дэниел Спивак, состоит в том, что индексы массива последовательные , а индексы хеш-таблицы основаны на значении данных , связанных с ними.
Зачем мне использовать хеш-таблицу?
Хеш-таблица может обеспечить очень эффективный способ поиска элементов в больших объемах данных, особенно данных, которые иначе нелегко найти. («Большой» здесь означает ginormous в том смысле, что для последовательного поиска потребуется много времени).
Если бы я должен был закодировать хеш, как бы я начал?
Нет проблем. Самый простой способ - изобрести произвольную математическую операцию, которую вы можете выполнить с данными, которая возвращает число N
(обычно целое число). Затем используйте это число в качестве индекса в массиве «сегментов» и сохраните ваши данные в сегменте № N
. Хитрость заключается в выборе операции, которая имеет тенденцию размещать значения в разные сегменты таким образом, чтобы вам было легче их найти позже.
Пример: Большой торговый центр хранит базу данных автомобилей и мест стоянки своих клиентов, чтобы помочь покупателям вспомнить, где они припарковались. В базе данных хранятся make
, color
, license plate
и parking location
. При выходе из магазина покупатель находит свою машину, указав ее марку и цвет. База данных возвращает (относительно короткий) список номерных знаков и парковочных мест. Быстрое сканирование определяет местонахождение автомобиля покупателя.
Вы можете реализовать это с помощью SQL-запроса:
SELECT license, location FROM cars WHERE make="$(make)" AND color="$(color)"
Если данные были сохранены в массиве, который по сути является просто списком, вы можете представить реализацию запроса, отсканировав массив для всех соответствующих записей.
С другой стороны, представьте себе правило хеширования:
Добавьте коды символов ASCII всех букв в марке и цвете, разделите на 100 и используйте остаток в качестве значения хеш-функции.
Это правило преобразует каждый элемент в число от 0 до 99, по сути сортируя данные в 100 сегментов. Каждый раз, когда клиенту нужно найти автомобиль, вы можете хэшировать марку и цвет, чтобы найти одно ведро из 100, содержащее информацию. Вы сразу сократили поиск в 100 раз!
Теперь масштабируйте пример до огромных объемов данных, скажем, базы данных с миллионами записей, которые ищутся по десяткам критериев. «Хорошая» хеш-функция распределяет данные по сегментам таким образом, чтобы свести к минимуму дополнительный поиск и сэкономить значительное количество времени.