Отказ от повторения одних и тех же случайных последовательностей

Например, у нас есть любое число от 0 до 11, и мне нужно повторить процесс пару раз (мои намерения слишком сложны для объяснения, так что просто потерпите меня):

        Random ran = new Random();

        for (int i = 0; i < n; i++)
        {

            int n = ran.Next(0, 10);
            //......
        }

Однако приложение никогда не должно повторять одну и ту же случайную последовательность. Как я могу это сделать? Я думал о принудительном исключении предыдущих семян на каждой итерации, но я не знаю, как манипулировать семенами. Есть идеи? Кроме того, выбор первого числа НЕ ДОЛЖЕН быть псевдослучайным. Заранее спасибо.


person Fedja Mladenovic    schedule 15.12.2018    source источник
comment
Почему он никогда не должен повторять одну и ту же последовательность? Какова длина последовательности, которую нельзя повторить? И что вы подразумеваете под «не должно быть псевдослучайным»? Ваше намерение может быть сложно объяснить, но контекст необходим для ответа на него.   -  person Ry-♦    schedule 15.12.2018
comment
@Ry, я постараюсь. У меня есть два целочисленных массива по 20 целых чисел в каждом. На каждой итерации должно быть выбрано одно случайное целое число из случайного одного из этих массивов. Когда они все выбраны, цикл повторяется, но он не должен повторяться одинаково. Длина последовательности, очевидно, 40, тогда (20+20). Когда я говорю, что выбор первого числа не должен быть псевдослучайным, что означает, что он не может иметь назначенное начальное число, он должен быть действительно случайным.   -  person Fedja Mladenovic    schedule 15.12.2018
comment
Можете ли вы просто использовать CSPRNG тогда? Равномерно случайный выбор из набора из 40! нет возможности повторить.   -  person Ry-♦    schedule 15.12.2018
comment
Насколько разными должны быть ваши последовательности? Вы можете выбрать первое число 1, 2, 3, 4 и т. д., а RNG будет генерировать остальную часть каждой последовательности. Таким образом, каждая последовательность гарантированно будет отличаться, потому что все первые числа различны, даже в том маловероятном случае, если другие числа находятся в той же последовательности.   -  person rossum    schedule 16.12.2018


Ответы (1)


У объекта Random есть еще один конструктор public Random(int Seed), в котором вы можете указать начальное значение, чтобы вы могли каждый раз изменять начальное значение, чтобы получить другую последовательность.

Проверьте также официальный документация, в которой все подробно описано.

person AlesD    schedule 15.12.2018