Как создать список перемешанных целых чисел между 2 числами?

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

  1. Учитывая то же самое семя, перемешивание будет одинаковым каждый раз
  2. По мере того как я повторяюсь, каждое число в перетасованном наборе будет использовано ровно один раз перед повторением
  3. Будет работать для больших наборов (я хочу, чтобы все числа от 0 до 2 миллиардов)
  4. Будет генерироваться в диапазоне, например, от 100 до 150.

Эта опция дает отличное решение, если вы хотите, скажем, все числа от 0 до указанного числа: Генерация перемешанного диапазона с использованием PRNG, а не перемешивания

Есть идеи?

1 ответ

Решение

Вы можете использовать тот же алгоритм, что и связанный вопрос. Просто генерируйте числа от 0 до upperBound - lowerBound + 1 и добавить lowerBound к результату.

например (используя код из связанного вопроса):

var upper = 5;
var lower = 3;
foreach (int n in GenerateSequence(upper-lower+1))
{
    Console.WriteLine(n+lower);
}

Если вы хотите, чтобы последовательность повторялась (перетасовывалась по-разному каждый раз), вы можете добавить while (true) вокруг тела метода итератора.

Другие вопросы по тегам