Парные независимые хеш-функции в Java

Я ищу быстрый и простой способ использования (универсального) семейства попарно независимых хеш-функций в моих проектах Java.

В идеале у меня был бы какой-то объект UniversalFamily (представляющий семью), который возвращал бы мне объекты с методом hash() который хеширует целые числа.

Пример использования:

// use this object to generate pairwise independent hash functions
UniversalFamily family = new UniversalFamily();

// these objects represent the pairwise independent hash functions
HashF hashF1 = fam.getHashFunction();
HashF hashF2 = fam.getHashFunction();
// ...

/* here the hash functions are being used to hash the integers 1, 2 and 
   1337, the return values (not stored) are the results of the 
   corresponding hash functions. */
hashF1.hash(1);
hashF1.hash(2);
hashF2.hash(1337);
// ...

Прежде чем я начну возиться, есть ли что-нибудь подобное уже доступным?

1 ответ

Решение

Используйте что-то вроде этого:

/* Used to generate and encapsulate pairwise independent hash functions.
See see https://people.csail.mit.edu/ronitt/COURSE/S12/handouts/lec5.pdf , claim 5 for more information.
 */
private static class HashF {

    private final int a;
    private final int b;
    private final int p = 1610612741; // prime

    HashF(int a, int b) {
        Random rand = new Random();

        this.a = rand.nextInt(p);
        this.b = rand.nextInt(p);
    }

    // hashes integers
    public int hash(int x) {
        return (a*x + b) % p;
    }

}
Другие вопросы по тегам