Как создать список перемешанных целых чисел между 2 числами?
Я хочу создать перемешанный набор целых чисел, такой что:
- Учитывая то же самое семя, перемешивание будет одинаковым каждый раз
- По мере того как я повторяюсь, каждое число в перетасованном наборе будет использовано ровно один раз перед повторением
- Будет работать для больших наборов (я хочу, чтобы все числа от 0 до 2 миллиардов)
- Будет генерироваться в диапазоне, например, от 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)
вокруг тела метода итератора.