LINUX.ORG.RU

F# hash structured data

 


0

1

На поиск бага, вызванного фичей ниже, я потратил целый день, а теперь, пожалуйста, просто объясните мне эту магию:

> hash (1.0, 2.0);;
val it : int = 2112880640
> hash (2.0, 1.0);;
val it : int = 2146435072
> hash (1.0, 0.0);;
val it : int = 1039138816
> hash (0.0, 1.0);;
val it : int = 1072693248
> hash (2.0, 0.0);;
val it : int = 1073741824
> hash (0.0, 2.0);;
val it : int = 1073741824

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

pseudo-cat, может тебе не это надо и хэш тут вовсе ни причем?

Vic
()
Ответ на: комментарий от pseudo-cat

не очень понятно как происходит тогда обращение к элементу? То есть мы добавили элемент A с хэш-кодом 1, потом мы добавили элемент B с таким же хэш-кодом, но функция Equals(A, B) ложна. И под каким тогда ключом лежит B?

вот к примеру описание дотнетовского Hashtable:

When an element is added to the Hashtable, the element is placed into a bucket based on the hash code of the key. Subsequent lookups of the key use the hash code of the key to search in only one particular bucket, thus substantially reducing the number of key comparisons required to find an element.

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

arkhnchul ★★
()
Ответ на: комментарий от arkhnchul

понял, спасибо за такое подробное объяснение

pseudo-cat ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.