Во-первых, исследуйте Twister Mersenne. Это должно стать отличной основой для вашей проблемы.
Режим 1: напрямую используйте значения. Учитывая, что значения являются 32-битными, в зависимости от диапазонов min и max, по модулю (max-min + 1) может быть достаточно хорошим, хотя есть небольшой уклон, если этот интервал не является степенью двойки. В противном случае вы можете рассматривать значение как значение с плавающей запятой в диапазоне от 0 до 1 и требовать дополнительных операций. Могут быть и другие решения, чтобы получить равное распределение с целыми числами, но я еще не исследовал эту конкретную проблему. Википедия может помочь здесь.
Режим 2: используйте массив, который вы заполняете min..max, а затем перемешиваете его. Вернуть перемешанные значения по порядку. Когда вы пройдете через массив, добавьте и перетасуйте.
Режим 3 является наиболее сложным. Небольшие количества случайных значений показывают кластеры, то есть если вы подсчитываете вхождения разных значений, у вас есть среднее значение, и значения обычно выше или ниже этого среднего. Как я понимаю вашу ссылку, люди ожидают, что случайность будет иметь все значения в среднем. Поэтому посчитайте вхождения и дайте различным значениям более высокую вероятность, в зависимости от их расстояния до среднего значения. Может быть достаточно просто повторно использовать режим 2 с несколькими массивами, например используйте массив, в 10 раз превышающий размер (max-min + 1), заполните его 10x min, 10x min + 1 и т. д. и перемешайте его. Каждые полные 10 раундов вы получаете равное количество.
РЕДАКТИРОВАТЬ в режиме 3:
Скажем, у вас есть мин = 1 и макс = 5. Вы считаете события. Если все они имеют одинаковую вероятность (которую они должны использовать с помощью хорошего генератора случайных чисел), то эта вероятность для каждого значения будет равна 0,2, поскольку вероятности составляют в сумме 1,0:
Value Occur Probability
1 7x 0.2
2 7x 0.2
3 7x 0.2
4 7x 0.2
5 7x 0.2
Average: 7x
Но теперь давайте скажем, что 3 произошло только 5x и 5 произошло 9x. Если вы хотите сохранить равное распределение, то 3 должно стать более высокой вероятностью, чтобы догнать среднее вхождение, а 5 должно стать более низкой вероятностью, чтобы не расти так быстро, пока все другие значения не будут догонены. Тем не менее, все индивидуальные вероятности должны составлять в целом 1,0:
Value Occur Probability
1 7x 0.2
2 7x 0.2
3 5x 0.3
4 7x 0.2
5 9x 0.1
Average: Still 7x
Разные вхождения должны также иметь разные вероятности в зависимости от их среднего расстояния:
Value Occur Probability
1 10x 0.05
2 4x 0.35
3 5x 0.3
4 7x 0.2
5 9x 0.1
Average: Still 7x
Не так просто реализовать и, скорее всего, очень медленно, потому что генератор случайных чисел все еще обеспечивает равные вероятности, поэтому модифицированный режим 2 может быть достаточно хорошим выбором.