Будет ли следующий сгенерированный хеш всегда отличаться для разных ключей, если предположить, что целое число хешей никогда не переполняется? Ключ должен содержать символы, кодированные ascii.Является ли эта функция хэшей уникальной?
Я думаю, что это так, поскольку я не могу придумать исключительный случай.
char[] arr = "abcd"
int hash = 0
for (int i=0; i<arr.size; i++) {
hash += (i+1) * arr[i]
}
EDIT1: Хотя нижеследующее технически правильные ответы на мой первоначальный вопрос, я должен отметить, что область ключей является то, что действительных почтовых идентификаторов. Таким образом, некоторые символы ascii не включены. Тем не менее, я проведу несколько тестов и отчитаюсь. Единственная проблема - перечислить все perms возможно только до небольшой длины.
В любом случае, мое требование состоит в том, чтобы создавать уникальные идентификаторы на основе идентификаторов электронной почты и использовать их в качестве первичных ключей в db. Просто не хотите использовать сами идентификаторы почты.
EDIT2: Хорошо, видимо, есть множество столкновений. для например, хэш [email protected] == хэш [email protected]
...
040 == 012
041 == 013
042 == 014
043 == 015
044 == 016
045 == 017
046 == 018
047 == 019
048 == 01:
...
мне нужен другой алгоритм хэширования. Можете ли вы предложить какие-либо?
«Будет ли следующий сгенерированный хэш всегда отличаться для разных клавиш?» По определению «хэш-функция» ответ «нет». Если ответ «да» - не называйте его хэш-функцией. –
вы занимаете большое пространство значений и «сжимаете» его на меньшее пространство. по определению там должно быть не менее 2 входных значений, которые отображаются на один и тот же вывод. –
Должно быть хотя бы одно столкновение – xdevs23