algorithm - Evenly distributed hash function -
i need hash function takes few (eg. 2 or 3) unsigned integers input, , returns floating point value between -1 , +1.
the collection of these returned values must evenly distributed. sequence of outputs function must appear random sequence, if input numbers sequential. faster better, i'm calling lot of times.
i hope isn't ask :s...
you can employ standard scheme such tasks: (a0 + q*a1 + q^2*a2 + q^3*a3 + ...) % m
m
large prime number , q
coefficient of choice.
once have random enough hash in range [0, m)
, converting floating point number [-1, 1]
trivial.
or can remove % m
, allow integer overflow happen, although i'm not sure how secure (from 'evenly distributed' perspective).
a sequence of outputs function must appear random sequence, if input numbers sequential.
can instead of ai
use ai*ai
in expression. anyway, here's simple implementation in java.
double hash(int... a) { int q = 433494437; int result = 0; (int n : a) { result = result * q + n * n; } result *= q; return (double) result / integer.min_value; }
output random consecutive numbers. can use 64-bit integer more precision.
Comments
Post a Comment