Реализация множества списков N объектов из списка M объектов
Застопорился на таком вопросе. Есть массив/список/что угодно из 5 объектов. Необходимо перебрать (рекурсивно в идеале) все варианты списка из 20 объектов, в котором будут в рандомном порядке элементы из первого массива.
List<Object> objects = new ArrayList<>();
objects.add(obj1);
objects.add(obj2);
objects.add(obj3);
objects.add(obj4);
objects.add(obj5);
List<Object> list = new ArrayList<>(); //список из 20 элементов, в который кидаются 5 элементов objects
На выходе должен получать список, выполнять с ним работу и генерировать новый список пока не переберу все варианты
Буду благодарен любой информации
Ответы (1 шт):
Всего будет 5^20 вариантов (M^N).
Все их сгенерировать можно, но довольно долго.
Можно воспользоваться представлением комбинации как числа от 0 до M^N-1 в M-ричной системе счисления.
Если нужны все варианты - проходим в цикле с указанными пределами, и ставим в соответствие счётчику определённую комбинацию.
Если нужны случайные варианты- генерируем случайное число в указанных пределах и опять же делаем соответствующую ему комбинацию
i - номер комбинации
t = i
for (k = 0; k < N; k++) {
idx = t % M
list[k] = objects[idx]
t = t / M
}