Какой реальный пример того, что вы представляете с помощью хэша? - PullRequest
3 голосов
/ 19 марта 2009

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

Ответы [ 12 ]

14 голосов
/ 19 марта 2009

Я считаю, что иногда хэш называют «словарем», и я думаю, что это хороший пример сам по себе. Если вы хотите посмотреть определение слова, просто сделайте что-то вроде:

definition['pernicious']

Вместо того, чтобы пытаться определить правильный числовой индекс, в котором будет храниться определение.

Этот ответ предполагает, что под "хешем" вы в основном просто ссылаетесь на ассоциативный массив.

5 голосов
/ 19 марта 2009

Я думаю, вы смотрите на вещи в неправильном направлении. Это не объект, который определяет, следует ли вам использовать хеш, а способ, которым вы получаете к нему доступ. Широко используется хэш при использовании справочной таблицы. Если ваши объекты являются строками, и вы хотите проверить, существуют ли они в Dictionary, поиск их (при условии, что хэш работает правильно) с помощью O (1). При сортировке время вместо этого будет равно O (logn), что может быть неприемлемо.

Таким образом, хэши идеально подходят для использования со словарями (hashmaps), наборами ( hashsets ) и т. Д.

Они также являются полезным способом представления объекта без сохранения самого объекта (для паролей).

2 голосов
/ 19 марта 2009

Телефонная книга - ключ = имя, значение = номер телефона.

Я также думаю о Книжных энциклопедиях Старого Света (настоящие книги). Каждая статья «хэшируется» в одну книгу (кот идет в томе «С»).

1 голос
/ 19 марта 2009

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

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

1 голос
/ 19 марта 2009

Каждый раз, когда у вас есть данные, которые хорошо обслуживаются картой 1-к-1.

Например, оценки в классе:

"Джон Смит" => "B +"

"Jacob Jenkens" => "C"

и т.д.

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

(код php)

$david        = new stdclass();
$david->name  = "david";
$david->age   = 12;
$david->id    = 1;
$david->title = "manager";

$joe        = new stdclass();
$joe->name  = "joe";
$joe->age   = 17;
$joe->id    = 2;
$joe->title = "employee";

// option 1: lets put users by index
$users[] = $david;
$users[] = $joe;

// option 2: lets put users by title
$users[$david->title] = $david;
$users[$joe->title]   = $joe;

Теперь вопрос: кто менеджер? Ответ:

$users["manager"] 
0 голосов
/ 19 марта 2009

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

Мне нужно было получать ежедневную сумму, не зная, сколько предметов будет на конкретный день и не знаю, какой будет диапазон дат для отчета о расходах. Существуют ограничения на то, сколько человек может потратить со многими переменными (какой город, выходные и т. Д.)

Хеш-таблица была идеальным инструментом для решения этой проблемы. Ключом была дата, когда значением была сумма квитанции (в долларах США). Квитанции могут поступать в любом порядке, я просто продолжаю получать значение на эту дату и добавляю его до тех пор, пока работа не будет завершена. Отображение было также легко.

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

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

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

Одним из примеров может быть почтовый индекс, связанный с районом, городом или любым почтовым адресом.

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

Я часто использую один для «словаря» настроек для моего приложения.

Настройка | Значение

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

Работает хорошо и просто.

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