Мне нужна матрица NxN с 16-битным или 32-битным псевдослучайным равномерно распределенным числом по всему диапазону значений. N, к сожалению, очень большой (по крайней мере, 1e6), поэтому он не может быть предварительно сгенерирован (это займет около ТБ памяти). Единственный жизнеспособный вариант, о котором я могу думать, - использовать хэш моих индексов i и j в качестве матричных элементов.Псевдослучайный хэш двух целых чисел
Существует множество целых хеш-функций, но я не уверен, какие из них подходят по двум причинам.
-Достаточно 32-разрядные целые операции без знака. Так как N не менее 2^20, я не могу наивно объединить два индекса в один 32-битный ключ, не создавая ненужных коллизий.
-Примерность важна здесь, я не здание хэш-таблицы. Большинство целых хэшей, которые я нашел, предназначены для хэш-таблиц и не имеют очень сильных требований.
Возможное решение будет заключаться в криптографическом хеше, таком как SHA-2, но производительность важна, и это слишком дорого.
Предложения о том, как объединить два 32-битных uint в один wile, избегая шаблонов столкновений, уже очень помогут, поскольку я мог бы выбрать из всего диапазона 32-битных 32-х хэвых хэшей.
Некоторое понимание, по которому 32-х и 32-х хэшированные хэши имеют хорошую случайность, также будет высоко оценено.
Прегенерация 1 или 2 массивов из N случайных чисел не проблема, если это помогает.
В случае, если это имеет значение, целью являются графические процессоры, которые я пишу в последних версиях GLSL.
Не имея четкого понимания ваших потребностей, трудно сделать рекомендацию. У меня были хорошие результаты, используя [хэш-функцию Роберта Дженкинса] (http://www.burtleburtle.net/bob/hash/doobs.html) для аналогичных приложений за последние 20 лет. Он обладает очень хорошими свойствами для выпаса. Я бы сказал, что стоит попробовать. – njuffa
Полностью лавина, единообразие и отсутствие узоров - мои основные требования. – MaVo159
В этом случае определенно дайте хэш-функции Jenkins попробовать.Автор разместил код в общедоступном домене, поэтому вы можете использовать его практически для любой базы кода. Еще один хэш с хорошей лавиной в моем воспоминании - это хеш Murmur3. – njuffa