Реализация множества списков 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 шт):

Автор решения: MBo

Всего будет 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
}
→ Ссылка