Re[2]: Правильный GetHashCode для сравнения byte[] по значен
От: Shmj Ниоткуда  
Дата: 25.12.16 06:28
Оценка:
Здравствуйте, samius, Вы писали:

S>В общем, верно. Но цель хэшфункции, как правило, как раз в минимизации коллизий.


Коллизий будет одинаково и при переборе всех элементов и при использовании только 4 байт.

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


Это кто сказал?

Обычно разные массивы имеют разное начало или разный конец (в зависимости от направленности массива). По этому целесообразно взять 2 байта в начале 2 байта в конце.

Количество коллизий будет одинаково. Если вы задействуете все элементы, коллизии будут у даже не похожих массивов. Если только 4 байта -- коллизии будут у похожих массивов, у которых одинаковое начало и конец.

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

S>ЗЫ. При увеличиении вероятности коллизии нелинейным образом возрастает необходимость выполнения сравнения, которое обычно дороже чем вычисление хэша.


А вот и нет. Операция сравнения работает пока не найдет разные элементы. То есть она редко перебирает все элементы массива. А вот неправильная операция вычисления хеш-кода перебирает элементы массива во всех случаях. По этому вместо ускорения получаем замедление.

Сорри, согласен. Но кто сказал что коллизий будет меньше, если вы переберете все элементы массива?
Отредактировано 25.12.2016 8:20 Shmj . Предыдущая версия . Еще …
Отредактировано 25.12.2016 6:33 Shmj . Предыдущая версия .
Отредактировано 25.12.2016 6:32 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.