Хэшировании точки по xyz и имени в тип ushort
От: Sharov Россия  
Дата: 23.11.20 17:51
Оценка: :)
Здравствуйте.

Необходимо хэшировать, а вообще говоря, коллизии сильно не желательны набор из имени точки (от 2-х символов, но вообще
говоря вряд ли будет меньше 4-х символов) и картезианских координат точки (вообще говоря, точность
может быть сантиметровой или даже миллиметровой, но может, вероятно, имеет смысл отбросить дробную часть
и работать с метрами). В общем дано, имя точки и ее пространственные координаты xyz. Все это надо
крайне желательно уникально отобразить в индекс типа ushort, т.е. до 65535.
С начала пытался использовать только имя точки, и решил использовать этот код,
где возвращается (ushort)hash. Решил сгенерировать от 'a' до 'z' строки длины 4, но слишком много коллизий.
Например, "agac" и "caga" совпадают (речь об ushort). В то время как для int все ок:
HashString2("agac") 30877539
HashString2("caga") 30943075

Вспомнил, что помимо имени точки у меня еще есть ее координаты xyz, которые можно использовать как-то так
hash = (x * 31) + (y * 37) + (z * 41). Но опять же, нет уверенности в "равномерности" хэширования.

Т.е. есть какие-нибудь идеи, как из имени точки и ее коорд. получить более менее уникальный индекс в пределах 65535?

Заранее благодарю.
Кодом людям нужно помогать!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.