Объект Random в .NET framework принимает 32-битное целое число в качестве начального значения. Это означает, что любой алгоритм перетасовки, использующий объект Random, ограничен (максимум) 4 миллиардами возможных перетасовок (при условии, что перетасовка является детерминированной в соответствии со случайной последовательностью, и я не могу представить, почему это не так). Это означает, что когда коллекция превышает 13 элементов, гарантируется, что перетасовка не охватит все возможные перестановки. По мере того, как размер коллекции становится все дальше от этого размера, подмножество возможных перестановок, охватываемых перетасовкой, становится все более и более незначительным.
4 миллиарда - это (субъективно) большое число, но если вы создаете несколько «случайных» перестановок коллекции, вероятность дублирования становится намного больше, чем должна быть (особенно, если вы рассматриваете парадокс дня рождения / принцип ящика).
Есть ли какой-нибудь простой способ обойти это, не требуя от меня реализации собственного генератора случайных чисел?