Предположим, у меня есть последовательность чисел:
{n, n + 1, n + 2, ... n + m}
Не заблаговременно сохраняя числа, я хочу создать функцию f (), которая с учетом последовательности {1,2,3, ... m} будет выплевывать исходный набор случайным образом (или, по крайней мере, псевдо) случайный) порядок.
Например, предположим, что моя последовательность {10, 11, 12, 13, 14, 15, 16, 17}
f(1) could yield 14
f(2) could yield 17
f(3) could yield 13
f(4) could yield 10
f(5) could yield 16
f(6) could yield 15
f(7) could yield 11
f(8) could yield 12
Однажды в прошлом сотрудник показал мне математический алгоритм, который смог это сделать, но с тех пор я забыл почти все об этом, кроме того, что существовало. Я помню, что вы должны были иметь последовательность заранее и генерировать некоторые константы из последовательности, которые использовались в функции. И для тех, кто интересуется, я, к сожалению, потерял контакт с этим сотрудником.
Этот ответ на вопрос выглядит близко к тому, что я хочу, но я не уверен, позволяют ли ответы заранее ограничить вывод определенной последовательностью.
Edit:
Чтобы пояснить немного больше, я не хочу сохранять исходную последовательность или перемешанную последовательность. Я хочу сгенерировать функцию f () из исходной последовательности.
Что расстраивает то, что я видел это, я просто не могу вспомнить достаточно, чтобы найти его снова с помощью Google.
Алгоритм Фишера-Йейтса отлично подходит для перестановки или перетасовки колоды, но это не то, что я ищу.