Уникальный пользовательский строковый хеш - PullRequest
0 голосов
/ 13 февраля 2020

Я знаю, что hashCode() в JVM не может сделать строку ha sh уникальной из-за разнообразия возможных символов.

Но предположим, что у нас есть только 256 уникальных символов. Будет ли эта формула генерировать уникальный ха sh для каждой возможной строки?

string[0] * 256^0 + string[1] * 256^1 + ... + string[length-1] * 256^(length-1). 

Где `string [x]` - кодировка моего символа.

Примечание string[x] должно быть в диапазоне [1, 256] мы не можем включить 0, иначе возможно столкновение.

1 Ответ

1 голос
/ 14 февраля 2020

Если у вас есть символьное пространство размером 256, то все, что вы на самом деле делаете, это преобразование из базы 256 в базу 10 . Так что да, каждая возможная строка в вашем алфавите будет отображаться в уникальное целое число.

Тем не менее, на самом деле это не функция ha sh, поскольку это инъективная функция из пространства строк из 256 алфавитов. к натуральным числам (0, 1, 2, 3, ...). Единственная причина, по которой это не биекция, заключается в том, что ваш домен - это [1, 256] вместо [0, 255] (что не имеет значения для того, что у вас есть выше).

Как сказал @andand, если есть максимальное значение, тогда вы определенно столкнетесь с коллизиями, а если нет максимального значения, то это на самом деле не hash функция.

...