Во-первых, вы всегда можете случайным образом отсортировать список в конце, поэтому давайте не будем беспокоиться о «случайных перестановках» (сложно); и просто беспокойтесь о 1) создании перестановок (легко) и 2) рандомизации их (легко).
Если вам нужны «по-настоящему» случайные группы, вы должны принять тот факт, что рандомизация по своей природе не допускает ограничения «равномерного распределения» результатов — вы можете получить это или вы можете получить набор похожих результатов. Если вы действительно хотите равномерного распределения, сначала сделайте наборы равномерно распределенными, а затем рандомизируйте их как группу.
Вы должны использовать каждый элемент в наборе x равномерно? Из правил не ясно, что я не мог просто сделать следующую интерпретацию:
Обратите внимание на следующее: «во всех списках количество использований каждого элемента одинаково (или максимально близко)».
Основываясь на этом критерии и правиле z ‹ x*, я постулирую, что вы можете просто перечислить все элементы во всех списках. Таким образом, вы автоматически составляете список y из элементов, перечисленных в позиции z. Ваш пример не соответствует приведенному выше правилу так точно, как моя версия. Используя ваш пример x={0,1,2,3} y=6 и z=2, я получаю: 0,1 0,1 0,1 0,1 0,1 0,1
Теперь я не использовал 2 или 3, но вы не сказали, что я должен использовать их все. Если бы мне пришлось использовать их все, и мне не нужно доказывать, что я «насколько возможно близок» к равномерному использованию, я бы просто перечислил все элементы в списках, например: 0,1 2 ,3 0,1 2,3 0,1 2,3
Наконец, предположим, что мне действительно нужно использовать все элементы. Чтобы вычислить, сколько раз может повторяться каждый элемент, я просто беру (y*z)/(количество x). Таким образом, мне не нужно сидеть и беспокоиться о том, как разделить элементы в списке. Если есть остаток или результат меньше 1, то я знаю, что не получу точного количества повторений, поэтому в этих случаях не имеет большого значения пытаться тратить вычислительную энергию, чтобы сделать его идеальным. Я утверждаю, что самый быстрый результат по-прежнему состоит в том, чтобы просто перечислить, как указано выше, и использовать расчет здесь, чтобы показать, почему идеальный результат был или не был достигнут. Причудливый алгоритм для извлечения из этого расчета, сколько позиций будет дубликатами, может быть достигнут, но «это слишком долго, чтобы поместиться здесь на полях».
*Каждый список имеет одинаковое количество элементов z, поэтому невозможно составить списки, в которых z больше x, и при этом соблюдать правило, согласно которому ни один список не может содержать один и тот же элемент дважды. Следовательно, это правило требует, чтобы z не могло быть больше x.
person
devinmoore
schedule
18.09.2008