Комментарии 17
Не совсем, генерация случайных перестановок будет неравномерной, но в вашем случае, вероятно, это не так важно.
НЛО прилетело и опубликовало эту надпись здесь
Потому что нужно было все это делать на стороне клиента, seed должен был быть разным для одного пользователя для каждого теста, который он начинал (почти разный, если бы так совпало и рандомайзер сгенерил бы одинаковый, то ладно), ну и к тому-же тасование Фишера-Йетса не вариант. Вот такой вот был запрос ¯\_(ツ)_/¯
НЛО прилетело и опубликовало эту надпись здесь
Шафлить нужно было на клиенте. Мое решение, которое я применил линейное, квадратичное это дополнение, чтоб найти нужную пермутацию. Её мы не использовали, ибо не надо было. Про СУБД не знал, но буду знать
НЛО прилетело и опубликовало эту надпись здесь
Решение, которое было применено мной на реально проекте то, которое идет до
После просто дополнение о пермутациях, чтоб не уткнуться в большое значение факториала, с ограничениеями, которые я описал. До этого нет циклов в цикле
Если это именно то, что вы искали, то применяем данный код для вашей ситуации. Однако, хоть он и генерирует случайную последовательность чисел (а именно это мне и было нужно), благодаря нему нельзя получить n-ную последовательность. Чтобы исправить ситуацию, мы немного дополним наш код:
После просто дополнение о пермутациях, чтоб не уткнуться в большое значение факториала, с ограничениеями, которые я описал. До этого нет циклов в цикле
НЛО прилетело и опубликовало эту надпись здесь
А чем не понравился стандартный java.util.Collections.shuffle c параметром Random?
Это я щас на джаве все написал, а тогда вовсе не на ней писал. Да и хоть тут можно указать объект рандома, метод использует тасование Фишера-Йетса, а нам именно нужна была последовательность. То есть если какой-то элемент сел на одно место, там и должен сидеть
Оно именно так и работает. shuffle с заданным Random дает стабильный результат.
Я не говорю, что результат нестабильный. Разве что ошибся с алгоритмом, перечитал доки и да, там не алгоритм Фишера-Йетса, как я думал. Но в любом случае, писалось все тогда не на джаве, я щас потому что мне просто нравится алгоритмы на ней писать
Вы уже раза 3 написали, что Фишер-Йетс не подходит (к слову большое спасибо, я знал этот алгоритм, но не знал, что он именной), но совершенно непонятно почему. Исходя из той задачи и того исходного решения, которое вы описали, создается ощущение, что подходит абсолютно любой алгоритм равномерной генерации перестановок. Все, что нужно сделать — это запомнить seed.
"Делаем два списка. Список четных чисел и список нечетных..."
Так напомнило )
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Генерация предсказуемых случайных последовательностей: другой подход к пермутациям