Я пытаюсь создать функцию, которая генерирует хэш-ключ, основанный на том, где в хеш-таблице я хочу, чтобы значение было выполнено.Как изменить функцию хеша-метода
My hash function is (a + b * (key)) % c = hash value
. Я видел similar question к этому на SO, и то, что я пытался замену b * (key)
с d
и просто делать:
private int ReverseModulus(int a, int b, int c, int hashValue)
{
if(hashValue >= c)
return -1;
if(a < hashValue)
return (hashValue - a)/b;
return (c + hashValue - a)/b;
}
но мне кажется, что большую часть времени hashValue != Hash(ReverseModulus(a,b,c, hashValue))
.
Мне было интересно, неправильный подход или если в коде есть только ошибка.
Хеши, по дизайну, в одну сторону. – Servy
Я думаю, что вы хотите прочитать [Perfect Hash Function] (https://en.wikipedia.org/wiki/Perfect_hash_function) –
Я знаю, что между ключами и значениями хэша нет взаимно однозначных отношений, но я просто хочу чтобы получить одно из бесконечного числа ключей, которые будут генерировать желаемое значение хэш-функции. Например, вы можете переборщить его, итерации от 0 до тех пор, пока не получите правильное значение хэш-функции. –