Является ли многократный засев генератора случайных чисел разумной хэш-функцией?

Я хочу генерировать большое количество случайных данных, воспроизводимых для заданного ключа, состоящего из списка чисел:

[a, b, c, d, e, ...]

Является ли следующее хорошим или разумным способом привести ГПСЧ в состояние для генерации случайных данных таким образом, чтобы для каждого n-кортежа [a, b, c, .... ..., n], эти данные некоррелированы с выходом для "соседних" n-кортежей [a+1, b, c, ..., n], [a, b+1, c, ..., n] и т.д.

srand(a);
srand(rand() * b);
srand(rand() * c);
...
srand(rand() * n);

# generate random data:
for (int i=0; i < 100; +i)
  printf("%d", rand());

Я думаю, этот вопрос сводится к следующему: является ли rand_hash хорошей хэш-функцией для 2-кортежа (a, b)?

int rand_hash(int a, int b) { 
  srand(a); 
  srand(rand() * b); 
  return rand();
}

NB: Я не хочу подразумевать, что srand и rand являются какой-либо конкретной реализацией RNG. Предположим ради аргумента, что мы используем хороший код Mersenne Twister.

Edit: Если не ясно, под "разумной хэш-функцией" я подразумеваю следующее. В ограниченном случае 2-кортежа [a, b], тогда выход rand_hash должен быть равномерным в диапазоне int, и (обычно) не должно быть корреляции между величиной изменения a или b и величиной изменения возвращаемого значения.

7
задан Nick 28 October 2011 в 18:56
поделиться