Цитата Сообщение от AI! Посмотреть сообщение
Плохой работающий (практический) генератор лучше хорошего но неработающего (теоретического)...
Давайте начнём с вашего возражения?

Цитата Сообщение от AI! Посмотреть сообщение
Цитата Сообщение от vladimirisitnikov Посмотреть сообщение
0) Для каких-то задач "генератор без повторений" может и потребоваться. Но слепо использовать его для всех задач -- нехорошо.

Если говорить чем "в целом" плох генератор, который выдаёт циклами без повторений, то
1) Плохо то, что он предсказуем. Например, если генерируем числа от 0 до 4, и 0, 1, 2, 3 уже выпали, то с вероятностью 100% выпадет число 4.
2) Плохо то, что нет эффективной реализации для произвольного диапазона. Нет от слова "совсем". Хорошую реализацию можно сделать через массив. Т.е. заполнить его числами от 0 до N, перемешать, и выдавать по одному. На ST это тривиально, а в ОЛ уже проблематично. Но, стоит понимать, что большие массивы держать в памяти и перемешивать всё равно время займёт.
3) Для частных случаев (некоторых N) можно сделать алгоритм не требующий массива, но он при этом будет выдавать лишь часть из возможных перестановок.

А ничего что я уже написал сей макрос?
Который генерирует число от 0 до n без повторений, где n произвольное, меньше 1024.
А называется макрос rnd1024.

PS если есть желание, сам генератор можно легко поменять на ваш, а обработчик массива оставить мой.
Я же не говорю, что "вообще написать невозможно".
1) Я развёрнуто говорю, почему именно в ОЛ невозможно сделать эффективную реализацию.
2) У меня есть сомнения, что даже xorshift128 хватит, чтобы сгенерировать все возможные перестановки 0..63. Ну, в xorshift128 состояние 128 бит, а ln(64!)/ln(2) это почти 300. Возможно, во второй части я ошибаюсь, но сходу не могу сообразить хватит ли энтропии xorshift'а или нет.

3) Можно попробовать прогнать "алгоритм rnd1024" через тесты, проверяющие "случайность" перестановки. Наверняка есть такие. Вот тут вопрос насколько предсказуемые значения генерирует rnd1024.


Цитата Сообщение от AI! Посмотреть сообщение
Плохой работающий (практический) генератор лучше хорошего но неработающего (теоретического)...
Вы в каком контексте говорите про "теоретический"? В контексте ОЛ или контексте КДС/ST?
Уверен, что ни у кого не должно быть сомнений в том, что на ST легко реализовать "random shuffle".
Вот про "реализацию random shuffle на ОЛ" -- согласен, там непросто. Но я с самого начала и говорил, что "невозможно сделать эффективную реализацию".