Универсальные хеш-функции для строкиJAVA

Программисты JAVA общаются здесь
Ответить
Гость
 Универсальные хеш-функции для строки

Сообщение Гость »

Я пытаюсь реализовать две разные универсальные хэш-функции для строк.
Но у меня проблема: иногда хеш-значение равно 0.
При этом я не могу использовать хэш-функцию, потому что хочу чтобы реализовать двойное хеширование, необходимо реализовать эту функцию: hash_func1(string s) + i * hash_func2(string s) для просмотра хеш-таблицы.
Но если одна хэш-функция равна 0, ничего не меняется, и я получаю бесконечный цикл .
Это для обнаружения коллизий в хеш-таблице.
Для этого мне нужны две разные универсальные хеш-функции.

Я пробовал разные хеш-функции. функций, но не могу найти ничего работающего.

Может ли кто-нибудь помочь мне с этой проблемой?

Это некоторые из функции, которые я пробовал.

int h = 0 , r1 = 31415 , r2 = 27183;
for (int i =0; i < key.length (); i ++) {
h = ( r1 * h + key.charAt ( i )) % capacity ;
r1 = r1 * r2 % (capacity -1);
}
return h ;


Или этот

int seed = 131;
long hash = 0;
for(int i = 0; i < key.length(); i++)
{
hash = (hash * seed) + key.charAt(i);
}
return (int) (hash % capacity);


Подробнее здесь: https://stackoverflow.com/questions/165 ... for-string
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»